Algrow MCP Server
Connect Algrow's YouTube intelligence to Cursor, Claude, VS Code, Windsurf, and any MCP-compatible client. Search channels, find viral videos, scrape data, and generate TTS — all through natural conversation.
Setup
Pick your platform and copy the config. The remote server requires no installation — just paste the config and restart.
Open Cursor → Settings → MCP → + Add new MCP server
Go to claude.ai → Settings → Connectors → Add custom connector
After adding the connector, Claude will redirect you to sign in with your Algrow account. Click Approve to connect.
/mcp to verify the server is connected.
Open VS Code → Ctrl+Shift+P (or Cmd+Shift+P) → type "MCP: Add Server"
Open Windsurf → Settings → MCP → Add Server, or edit the config file directly:
• macOS / Linux:
~/.codeium/windsurf/mcp_config.json• Windows:
%USERPROFILE%\.codeium\windsurf\mcp_config.jsonAfter saving, restart Windsurf.
Open or create ~/.codex/config.toml (or .codex/config.toml in your project root)
Any MCP-compatible client can connect using the Streamable HTTP endpoint:
your-api-key-here with your actual API key from Settings. After configuring, restart your client to connect.
What is MCP?
The Model Context Protocol (MCP) lets AI assistants use external tools. The Algrow MCP server gives your AI assistant direct access to Algrow's YouTube intelligence — search channels, find viral videos, scrape YouTube data, and generate TTS audio through natural conversation.
Pick your platform
Add the config to Cursor, Claude, VS Code, or Windsurf
Start asking
"Find me roblox Shorts channels under 50k subs growing fast"
Channel Search
Search Algrow's database of YouTube Shorts and Longform channels with similarity search, keyword matching, and advanced filters.
Search Shorts channels with similarity search, keyword matching, and advanced filters. Returns channel metadata, growth metrics, and recent videos.
| Parameter | Type | Default | Description |
|---|---|---|---|
| q | string | required | Search query. Accepts a channel ID, @handle, a video URL (e.g. https://youtube.com/shorts/..., https://youtu.be/...), or a search term. Uses similarity matching. Comma-separated for multiple, prefix with - to exclude. |
| languages | string | null | Filter by language. Comma-separated (e.g. English,Spanish) |
| sort | string | subs_desc | Sort: {field}_{asc|desc}. Fields: subs, views, videos, age, added, views_24h, subs_24h, views_48h, similarity |
| page | integer | 1 | Page number (1-indexed, max 20) |
| per_page | integer | 20 | Results per page (max 50) |
| min_subs | integer | null | Minimum subscriber count |
| max_subs | integer | null | Maximum subscriber count |
| min_avg_views | integer | null | Minimum average views per video |
| max_avg_views | integer | null | Maximum average views per video |
| min_age | integer | null | Minimum channel age in days |
| max_age | integer | null | Maximum channel age in days |
| min_uploads | integer | null | Minimum number of videos |
| max_uploads | integer | null | Maximum number of videos |
| min_views | integer | null | Minimum total view count |
| max_views | integer | null | Maximum total view count |
| min_views_24h | integer | null | Minimum views gained in last 24 hours |
| max_views_24h | integer | null | Maximum views gained in last 24 hours |
| min_views_48h | integer | null | Minimum views gained in last 48 hours |
| max_views_48h | integer | null | Maximum views gained in last 48 hours |
Search Longform channels with similarity search, keyword matching, and advanced filters. Returns channel metadata, growth metrics, monetization status, and recent videos with duration.
| Parameter | Type | Default | Description |
|---|---|---|---|
| q | string | required | Search query. Accepts a channel ID, @handle, a video URL (e.g. https://youtube.com/shorts/..., https://youtu.be/...), or a search term. Uses similarity matching. Comma-separated for multiple, prefix with - to exclude. |
| languages | string | null | Filter by language (e.g. English) |
| sort | string | subs_desc | Sort: {field}_{asc|desc}. Fields: subs, views, videos, age, total_views, added, views_24h, subs_24h, views_48h, similarity |
| page | integer | 1 | Page number (1-indexed, max 20) |
| per_page | integer | 20 | Results per page (max 50) |
| min_subs | integer | null | Minimum subscriber count |
| max_subs | integer | null | Maximum subscriber count |
| min_avg_views | integer | null | Minimum average views per video |
| max_avg_views | integer | null | Maximum average views per video |
| min_age | integer | null | Minimum channel age in days |
| max_age | integer | null | Maximum channel age in days |
| min_uploads | integer | null | Minimum number of videos |
| max_uploads | integer | null | Maximum number of videos |
| min_duration | integer | null | Minimum average video duration in seconds |
| max_duration | integer | null | Maximum average video duration in seconds |
| monetized | string | null | Filter by monetization: yes or no |
| min_views_24h | integer | null | Minimum views gained in last 24 hours |
| max_views_24h | integer | null | Maximum views gained in last 24 hours |
| min_views_48h | integer | null | Minimum views gained in last 48 hours |
| max_views_48h | integer | null | Maximum views gained in last 48 hours |
Terminated Channels
Search terminated/deleted YouTube channels. Returns channel metadata, growth metrics at time of termination, and top videos. Requires Professional or Ultimate plan.
| Parameter | Type | Default | Description |
|---|---|---|---|
| q | string | required | Search query. Matches channel titles and video titles. Comma-separated for multiple keywords. |
| languages | string | null | Filter by language. Comma-separated. |
| sort | string | date_desc | Sort: {field}_{asc|desc}. Fields: subs, views, videos, age, views_24h, subs_24h, views_48h, date, similarity |
| page | integer | 1 | Page number (1-indexed, max 20) |
| per_page | integer | 20 | Results per page (max 50) |
| min_subs | integer | null | Minimum subscriber count |
| max_subs | integer | null | Maximum subscriber count |
| min_avg_views | integer | null | Minimum average views per video |
| max_avg_views | integer | null | Maximum average views per video |
| min_age | integer | null | Minimum channel age in days |
| max_age | integer | null | Maximum channel age in days |
| monetized | string | null | Filter by monetization: yes or no |
Viral Videos
Search for viral videos across Shorts and Longform channels, or find videos similar to a specific video. Filter by video views, channel size, growth metrics, upload recency, and language. Provide a search query or video ID.
| Parameter | Type | Default | Description |
|---|---|---|---|
| search | string | null | Search query. Uses similarity matching — pass exact video titles, not paraphrased keywords. Either search or video_id is required. |
| video_id | string | null | YouTube video ID (e.g. dQw4w9WgXcQ). Finds videos similar to this video using title similarity. Either search or video_id is required. |
| content_type | string | shorts | Content type: shorts or longform |
| languages | string | English | Filter by language. Comma-separated. |
| sort_by | string | views | Sort: views (most viewed), recent (newest fetched), upload_date (newest uploaded), similarity |
| page | integer | 1 | Page number (1-indexed, max 20) |
| per_page | integer | 20 | Results per page (max 50) |
| min_video_views | integer | null | Minimum video view count |
| max_video_views | integer | null | Maximum video view count |
| min_subs | integer | null | Minimum channel subscriber count |
| max_subs | integer | null | Maximum channel subscriber count |
| min_uploads | integer | null | Minimum channel video count |
| max_uploads | integer | null | Maximum channel video count |
| min_channel_age | integer | null | Minimum channel age in days |
| max_channel_age | integer | null | Maximum channel age in days |
| min_upload_date | integer | null | Newest allowed upload (days ago, 0 = today) |
| max_upload_date | integer | null | Oldest allowed upload (days ago, e.g. 365 = 1 year) |
| min_duration | integer | null | Minimum video duration in minutes (longform only) |
| max_duration | integer | null | Maximum video duration in minutes (longform only) |
| min_views_24h | integer | null | Minimum channel views gained in last 24h (shorts only) |
| max_views_24h | integer | null | Maximum channel views gained in last 24h (shorts only) |
| min_views_48h | integer | null | Minimum channel views gained in last 48h (shorts only) |
| max_views_48h | integer | null | Maximum channel views gained in last 48h (shorts only) |
Thumbnail Search
Search for longform videos by thumbnail similarity. Provide a YouTube video URL, an image URL, or a text description to find videos with visually similar thumbnails using similarity matching.
| Parameter | Type | Default | Description |
|---|---|---|---|
| image_url | string | null | URL of a thumbnail image to search with. Supports JPEG, PNG, WebP, and GIF. |
| video_url | string | null | YouTube video URL — automatically extracts its thumbnail. Accepts watch, shorts, and youtu.be links. |
| q | string | null | Text description of the thumbnail style (e.g. “red arrow pointing at shocked face”). |
| limit | integer | 20 | Max results to return (1–50) |
| min_similarity | float | 0.3 | Minimum similarity threshold (0–1). Higher values return fewer but more visually similar results. |
| min_views | integer | null | Minimum video view count filter |
Search terminated/deleted channel videos by thumbnail similarity. Same as search_by_thumbnail but searches the terminated channels archive instead of active longform channels.
| Parameter | Type | Default | Description |
|---|---|---|---|
| image_url | string | null | URL of a thumbnail image to search with. Supports JPEG, PNG, WebP, and GIF. |
| video_url | string | null | YouTube video URL — automatically extracts its thumbnail. Accepts watch, shorts, and youtu.be links. |
| q | string | null | Text description of the thumbnail style (e.g. “red arrow pointing at shocked face”). |
| limit | integer | 20 | Max results to return (1–50) |
| min_similarity | float | 0.3 | Minimum similarity threshold (0–1). Higher values return fewer but more visually similar results. |
| min_views | integer | null | Minimum video view count filter |
| max_views | integer | null | Maximum video view count filter |
YouTube Scraper
Scrape video data from a YouTube channel or single video. Returns metadata, transcripts, and top comments (sorted by likes). Async — submits a job, polls until complete, returns final results.
| Parameter | Type | Default | Description |
|---|---|---|---|
| url | string | required | YouTube channel URL or video URL |
| video_type | string | both | Type of videos: shorts, videos, or both |
| sort | string | recent | Sort order: recent or popular |
| max_videos | integer | 20 | Maximum videos to scrape (1-100) |
| include_transcripts | boolean | false | Include full video transcripts |
| include_comments | boolean | false | Include top comments for each video (sorted by likes) |
Text-to-Speech
Browse voices, generate audio, and check job status. Supports both ElevenLabs and Stealth TTS providers.
Browse and search available TTS voices. Returns voice IDs, names, previews, and metadata. Set stealth=true for Stealth provider voices.
| Parameter | Type | Default | Description |
|---|---|---|---|
| search | string | null | Search by voice name or labels |
| gender | string | null | Filter: male, female, or neutral |
| age | string | null | Filter: young, middle_aged, or old |
| language | string | null | Language code (e.g. en, es, fr) |
| accent | string | null | Filter by accent (e.g. american, british) |
| sort | string | trending | Sort: trending, created_date, usage_character_count_1y |
| page_size | integer | 30 | Results per page (max 100) |
| page | integer | 0 | Page number (0-indexed) |
| stealth | boolean | false | Use Stealth voices endpoint instead of ElevenLabs |
Generate text-to-speech audio. Submits a job, polls until complete, returns the permanent hosted audio URL.
| Parameter | Type | Default | Description |
|---|---|---|---|
| script | string | required | Text to convert to speech (max 200,000 characters) |
| voice_id | string | required | Voice ID from list_voices, or voice name for Stealth provider |
| provider | string | elevenlabs | TTS provider: elevenlabs or stealth |
| model_id | string | null | ElevenLabs model (e.g. eleven_multilingual_v2, eleven_flash_v2_5) |
| stability | float | null | Voice consistency 0.0-1.0 (ElevenLabs only) |
| similarity_boost | float | null | Voice match accuracy 0.0-1.0 (ElevenLabs only) |
| style | float | null | Style exaggeration 0.0-1.0 (ElevenLabs only) |
| speed | float | null | Playback speed 0.7-1.2 (ElevenLabs only) |
| temperature | float | null | Expressiveness — higher is more expressive (Stealth only) |
| speaking_rate | float | null | Speaking speed multiplier (Stealth only) |
| voice_name | string | null | Human-readable voice label for your reference |
| custom_title | string | null | Custom filename for output MP3 (without extension) |
| generate_srt | boolean | false | Generate SRT subtitle file (ElevenLabs only) |
Check the status of a TTS generation job. Use this to retrieve the audio_url for a previously submitted job.
| Parameter | Type | Default | Description |
|---|---|---|---|
| job_id | string | required | Job ID returned from generate_tts |
List your recent TTS generation jobs, sorted by creation time (newest first). No parameters required.
Clone a voice using the Stealth voice engine. Upload an audio sample and get a reusable voice ID. Requires an active subscription.
| Parameter | Type | Default | Description |
|---|---|---|---|
| display_name | string | required | Display name for the cloned voice |
| audio_url | string | required | URL to the audio sample (MP3, WAV, M4A, OGG, WEBM; max 15MB) |
| lang_code | string | EN_US | Language code (e.g. EN_US, ES_MX, FR_FR, DE_DE, JA_JP) |
| description | string | null | Description of the voice |
Delete a cloned Stealth voice by ID.
| Parameter | Type | Default | Description |
|---|---|---|---|
| voice_id | string | required | ID of the cloned voice to delete |
Media Generation
Generate an AI image from a text prompt. Requires Professional or Ultimate plan. Costs 2–3 studio credits depending on model.
| Parameter | Type | Default | Description |
|---|---|---|---|
| prompt | string | required | Description of the image to generate |
| model | string | nano-banana-2 | Model: nano-banana-2 (2 credits, default), nano-banana-pro (3, supports up to 8 reference images), seedream-4.5-edit (2, requires reference_image_url), seedream-5.0-lite (2, optional reference) |
| aspect_ratio | string | 16:9 | Aspect ratio (e.g. 16:9, 9:16, 1:1) |
| reference_image_url | string | null | Optional reference image URL |
Generate an AI video from a text prompt. Requires Professional or Ultimate plan. Costs 3–30 studio credits depending on model and duration.
| Parameter | Type | Default | Description |
|---|---|---|---|
| prompt | string | required | Description of the video to generate |
| model | string | sora-2 | Model: sora-2, kling-2.6, veo3-fast, grok-image-to-video |
| seconds | string | 4 | Duration for sora-2 (4, 8, or 12 seconds) |
| size | string | 720x1280 | Resolution (e.g. 720x1280, 1280x720) |
| duration | string | 5 | Duration for kling model (5 or 10 seconds) |
| sound | boolean | false | Include audio (kling only) |
| aspect_ratio | string | 9:16 | Aspect ratio (e.g. 9:16, 16:9) |
| input_reference_url | string | null | Reference image URL |
Remove captions or watermarks from a video. Costs 12 credits per minute (0.2 per second, rounded up). Requires Professional or Ultimate plan.
| Parameter | Type | Default | Description |
|---|---|---|---|
| video_url | string | required | URL of the video to remove captions from |
Remove the Sora watermark from a video. Costs 2 studio credits. Requires Professional or Ultimate plan. URL must be from sora.chatgpt.com.
| Parameter | Type | Default | Description |
|---|---|---|---|
| video_url | string | required | Sora video URL (must be from sora.chatgpt.com) |
Utility
Check API health and view current job counts. Useful for verifying your connection is working.
Example Prompts
Once the MCP server is connected, just ask Claude in plain English. Here are some examples to get started:
Limits
| Limit | Value | Applies to |
|---|---|---|
| Requests per minute | 30 | All tools |
| Max page number | 20 | Search tools |
| Max results per page | 50 | Search tools |
| Max results per query | 1,000 | Search tools (20 pages × 50 results) |
| Max concurrent jobs | 5 | TTS, scraper, media generation |
| Max videos per scrape | 100 | scrape_youtube |
| Max script length | 200,000 chars | generate_tts |
search_shorts_channels, search_longform_channels, search_viral_videos) require a search query. Browsing without a query is not supported.
Troubleshooting
Server not appearing in Claude Code
- Run
/mcpin Claude Code to see connected servers - Check your
~/.claude.jsonsyntax with a JSON linter - Restart Claude Code completely
Server not appearing in Claude Desktop
- Restart Claude Desktop completely (not just close the window)
- Verify config file path is correct for your OS
- Check JSON syntax — a trailing comma will break it
- Look for the MCP indicator (hammer icon) in the chat input area
API key errors
- Verify your API key at algrow.online/settings
- Make sure the key is in the
Authorizationheader, notargsorenv - Check your subscription is active (Professional or Ultimate plan required)
Algrow
Shorts Channels