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.
Go to chatgpt.com → Settings → Apps → Advanced settings → toggle on Developer mode
Go to Settings → Apps → Create App
Tick "I understand and want to continue", then click Create. ChatGPT will auto-discover the OAuth settings — no Client ID or secret needed.
When you first use an Algrow tool, ChatGPT 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, channel URL, a video URL (e.g. https://youtube.com/shorts/..., https://youtu.be/...), or topic keywords. Comma-separated for multiple, prefix with - to exclude. |
| sort | string | null | Sort: {field}_{asc|desc}. Fields: subs, views, videos, age, added, views_24h, subs_24h, views_48h, similarity. Defaults to similarity when searching. |
| page | integer | 1 | Page number (1-indexed, max 20) |
| 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 since first upload |
| max_age | integer | null | Maximum channel age in days since first upload |
| 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 |
| min_days_added | integer | null | Minimum days since channel was added to Algrow's database (NOT channel age) |
| max_days_added | integer | null | Maximum days since channel was added to Algrow's database (NOT channel age) |
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, channel URL, a video URL (e.g. https://youtube.com/shorts/..., https://youtu.be/...), or topic keywords. Comma-separated for multiple, prefix with - to exclude. |
| sort | string | null | Sort: {field}_{asc|desc}. Fields: subs, views, videos, age, total_views, added, views_24h, subs_24h, views_48h, similarity. Defaults to similarity when searching. |
| page | integer | 1 | Page number (1-indexed, max 20) |
| 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 since first upload |
| max_age | integer | null | Maximum channel age in days since first upload |
| 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 |
| min_days_added | integer | null | Minimum days since channel was added to Algrow's database (NOT channel age) |
| max_days_added | integer | null | Maximum days since channel was added to Algrow's database (NOT channel age) |
Search everything on YouTube in one call — videos, channels, and playlists all in the same result list. Sort by relevance, views, upload date, or rating. Narrow by duration, upload recency, or a custom “last N days” window.
| Parameter | Type | Default | Description |
|---|---|---|---|
| query | string | required | Search query. |
| type | string | all | all, video, channel, playlist, movie. |
| sort_by | string | relevance | relevance, view_count, upload_date, rating. |
| upload_date | string | all | all, hour, today, week, month, year. |
| duration | string | all | short (<4m), medium (4–20m), long (>20m). Videos only. |
| published_within_days | integer | null | Narrow video results to those posted within the last N days. Finer than upload_date — use for "last 3 days" phrasings. |
| limit | integer | 30 | Max results (1–100). |
Channel Data
Look up rich metadata for any YouTube channel by ID. If you only have a @handle or URL, call resolve_handle or resolve_url first.
Pull everything from a channel's About page in one call — name, description, subscriber and view counts, country, language, join date, topics, social links, trailer, banner, and more.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | 24-char YouTube channel ID (starts with UC). |
See how a channel has grown day-by-day across any date range you pick — subscribers, views, and uploads, plus a summary with total growth over the window.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | 24-char YouTube channel ID. |
| start_date | string | 30 days ago | ISO YYYY-MM-DD. |
| end_date | string | today | ISO YYYY-MM-DD. Max window 365 days. |
Browse a channel's longform uploads, newest first — with titles, view counts, durations, upload dates, and thumbnails.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | 24-char YouTube channel ID. |
| limit | integer | 30 | Max videos (1–100). |
Browse a channel's Shorts, newest first — the real Shorts tab, not short-duration regular videos.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | 24-char YouTube channel ID. |
| limit | integer | 30 | Max shorts (1–100). |
See every public playlist on a channel — title, description, video count, and thumbnail for each. Paginates in batches of 50.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | 24-char YouTube channel ID. |
| page_token | string | null | Pass next_page_token from a previous response for subsequent pages. |
Terminated Channels
Search terminated/deleted YouTube channels. Returns channel metadata, growth metrics at time of termination, and top videos. Available on all plans.
| 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 | 50 | Results per page (max 50) |
| min_subs | integer | null | Minimum subscriber count |
| max_subs | integer | null | Maximum subscriber count |
| min_views | integer | null | Minimum total view count |
| max_views | integer | null | Maximum total view 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 |
| monetized | string | null | Filter by monetization: yes or no |
Viral Videos
Find viral videos — by similarity to a query/video, or by pure filters. Three modes: (1) pass search for a topic/channel query, (2) pass video_url to find similar videos, (3) omit both and browse by filters alone (e.g. “biggest outliers from the last 7 days with 100k+ views”). To check if specific channels have viral videos, pass their channel_ids from a prior search. Filter by video views, channel size, growth metrics, upload recency, language, and outlier score (a video's views ÷ its channel's average views per video — e.g. 3.2 means the video got 3.2× the channel's typical views). Each result includes an outlier_score field; sort by outlier_score to surface the biggest over-performers.
| Parameter | Type | Default | Description |
|---|---|---|---|
| search | string | null | Text search query — uses title similarity matching. Pass exact video titles, not paraphrased keywords. Optional — omit along with video_url to browse by filters alone. |
| video_url | string | null | YouTube video URL (watch, shorts, or youtu.be link). Finds similar videos based on the given video. Optional. |
| content_type | string | shorts | Content type: shorts or longform |
| channel_ids | string | null | Comma-separated channel IDs to filter by (e.g. from a prior search_shorts_channels result). When provided, only returns viral videos from these specific channels. |
| languages | string | English | Filter by language. Comma-separated. |
| sort_by | string | similarity | Sort: similarity (default, best for finding most relevant videos — requires search or video_url; auto-swaps to outlier_score for pure-filter browsing), views (most viewed), recent (newest fetched), upload_date (newest uploaded), outlier_score (biggest over-performers — views vs channel average) |
| page | integer | 1 | Page number (1-indexed, max 20) |
| per_page | integer | 50 | Results per page (max 50) |
| min_video_views | integer | 25000 | Minimum video view count. Default matches the system's natural floor. |
| 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 |
| uploaded_within_days | integer | null | Only include videos uploaded within this many days. E.g. 7 = last week, 30 = last month. |
| uploaded_before_days | integer | null | Exclude videos newer than this many days ago. E.g. 7 = only show videos older than 1 week. |
| min_duration | integer | null | Minimum video duration in seconds (longform only) |
| max_duration | integer | null | Maximum video duration in seconds (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) |
| min_outlier_score | float | null | Minimum outlier score. A video's outlier_score = its view count ÷ its channel's average views per video, so 2.5 means “video got 2.5× the channel's typical views.” Use this to surface videos over-performing their channel. |
| max_outlier_score | float | null | Maximum outlier score. Rarely needed — usually pair with min_outlier_score. |
| min_similarity | integer | null | Minimum similarity score (0–100). Only return videos with at least this similarity %. E.g. 55 = only show videos that are 55%+ similar. |
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. 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 | 50 | 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 |
| uploaded_within_days | integer | null | Only include videos uploaded within this many days. E.g. 7 = last week, 30 = last month. |
| uploaded_before_days | integer | null | Exclude videos newer than this many days ago. E.g. 7 = only show videos older than 1 week. |
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. 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 | 50 | 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) |
Fetch full transcript text for YouTube videos. Pass one or more transcript_url values from scrape_youtube results (comma-separated for batch). All URLs are fetched in parallel. Returns complete transcripts with no truncation.
| Parameter | Type | Default | Description |
|---|---|---|---|
| transcript_url | string | required | One or more transcript_url values from scrape_youtube results. Pass a single URL or multiple comma-separated URLs to fetch all in parallel. |
Workspace
Organize channels into folders, save and manage your research. 30 channels per folder hard cap on all plans.
List the user's saved folders with channel counts. Returns folder name, ID, channel count, and creation date for each folder. No parameters required.
Create a new folder for organizing saved channels. Returns 409 if a folder with this name already exists. Folder limits: Starter 15, Pro 50, Ultimate unlimited.
| Parameter | Type | Default | Description |
|---|---|---|---|
| name | string | required | Folder name (1–50 chars, must be unique per user) |
Rename an existing folder. Pass the current folder name (or ID) and the new name. Returns 409 if the new name collides with another existing folder.
| Parameter | Type | Default | Description |
|---|---|---|---|
| folder | string | integer | required | Current folder name OR folder ID |
| new_name | string | required | New folder name (1–50 chars, must be unique) |
Delete a folder AND unsave every channel in it. Destructive — the first call (confirm=false) returns a preview with the channel count so the user can confirm. There is no Uncategorized fallback.
| Parameter | Type | Default | Description |
|---|---|---|---|
| folder | string | integer | required | Folder name OR folder ID to delete |
| confirm | boolean | false | Set to true to confirm deletion. First call returns the channel count so you can warn the user before they confirm. |
Get all channels in a folder with live 24h growth metrics. Returns each channel's current subscriber count, view count, and the latest 24h delta (views_24h, subs_24h).
| Parameter | Type | Default | Description |
|---|---|---|---|
| folder | string | integer | required | Folder name OR folder ID |
Save one or more channels to a folder. Channel IDs must be raw YouTube channel IDs (start with UC, 24 chars). For @handles or URLs, call resolve_handle / resolve_url first. 30 channels per folder hard cap.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_ids | list[string] | required | List of YouTube channel IDs (UCxxxxxxxxxxxxxxxxxxxxxx). Must be raw IDs — call resolve_handle or resolve_url first to convert @handles or URLs. |
| folder | string | integer | required | Folder name OR folder ID. There is no default folder — must be specified. |
Remove a channel from the user's saved set. The channel disappears from whichever folder it was in.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | YouTube channel ID (UCxxxxxxxxxxxxxxxxxxxxxx) to remove from saved channels |
Move an already-saved channel from its current folder to a different one. Returns 404 if the channel isn't currently saved. Returns 409 if the target folder is at the 30-channel cap.
| Parameter | Type | Default | Description |
|---|---|---|---|
| channel_id | string | required | YouTube channel ID (UCxxxxxxxxxxxxxxxxxxxxxx) to move |
| to_folder | string | integer | required | Destination folder name OR folder ID |
Resolvers
Convert @handles and URLs to stable channel IDs for use with workspace tools. These are narrow-use tools — search tools auto-resolve handles and URLs internally.
Resolve a YouTube @handle to a stable channel ID. Use only when you need a raw channel ID for save_channels. Search tools already auto-resolve handles — do NOT call this before searching.
| Parameter | Type | Default | Description |
|---|---|---|---|
| handle | string | required | A YouTube @handle (e.g. @cheftok or cheftok). The leading @ is optional. |
Resolve a YouTube channel URL or video URL to a stable channel ID. For video URLs, the owner channel is returned. Use only when you need a raw channel ID for save_channels.
| Parameter | Type | Default | Description |
|---|---|---|---|
| url | string | required | A YouTube channel URL (youtube.com/@handle, youtube.com/channel/UCxxx) or video URL (watch, shorts, youtu.be). For video URLs the owner channel is returned. |
Alerts
Set up growth alerts on channels, folders, and saved searches. Alerts fire once a night and show once the next morning. Plan limits: Starter 3, Professional 25, Ultimate unlimited.
List all the user's active alerts (paused and unpaused). No parameters required.
Create a growth alert. Fires once a night when the threshold is crossed. Three target types: channel (single channel), folder (any channel in a folder), search (new channels matching a saved search).
| Parameter | Type | Default | Description |
|---|---|---|---|
| target_type | string | required | What the alert watches: channel (single channel), folder (any channel in a folder), or search (new channels matching a saved search). |
| target_value | object | required | Shape depends on target_type: {"channel_id": "UCxxx..."} for channel, {"folder_id": 47} for folder, {"query": {"q": "cooking", "max_subs": 100000, "content_type": "shorts"}} for search. |
| metric | string | required | What to measure: subs_24h (subscriber gain in last 24h), views_24h (view gain), subscriber_count, avg_views, total_videos, view_count, avg_duration, video_outlier (new video's views vs channel avg), or new_channels (count of new search matches — search target only). |
| threshold | number | required | Fire when the metric value is >= this number. E.g. 5000 with metric subs_24h means "fire when channel gains 5000+ subs in 24h". For video_outlier, this is a float multiplier — e.g. 2.5 fires when a new video gets 2.5x or more views than the channel's average per video. |
Pause an alert without deleting it. Resume later with unpause_alert.
| Parameter | Type | Default | Description |
|---|---|---|---|
| alert_id | integer | required | Alert ID from list_alerts |
Resume a previously paused alert.
| Parameter | Type | Default | Description |
|---|---|---|---|
| alert_id | integer | required | Alert ID from list_alerts |
Permanently delete an alert. Also deletes all its triggered_alerts history.
| Parameter | Type | Default | Description |
|---|---|---|---|
| alert_id | integer | required | Alert ID from list_alerts |
Get diagnostic status for the user's video_outlier alerts. Returns what the nightly evaluator looked at, what it skipped and why, and the top 10 near-miss channels. Use this to answer "what did my alert find yesterday" or "why hasn't it fired yet". Unlike get_triggered_alerts, this shows every run — including ones where nothing met the threshold. Data is from the last evaluator run (a checked_at_human field like "3 hours ago" tells you how fresh).
No parameters. Returns one entry per video_outlier alert with state (checked / never_checked / paused), summary (channels total / with uploads / skipped breakdown / top_outlier_score), and near_misses (array of up to 10 channels whose top video scored at least 10% of the threshold, each with per-condition pass/fail).
Get the user's alert inbox — the morning-briefing tool. By default returns alerts that have fired since the user last checked and marks them as seen. Set include_acknowledged=true for read-only history mode.
| Parameter | Type | Default | Description |
|---|---|---|---|
| since | string | null | Optional duration filter: 24h, 7d, 30d. Limits results to alerts that fired within this window. |
| include_acknowledged | boolean | false | Default false (inbox mode). Set true for read-only history mode that includes already-seen alerts and does NOT mark new ones as seen. |
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