ReelScribe MCP Server
Transcribes Facebook videos (/watch?v=, /videos/), Reels and fb.watch short links. Comment extraction is not supported for Facebook and such requests are rejected before a job is created.
Submits Instagram Reels, Posts and IGTV links for transcription, optionally extracting a selection of top comments (pinned and creator comments prioritized) alongside the transcript, and supports paid Instagram channel scraping of 1–50 reels with an optional date filter.
Transcribes TikTok videos, including short links (vm.tiktok.com, vt.tiktok.com), with optional top-comment extraction returned as typed rows containing text, author, likes, isPinned and isCreator.
Transcribes YouTube videos, Shorts and youtu.be short links, with optional top-comment extraction (pinned flags are not exposed by YouTube) and video stats such as the total comment count.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ReelScribe MCP Servertranscribe this TikTok video and include the comments"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ReelScribe MCP Server
An MCP (Model Context Protocol) server that connects AI assistants to ReelScribe — transcribe Instagram Reels, TikTok videos, and YouTube videos directly from Claude, Cursor, Windsurf, and other MCP-compatible clients.
Setup
Hosted connector (Cloudflare Workers)
The endpoint is https://reelscribe.app/api/mcp. Add it as a remote
connector in Claude or as an MCP connection in ChatGPT developer mode, then
sign in to your ReelScribe account and approve access. Directory publication is
a separate review process.
Hosted transcription returns a requestId immediately. Use get_transcription
with that ID to retrieve the transcript after processing; submitting a duplicate
returns the existing transcript. Account administration is available on the website.
Deploying
Deploy the accompanying ReelScribe API OAuth change, including the Convex
includeRetentionresponse on/admin/get-user-by-clerk-id.In the production Clerk instance, create and advertise the custom scope
reelscribe:mcp, with consent text explaining permission to read transcripts and credit balance, and submit transcriptions that spend credits. Enable CIMD client onboarding, require S256 PKCE, and set the default scopes toreelscribe:mcp. For expanded workflows register an optional separatereelscribe:managescope, retained under its existing name for compatibility. Its consent text must explain only batch/channel submissions that spend credits. Default scopes arereelscribe:mcp reelscribe:manage; a single-video client may request onlyreelscribe:mcp. Existing connections must explicitly approve the extra transcription permission on reconnect. Keep opaque access tokens enabled. Allow the intended clients to request the custom scope; enable DCR only for clients needing it.Authenticate Wrangler with permission to deploy Workers in the SIÁN account. If Wrangler lists multiple accounts, set
CLOUDFLARE_ACCOUNT_IDto that account.Run
bun run typecheck,bun test,bun run worker:build, thenbun run worker:deploy.Verify
/health, the public OAuth metadata, an unauthenticated/mcp401 challenge, and the complete sign-in and transcription flow in both clients.
The branded URL is forwarded by the ReelScribe website to the existing Cloudflare
Worker with branded=1, which selects matching OAuth resource metadata.
The original https://reelscribe-mcp.sian-agency.workers.dev/mcp endpoint and its
OAuth discovery remain available for existing connections. The domain is managed
outside Cloudflare, so a direct Worker custom subdomain would require DNS changes.
The Worker holds no shared user API key or Clerk secret. It forwards each
caller's token to ReelScribe's API, which verifies it with Clerk and resolves
only that token's user. The base OAuth scope permits transcript, credit and job reads and single-video
submission. Batch/channel submissions require separately granted reelscribe:manage
consent. Despite its legacy name, this scope grants only transcription submission.
Even existing management grants cannot access downloads, deletion, analytics or settings.
Local stdio setup remains available below.
1. Get an API Key
Sign up at reelscribe.app (25 free credits) and generate an API key from your API settings.
2. Configure Your MCP Client
Add to your MCP client configuration:
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"reelscribe": {
"command": "npx",
"args": ["-y", "reelscribe-mcp-server"],
"env": {
"REELSCRIBE_API_KEY": "rs_your_api_key_here"
}
}
}
}Claude Code (~/.claude.json or project .mcp.json):
{
"mcpServers": {
"reelscribe": {
"command": "npx",
"args": ["-y", "reelscribe-mcp-server"],
"env": {
"REELSCRIBE_API_KEY": "rs_your_api_key_here"
}
}
}
}Cursor (Settings > MCP):
{
"mcpServers": {
"reelscribe": {
"command": "npx",
"args": ["-y", "reelscribe-mcp-server"],
"env": {
"REELSCRIBE_API_KEY": "rs_your_api_key_here"
}
}
}
}Related MCP server: ytmcp
Available Tools
Tool | Description |
| Submit a video URL (1 credit). Optional |
| Get a transcription by ID or requestId. Returns full transcript text. |
| List one page of your transcriptions (default 20, max 200), newest first. Status, platform, creator, date, job and request filters. |
| Find transcriptions by the original video URL, within a bounded recent window. |
| Check credit balance, subscription tier, stored transcription count, and retention. |
| Check if a URL is supported without submitting. |
| transcribe_bulk | Submit a URL list (including URLs read from CSV); tier limits and 1 credit per new video apply. |
| transcribe_instagram_channel | Paid Instagram channel scraping, 1–50 reels and optional date filter. |
| list_jobs | Read progress and page through owned batch/channel jobs. |
The nine tools focus on transcription. Downloads, library management, retries,
cancellation, analytics, settings and billing are available in the web app.
Batch and channel submissions require an API key or explicit additional
reelscribe:manage transcription consent; legacy base-only OAuth tokens cannot
perform them. Facebook comments remain unsupported. The hosted 2.2.1 release
does not publish the deferred npm release.
Comment extraction
Set includeComments: true on transcribe_video to request a selection of top
comments alongside a new Instagram, TikTok or YouTube transcription. It is off
by default and the total cost remains 1 credit. Pinned and creator comments are
prioritized where available; YouTube does not expose a pinned flag. Facebook
comment extraction is unsupported. This is not a full comment-thread export.
Completed results include a comments array with text, author, likes,
isPinned and isCreator; it is null when no comments were returned.
stats.comments is the video's total comment count, separate from those rows.
Existing matching transcripts are reused as-is, without adding new comments.
{ "url": "https://www.youtube.com/watch?v=vXUPEow4Itw", "includeComments": true }Pagination
list_transcriptions returns a page, never a whole library. Pass nextCursor
back as cursor while hasMore is true to walk the rest.
The API does not report a library total, so this server does not invent one:
libraryTotal is a number only when a response provably covers the entire
result set (first page, no further pages), and null otherwise. For a
library-wide figure, get_credits reports library.completedTranscriptions —
itself a bounded count, flagged with library.isCapped when the real number is
higher.
Transcripts in list results are 500-character previews with the full length in
transcriptChars; call get_transcription with an id to read one in full.
Storage and retention
There is no storage quota. Per-tier count limits were retired on 2026-07-31 —
a library is bounded by time instead, and get_credits reports the retention
that applies to the account (unlimited while subscribed, a rolling window
otherwise). Transcriptions created before the policy date are never
auto-deleted.
Supported Platforms
Instagram — Reels, Posts (
/p/), IGTV (/tv/)TikTok — Videos, short links (
vm.tiktok.com,vt.tiktok.com)YouTube — Videos, Shorts, short links (
youtu.be)Facebook — Videos (
/watch?v=,/videos/), Reels, short links (fb.watch)
Example Usage
"Transcribe this TikTok video: https://www.tiktok.com/@user/video/123456"
"Check my credit balance"
"List my completed transcriptions"
"Did I already transcribe this video? https://www.instagram.com/reel/ABC123/"
Pricing
Free: 25 credits on signup
Creator: $9.99/mo — 1,000 credits
Agency: $24.99/mo — 3,000 credits
Enterprise: $59.99/mo — 10,000 credits
Each transcription costs 1 credit. View pricing
Changelog
2.1.0
Optional
includeCommentsontranscribe_videofor Instagram, TikTok and YouTube, forwarded through the existing API without an extra credit charge.Typed comment rows in retrieved transcripts; unsupported Facebook requests are rejected before creating a job.
2.0.0
Compatibility with the ReelScribe /v1 API changes of 2026-07-31. 1.0.5 and
earlier report wrong numbers against the current API and should be upgraded.
Breaking:
list_transcriptionsno longer reportstotal. That field became the length of the page when the endpoint went cursor-paginated, so 1.0.5 answered "how many transcriptions do I have?" with the page size — 100 for a library of 2,000 — and nothing in the response revealed it. Replaced byreturned(this page),libraryTotal(a number only when the response covers everything, otherwisenull),hasMoreandnextCursor.list_transcriptionsreturns 500-character transcript previews plustranscriptChars, not full transcript text. Useget_transcriptionfor the full text.get_creditsno longer reportsstorage.limit. Per-tier storage caps were retired; the API now returns-1("no limit") for every tier, which rendered as "unlimited" and hid a real 30-day retention window. Replaced bylibrary.completedTranscriptions/library.isCappedand aretentionblock.
Added:
cursorandlimitparameters onlist_transcriptions(default 20, max 200).Facebook video and Reel URLs are validated locally, which the API has accepted all along —
validate_urlandtranscribe_videoused to reject them before a request was made.search_transcriptionsreportsmatchesReturnedand states that its window is bounded, sofound: falseis no longer readable as "never transcribed".
Links
License
MIT
Available Tools
9 toolsget_creditsARead-onlyIdempotentInspect
Check your ReelScribe credit balance, subscription tier, how many completed transcriptions are stored, and how long they are kept. Each transcription costs 1 credit. There is no storage quota — a library is bounded by time (see retention), not by a count limit. library.completedTranscriptions is a bounded count: when library.isCapped is true the real number is higher than the returned count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), but the description adds genuinely new behavioral context: there is no storage quota, the library is bounded by time via `retention`, and `library.completedTranscriptions` is a bounded count where `isCapped=true` means the real value is higher than reported. That last point is important data-accuracy disclosure an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns, then adds two short clarifying notes about cost and library capping. Four sentences with no filler, though the backticked field references (`retention`, `library.completedTranscriptions`, `library.isCapped`) get dense for a short description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden, and it covers the main items (balance, tier, library counts, retention) plus the `isCapped` caveat. It does not sketch the full response shape or the format of the retention value, which is a minor gap for a simple no-arg read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document and the baseline of 4 applies. The description correctly does not waste space on non-existent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and enumerates the exact resources returned: credit balance, subscription tier, stored completed transcriptions, and retention duration. It is clearly distinguishable from the transcription-oriented siblings (transcribe_video, list_transcriptions, etc.) since no other tool exposes account/billing state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: mentioning 'Each transcription costs 1 credit' suggests calling this as a pre-flight affordability check. It never states when to prefer this over siblings or any condition where it should not be called, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptionARead-onlyIdempotentInspect
Get a transcription by its ID or requestId. Returns the full transcription text and any extracted comments when completed, or status/error info if still processing or failed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Transcription ID | |
| requestId | No | Transcription job request ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds genuinely non-redundant behavioral detail: the response shape varies by state (full text plus extracted comments when completed, status/error otherwise), which is important for an agent deciding whether to retry or poll. It does not note whether a lookup by a nonexistent ID errors or returns null.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The retrieval contract is front-loaded and the state-dependent return behavior follows immediately; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the burden of explaining return values across states, and annotations cover the safety profile. The one real gap is that both parameters are optional (required: 0) yet the description never says what happens if neither is provided, nor whether it polls or fails while processing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented as 'Transcription ID' and 'Transcription job request ID'. The description only restates that lookup is possible by either key, adding no syntax or precedence detail (e.g., which wins if both are supplied). Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (retrieve a transcription) and specifies the two lookup keys, which cleanly separates it from list_transcriptions and search_transcriptions. It stops short of naming a sibling explicitly or describing the broader transcribe workflow, so it earns a solid 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this after a transcription exists, using either the transcription ID or the job request ID. There is no explicit when-to-use/when-not guidance, no mention of alternatives such as list_transcriptions for discovering IDs, and no guidance on polling when the job is still processing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsBRead-onlyIdempotentInspect
List one page of batch/channel jobs or read progress for a specific bulk job ID. Results belong to the connected account.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| bulkJobId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered by structured data. The description adds two real behavioral facts — results are paginated one page at a time and are scoped to the connected account — but says nothing about ordering, cursor lifetime, or whether listing includes completed/failed jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and the mode distinction, with no filler. The trailing sentence about account scope is brief and purposeful, though slightly vague.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% schema description coverage, the definition should describe what a returned job record contains (status, type, timing) and how cursor pages terminate. It covers the action and scope but leaves the return payload opaque.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It implies bulkJobId selects a progress read, but never names 'cursor' or explains that it advances pagination, leaving one of two parameters unexplained in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('List') plus resource ('batch/channel jobs') and distinguishes two modes: paging through jobs vs. reading progress for a specific bulkJobId. It is clear what the tool does, though it does not name any sibling by contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the presence of bulkJobId suggests a targeted progress read, while omitting it implies listing a page. There is no explicit 'use this when... use X instead' guidance and no mention of how it relates to siblings such as transcribe_bulk or get_transcription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transcriptionsARead-onlyIdempotentInspect
List ONE PAGE of your transcriptions, newest first (default 20, max 200). The API does not report a library total. hasMore and nextCursor describe pagination; cursor selects a subsequent page. libraryTotal is populated only for a complete first-page result. Transcripts are returned as previews.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page (default 20, max 200) | |
| owner | No | Exact creator/channel name | |
| cursor | No | `nextCursor` from a previous call, to fetch the following page | |
| status | No | Filter by transcription status | |
| endDate | No | ||
| platform | No | ||
| bulkJobId | No | ||
| startDate | No | Inclusive creation date, epoch milliseconds | |
| requestIdFilter | No | Exact transcription request ID filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower; the description adds non-obvious behavior: no library total is reported, libraryTotal is populated only for a complete first-page result, and results come back as previews. These are genuine behavioral disclosures beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, all front-loaded with the most important constraint (ONE PAGE, newest first) first. Every sentence carries distinct information about pagination or return shape; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully characterizes the return payload (hasMore, nextCursor, libraryTotal, previews), which an agent needs to paginate correctly. It is nearly complete; only a few filter params (platform, bulkJobId, date range) go unexplained across both schema and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema documents most params. The description clarifies cursor's relationship to nextCursor and restates the limit default/max, but leaves owner, platform, bulkJobId, requestIdFilter and endDate to the schema (several of which have no schema description at all). It adds value on cursor but doesn't fully compensate for the uncovered params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('list your transcriptions') with a clear scope modifier (ONE PAGE, newest first). It does not, however, name or distinguish itself from sibling list/search tools like search_transcriptions, so an agent must infer the boundary rather than being told it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the pagination flow well ('cursor selects a subsequent page', 'hasMore/nextCursor describe pagination'), which implies how to iterate. But it gives no explicit when-to-use guidance versus search_transcriptions or get_transcription, and no when-not-to-use exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transcriptionsARead-onlyIdempotentInspect
Find transcriptions whose original video URL contains the given string. Returns the newest match in full, plus ids of any other matches. Useful for checking whether a video has already been transcribed. The search covers a bounded window of your most recent transcriptions and returns a capped number of matches, so found: false means "not found in that window" — it does not prove the video was never transcribed, and matchesReturned is not a library-wide count.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The video URL to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral context: the search is scoped to a bounded window of recent transcriptions, results are capped, and thus `found: false` does not prove absence while `matchesReturned` is not a library-wide count. This directly prevents agent misinterpretation of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does, then the result shape, then the caveats, with no filler. The final clause is a dense run-on packing two distinct caveats, but both earn their place for a tool whose failure mode is a misleading empty result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return contract itself: newest match returned in full plus ids of other matches, with explicit meaning for `found` and `matchesReturned`. Combined with annotations and a fully documented single param, nothing needed to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter at 100% schema coverage, the baseline is 3; however the description adds real semantics beyond the schema by specifying that matching is substring containment against the *original* video URL, not exact equality. That clarifies how to formulate the input value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find/search) plus resource (transcriptions) and the exact matching rule (original video URL contains the given string). It is clearly distinguishable from get_transcription (fetch a known one), list_transcriptions (enumerate), and transcribe_video (create one).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage context: 'Useful for checking whether a video has already been transcribed.' It even clarifies the semantics of a negative result, which is a usage-level caveat. It stops short of naming a sibling alternative or stating when-not-to-use, so it is strong but not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_bulkADestructiveInspect
Submit up to 1,000 video URLs as a batch. The account tier sets the actual batch limit; each new video costs 1 credit. Existing transcripts are reused. Returns a bulk job ID. Requires an API key or additional batch transcription consent.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (destructiveHint=true, idempotentHint=false, openWorldHint=true) but say nothing about cost or consent. The description supplies the missing operational context: 1 credit per new video, tier-dependent batch ceiling, reuse of existing transcripts, and the API-key/consent gate. It does not explain what 'destructive' means here (credit consumption, job side effects) or how to track the returned job.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, all carrying distinct information (limit, cost, reuse, return value, auth), with the core action front-loaded. Dense and waste-free, though slightly staccato and fragmentary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly states the return value ('a bulk job ID'). Combined with cost, reuse, tier limits, and the auth gate, an agent has what it needs to invoke correctly; only polling/status follow-up is unaddressed, and list_jobs sibling likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 0% schema description coverage, so the description must compensate. It confirms the 1,000-URL ceiling (matching maxItems) and adds the credit cost per URL, but says nothing about URL validity constraints or what happens on partial failure within the array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submit ... video URLs as a batch') and the scale (up to 1,000), which signals it is the plural counterpart to transcribe_video without naming it. Clear enough to route correctly, but the sibling differentiation is implied by 'batch' rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'batch' implies when to use this over transcribe_video, and it names a prerequisite ('Requires an API key or additional batch transcription consent'), but it never states the condition for choosing bulk over single submission or when this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_instagram_channelADestructiveInspect
Transcribe up to 50 reels from an Instagram channel, optionally after a date. Paid plans only. Reserves 1 credit per requested reel under the same refund rules as the website. Requires an API key or additional batch transcription consent.
| Name | Required | Description | Default |
|---|---|---|---|
| reelCount | Yes | ||
| channelUsername | Yes | ||
| onlyPostsNewerThan | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=false and non-idempotency, and the description adds real behavioral context: 1 credit reserved per requested reel, refund rules, paid-plan gating, and the consent/API-key requirement. It still omits what happens on partial failure or how credits are refunded in edge cases, but it goes meaningfully beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and resource, with eligibility and cost details following. Every sentence carries distinct information; only the refund-rules clause is slightly opaque without further detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a credit-consuming, non-idempotent batch tool with no output schema, the description covers limits, cost, eligibility, and consent requirements, which is most of what an agent needs before invoking. Return shape and pagination behavior are absent, but no output schema exists to lean on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load. It does convey the reelCount cap ('up to 50 reels') and the optional date filter ('optionally after a date'), but it adds no format, pattern, or username-syntax detail for channelUsername or onlyPostsNewerThan. It partially compensates but leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Transcribe ... reels from an Instagram channel') with a hard scope limit of 50. It is clearly distinguishable from get/list/search siblings by resource, though it does not explicitly contrast with the closely related transcribe_bulk or transcribe_video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives useful eligibility conditions ('Paid plans only', 'Requires an API key or additional batch transcription consent') and the optional date scoping. However, it never states when to choose this over transcribe_bulk or transcribe_video, so the routing decision between siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_videoADestructiveIdempotentInspect
Submit a video URL for transcription and wait for the result. Supports Instagram Reels/Posts, TikTok videos, YouTube videos/Shorts, and Facebook videos/Reels. New jobs cost 1 credit. Existing matching transcripts may be reused without another charge. There is no storage quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Video URL (Instagram, TikTok, YouTube, or Facebook) | |
| includeComments | No | Also extract top comments for Instagram, TikTok and YouTube, with pinned/creator comments first where available; not the full thread. Defaults to false. Facebook is unsupported. Total cost remains 1 credit; existing transcripts are reused without new comment extraction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare openWorldHint, idempotentHint and destructiveHint, but the description adds genuinely new operational context: 1 credit per new job, free reuse of matching existing transcripts, and no storage quota. It does not explain what the destructiveHint implies (e.g. credit consumption or job side effects), leaving that annotation unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences that each carry information: purpose first, then supported platforms, then the two cost rules. Slightly compressed and no wasted clauses, though the cost/reuse lines sit after the platform list rather than being grouped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that creates jobs, consumes credits and has no output schema, the description covers cost and reuse well but never says what is returned, how long the blocking wait may take, or how to fetch a transcript later. Those gaps are meaningful given the absence of an output schema, though existing transcripts being reused is well communicated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (url and includeComments) are already fully documented in the schema. The description adds no extra parameter semantics, which is the expected baseline of 3 when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Submit a video URL for transcription and wait for the result') and enumerates the supported platforms (Instagram, TikTok, YouTube, Facebook), which concisely delimits scope. It does not name any sibling, so the split from get_transcription or transcribe_bulk must be inferred from the submit-vs-retrieve wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer it should call this to obtain a transcript for a single video URL. There is no explicit when-to-use / when-not-to-use guidance and no pointer to alternatives like get_transcription for retrieval or transcribe_bulk for multiple URLs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_urlARead-onlyIdempotentInspect
Check if a URL is a supported video platform (Instagram, TikTok, YouTube, Facebook) without submitting for transcription. Returns the detected platform and normalized URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior, so the safety profile is covered. The description adds value beyond that by stating it has no transcription side effect and by disclosing the return shape (detected platform + normalized URL), which annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the validation purpose followed by the return values. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must summarize the response, and it does so explicitly (detected platform and normalized URL). Combined with the annotation-provided safety profile, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema fully documents 'url'. The description adds nothing about format or accepted URL variants, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check/validate) applied to a specific resource (URL) and enumerates the supported platforms. It also distinguishes itself from the sibling transcribe_video by clarifying it does not submit for transcription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without submitting for transcription' clearly frames when to use this tool (pre-flight support check) rather than triggering a job. No explicit named alternative or when-not condition is given, but the context for use is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v2.2.1- First observed
get_credits - First observed
get_transcription - First observed
list_jobs - First observed
list_transcriptions - First observed
search_transcriptions - First observed
transcribe_bulk - First observed
transcribe_instagram_channel - First observed
transcribe_video - First observed
validate_url
TDQS
Scored across 9 tools
Each tool has a distinct action/resource: single vs bulk vs channel transcription are clearly scoped by their descriptions, and get/list/search are separable by purpose. Minor potential confusion between list_transcriptions and search_transcriptions, but descriptions make the boundary clear.
All tools follow a consistent snake_case verb_noun pattern (transcribe_video, get_transcription, list_transcriptions, search_transcriptions, validate_url, list_jobs, get_credits). transcribe_instagram_channel extends the pattern predictably.
Nine tools is well-scoped for a transcription service covering single, bulk, and channel workflows plus retrieval, validation, job listing, and billing. No tool appears redundant.
Core lifecycle is covered: submit (single/bulk/channel), retrieve (get/list/search), validate URLs, track jobs, and check credits. Minor gap: no delete/cleanup or export operation for stored transcriptions, though time-based retention may make deletion unnecessary.
Maintenance
Related MCP Connectors
Transcribe public videos & audio (YouTube, TikTok, IG) into accurate, timestamped text via API.
Transcribe, read and download public Reels, TikToks and YouTube videos, plus sourced creator data
Transcribe Instagram Reels, Facebook and X videos, podcasts (RSS, Apple) and any video URL to text.
Production transcript API for YouTube, TikTok and Instagram, with AI transcription fallback.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to download TikTok videos without watermarks, analyze creator metrics and audience insights, track trending content and hashtags, and search videos, users, and sounds through RapidAPI integration.-
- AlicenseAqualityDmaintenanceEnables AI assistants to fetch YouTube video transcripts with precise timestamps, multi-language support, and time-range filtering.31MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Submagic's video editing API for creating viral short-form content with AI captions in 107 languages.21 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to extract YouTube transcripts and repurpose them into social media posts via LLM.MIT