transcribe-mcp
This MCP server lets an agent transcribe audio/video, find dead air to cut, fetch web pages as markdown, and inspect pay-per-call pricing using USDC on Base.
transcribe_url: transcribe a public audio/video URL (README also supports local audio files) into text, timings, and detected language for $0.05; 800 KB limit.find_dead_air: analyze segments or WebVTT subtitles to find silence spans and estimated savings for $0.002; chains with transcription output.shop_info: free tool returning prices, limits, chain, and payment details.README also describes
fetch_page: convert web pages to clean markdown, with optional JavaScript rendering, for $0.005.Supports
save_tofor large JSON results and a dead-air-cutter skill for end-to-end video cutting.Uses x402 pay-per-call payments from a wallet private key, with local validation and a $0.10 spend ceiling; one paid call at a time per wallet.
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., "@transcribe-mcptranscribe this TED talk URL and find dead air to cut"
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.
transcribe-mcp
Read web pages as clean markdown, transcribe audio and video, and find the silence worth cutting — from any MCP client. No account, no API key, no subscription. Your agent pays a fraction of a cent per call, in USDC, straight from a wallet you control.
{
"mcpServers": {
"transcribe": {
"command": "npx",
"args": ["-y", "transcribe-mcp@latest"],
"env": { "TRANSCRIBE_MCP_WALLET_KEY": "0x..." }
}
}
}On Windows, MCP clients can't start npx directly, so wrap it:
"command": "cmd", "args": ["/c", "npx", "-y", "transcribe-mcp@latest"].
That is the whole setup. There is nothing to sign up for. It needs Node 20+. The video skill also needs ffmpeg.
One paid call at a time per wallet. The shop refuses a second paid request while one is still running (free, with "already in flight"). Call it sequentially, never in parallel.
Tools
tool | what it does | price |
| a public audio/video | $0.05 |
| subtitles or timings (inline, or | $0.002 |
| a web page → clean markdown, links resolved. | $0.005 |
| prices, limits and how payment works | free |
find_dead_air eats exactly what transcribe_url returns, so the two chain:
transcribe a talk, then cut the silence out of it.
"cuts": [{ "from": 2.55, "to": 10.85, "seconds": 8.3, "reason": "silence" }],
"stats": { "sourceSeconds": 20, "speechSeconds": 5.05, "wouldSavePercent": 74.75 }transcribe_url and find_dead_air take save_to: an absolute path to a new .json file. The full result
goes there and the reply is one line plus the receipt, so an hour of transcripts never floods
your agent's context. It never overwrites a file, and a missing folder is refused before paying.
Cutting a whole video
For cutting a whole video end to end — split, transcribe, cut, synced subtitles — there is a
ready agent skill in skills/dead-air-cutter.
Related MCP server: framefetch
What leaves your machine
transcribe_url: theurl, or the bytes of thefile(audio only —.mp3 .wav .m4a .aac .ogg .opus .oga .flac; a video is refused, extract its audio with ffmpeg first).find_dead_air: the timings and text — fromfrom_file, onlystart,end,textof each segment plusdurationSecondsare sent, whatever else the file holds. If the file has avttfield instead, that subtitle text is sent whole.fetch_page: the page URL.
This server talks only to https://transcribe.soboljem.cz. What the shop does with it, from its
terms:
Audio is never stored. It is transcribed by Cloudflare Workers AI and passes through Cloudflare's infrastructure.
The result is kept briefly, up to about 8 hours. It is replayable for 15 minutes, then deleted by a sweep that runs four times a day. The replay is a shop-side safeguard that this client cannot use: every call signs a new payment. After a timeout or a "may have been charged" reply, check the wallet. Calling again pays again.
A row per sale is kept with no automatic deletion: time, price, audio length, word and cut counts, the source hostname (never the full URL), and the paying wallet address and transaction hash, which are public on Base anyway. Ask via the terms page to have rows deleted.
Payment settles through the PayAI facilitator on Base. On each sale, the shop owner gets a Telegram notification with the shortened payer address and source hostname.
The private key in TRANSCRIBE_MCP_WALLET_KEY never leaves the machine. It only signs.
Why pay-per-call instead of an API key
Because an agent cannot fill in a signup form. x402 is an HTTP-native
payment: the server answers 402 Payment Required with a price, the client pays it, the
request goes through. No dashboard, no key rotation, no minimum, no monthly bill. If you
never call it, you never pay anything.
Settlement is USDC on Base (eip155:8453).
Running it without a wallet
It starts fine. shop_info answers, tools/list works, and the paid tools tell you what
to set. Look before you fund anything.
What it will not do
It will not overspend. Every call is filtered through a $0.10 ceiling; a quote above it is dropped and the client refuses to pay rather than guessing.
It will not charge you for a refusal. Bad arguments are caught locally and never leave your machine. The shop is built not to settle error responses; that was verified on testnet (see its terms).
It will not tell you "no charge" when it cannot know. If the connection drops mid-call, it says a payment may have gone out and to check the wallet before calling again.
It will not lie about a sale. If the settlement header is missing, it says so instead of reporting a payment it cannot prove.
Files are capped at 800 KB. Oversized ones are refused for free, before payment.
A local file is sent to the shop as bytes, so nothing has to be hosted first. For anything
long, extract the audio small and split it — mono Opus at 16 kbps fits ~6 minutes per call:
ffmpeg -i talk.mp4 -vn -ac 1 -c:a libopus -b:a 16k -f segment -segment_time 360 part%03d.opusConfiguration
variable | meaning |
| private key of a wallet holding a little USDC on Base. Required only for the paid tools. |
Use a dedicated wallet with a few dollars in it, not your main one. This is true of every tool you hand a private key to, and it is true here.
Tests
npm testMIT.
Available Tools
3 toolsfind_dead_airFind the silence worth cuttingA
Given subtitles or timings, return the spans of dead air and how much of the runtime cutting them would save. Costs $0.002 per call — a tenth of transcription, because the expensive half is not redone. Feed it the segments transcribe_url returns.
| Name | Required | Description | Default |
|---|---|---|---|
| vtt | No | WebVTT subtitles. Use this or segments, not both. | |
| segments | No | Timings as [{start, end, text}] in seconds — exactly what transcribe_url returns. | |
| durationSeconds | No | Total runtime in seconds. Improves the saving estimate; optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the per-call cost, that 'the expensive half is not redone' (implying caching or reuse), and that it returns spans and savings estimates. This is transparent for a read‑only analysis tool, though limits like max input size or error handling are not mentioned.
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?
The description delivers core purpose in the first sentence, then adds essential usage and cost info in a second sentence. No redundant words; every sentence earns its place. It is front‑loaded and efficient.
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?
The tool has 3 optional parameters and no output schema. The description explains the input options (VTT or segments), the pipeline from transcribe_url, and the nature of the output (spans and saving estimate). It lacks a precise specification of the return format, but the description is sufficient for an agent to invoke the tool 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?
Schema description coverage is 100%, so baseline is 3. The description adds context about using segments from transcribe_url and the cost, but does not significantly expand on what the parameters mean beyond the schema. The value comes from pipeline guidance rather than parameter detail.
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 clearly states the tool returns 'the spans of dead air and how much of the runtime cutting them would save,' which is a specific verb+resource. It distinguishes itself from the sibling 'transcribe_url' by focusing on silence detection rather than 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 description explicitly tells the agent to 'feed it the segments transcribe_url returns,' establishing a clear pipeline. It also highlights the cost advantage ($0.002 vs. transcription cost). However, it does not explicitly state when not to use this tool (e.g., if no subtitles or timings are available).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_infoWhat this costs before you spend anythingA
Free. Returns the prices, the size limit, the chain and how payment works, so an agent can decide whether to call the paid tools at all.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool is free, which is a key behavioral trait. However, with no annotations, it doesn't disclose auth requirements, side effects, or whether results are cached or dynamic. This partial transparency is adequate for a simple cost-checking tool.
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?
The description is a single sentence front-loaded with 'Free.' It wastes no words while conveying purpose, output, and usage context. Every word 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?
Given zero parameters and no output schema, the description sufficiently covers what the tool returns and when to use it. It lacks details about response format or authentication, but the low complexity makes it complete enough for a simple info 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?
With zero parameters, the input schema requires no explanation. The description adds value by specifying what the tool returns, which is not parameter semantics but does inform the agent's decision to call it.
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 clearly states the tool returns specific information (prices, size limit, chain, payment) and positions it as a free decision support tool before using paid tools. This distinguishes it from siblings transcribe_url and find_dead_air, which have different purposes.
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 explicitly tells the agent to use this tool before calling paid tools to decide if they are needed. While it doesn't list exclusions or alternative tools, the context of preventing unnecessary paid calls is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_urlTranscribe audio or video from a URLA
Turn a publicly reachable audio or video URL into text with per-segment timings and a detected language. Costs $0.05 per call, paid in USDC from your own wallet. The file must be under 800 KB; oversized files are refused for free before any payment.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public http(s) URL of the audio or video file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses cost, payment method, file size limit, and refusal policy for oversized files. It also describes output behavior (per-segment timings and language detection). Missing details on error handling for unreachable URLs but overall provides key behavioral context.
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 sentences, front-loaded with purpose, each sentence adding non-redundant information (purpose, cost, size limit). Concise without missing critical details.
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 single-parameter tool with no output schema and no annotations, the description covers purpose, cost, size limit, and output shape (timings, language). It is sufficient for an agent to decide to invoke, though more detail on output format would increase completeness.
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% with a basic param description. The tool description adds value beyond the schema: constraints (public reachable, <800KB), cost, and output details. This helps an agent understand the parameter's context and limits.
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 clearly states the tool transcribes audio/video from a URL into text with per-segment timings and detected language. The verb 'transcribe' and resource 'audio or video from a URL' are specific and distinct from unrelated sibling tools.
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 tells when to use: for public URLs needing transcription with timings and language detection. It provides important constraints (file <800KB, cost $0.05, USDC payment). However, it does not explicitly state when to avoid the tool or suggest alternatives, though siblings are unrelated.
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.
3 tool updates
v0.1.2- First observed
find_dead_air - First observed
shop_info - First observed
transcribe_url
TDQS
Scored across 3 tools
Each tool serves a completely distinct role: transcribe_url handles audio-to-text, find_dead_air post-processes timings to find silence, and shop_info provides pricing metadata. There is zero overlap in purpose.
Tool names follow a clear verb_noun pattern (transcribe_url, find_dead_air, shop_info) with snake_case. shop_info deviates slightly from the domain-action style of the others, but it is still predictable and readable.
Three tools is perfectly scoped for this server: a core action (transcribe), a derived analysis (find_dead_air), and informational helper (shop_info). No tool feels extraneous, and the count matches the narrow purpose well.
The tool surface covers the key transcription workflow and provides a helpful cost info tool. An obvious gap is the lack of an update or delete operation for transcripts, but for a consumption-oriented service this is reasonable. The surface feels complete for its intended use.
Maintenance
Related MCP Connectors
Pay-per-minute speech-to-text: audio URL to text, SRT or VTT. Paid via x402 or credits.
Transcribe public audio/video URLs and retrieve transcripts, SRT, and VTT subtitles.
URL-to-Markdown ($0.002) and summarization ($0.003), paid per call in USDC on Solana via x402.
Transcribe any audio or video URL to text, SRT and VTT, with chunking and only-new episodes
Related MCP Servers
AlicenseAqualityDmaintenanceEnables AI assistants to transcribe audio files using dTelecom's real-time speech-to-text with pay-per-use USDC micropayments, no API keys required.315 npm1MIT- AlicenseNot gradedqualityDmaintenanceAgent-first video-data API + MCP across 6 platforms (YouTube/Shorts, TikTok, Reddit, Instagram, Pinterest): metadata, insights, Whisper transcript, and parametric frames. Pay-per-call via x402 (USDC) or Stripe.6 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to transcribe audio and video from URLs or local files with high accuracy, speaker diarization, 119 languages, and word-level timestamps, while also supporting transcription management and caption export in SRT, WebVTT, or plain text.1466 npm9MIT
- AlicenseNot gradedqualityDmaintenanceEnables extracting clean, structured markdown from any URL—stripping nav, ads, and scripts—for RAG pipelines and AI research agents, with pay-per-call micropayments via x402.MIT