Dokitscript runs a remote Model Context Protocol server. Connect it once and your assistant can transcribe a video, pull the text back, and search everything you have transcribed before, without you leaving the conversation.
MCP is the open protocol AI clients use to talk to outside tools. Our server lives at https://dokitscript.com/mcp. Once your client knows about it, you can write "transcribe this TikTok and pull out the three claims worth checking" and the assistant does the whole chain itself: it calls the transcription tool, waits for the text, then works on it.
Submit a URL for transcription, fetch a transcript, list your history, search across it, and ask a question about any one transcript. Every tool is scoped to your own account and nothing else: the key identifies you, and a transcript that belongs to another account is simply not found.
Programmatic access opens with an API key, and you can create one two ways: on a paid plan (Starter, Pro or Business), or with a balance of API tokens bought as a one-off, with no subscription at all.
| What you do | What it costs |
|---|---|
Reading toolsget_transcript, list_transcripts, search_transcripts |
Nothing beyond the daily request limit. A valid key is all it takes. |
Transcribingtranscribe_url |
Billed to your API tokens: 1 token per started 15 minutes, so a 40-minute video costs 3. On Business, programmatic use is included in the subscription as fair use, with no tokens deducted. |
Asking a questionask_question |
Counts against your monthly AI allowance and needs a Pro or Business plan, exactly like in the web app. |
Pick your client below, paste the block into the file it reads, replace dks_live_YOUR_KEY with your own key, and restart the app. The server address is always the same: https://dokitscript.com/mcp.
The quickest route is the command line, run from the folder you work in:
claude mcp add --transport http dokitscript https://dokitscript.com/mcp \ --header "Authorization: Bearer dks_live_YOUR_KEY"
Create .mcp.json at the root of your project, so the whole team shares the same server definition:
{
"mcpServers": {
"dokitscript": {
"type": "http",
"url": "https://dokitscript.com/mcp",
"headers": {
"Authorization": "Bearer dks_live_YOUR_KEY"
}
}
}
}Check it with /mcp inside a session: the server should be listed as connected, with its five tools.
Create .cursor/mcp.json in your project for a single project, or ~/.cursor/mcp.json to make the server available everywhere.
{
"mcpServers": {
"dokitscript": {
"url": "https://dokitscript.com/mcp",
"headers": {
"Authorization": "Bearer dks_live_YOUR_KEY"
}
}
}
}Open Settings, then MCP to confirm the server shows up. If the toggle is off, switch it on there.
VS Code uses servers rather than mcpServers, and it can prompt you for the key instead of storing it in the file, which is what you want in a repository that gets committed.
{
"inputs": [
{
"type": "promptString",
"id": "dokitscript-key",
"description": "Dokitscript API key",
"password": true
}
],
"servers": {
"dokitscript": {
"type": "http",
"url": "https://dokitscript.com/mcp",
"headers": {
"Authorization": "Bearer ${input:dokitscript-key}"
}
}
}
}VS Code asks for the key the first time the server starts and remembers it after that. The tools then appear in agent mode, under the tools picker.
Claude Desktop has two doors, and neither takes a Bearer key on its own. Its Connectors panel does accept the address of a remote server, but it signs in over OAuth and offers no field for a fixed key. The configuration file, claude_desktop_config.json, starts local commands rather than calling a URL. So the route that works today is a small relay running on your machine: Claude Desktop launches it as a command, and it forwards every exchange to https://dokitscript.com/mcp over HTTPS, carrying your key in the header.
mcp-remote is an open-source package under the MIT licence, published on npm by its own maintainers; npx fetches it the first time and keeps it in cache. Its authors present it as a temporary bridge for clients that cannot yet reach an authenticated remote server by themselves, so the day Claude Desktop can, you delete the block and point it at our address. The three other clients on this page install nothing.
Node.js 18 or later, which is what brings npx along. Check in a terminal:
node -vOn Windows, npm also has to be installed globally, otherwise npx refuses to start. One command settles it: npm install -g npm.
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json, on the community builds; the official app covers macOS and Windows. |
Quickest way there: Settings, then Developer, then Edit Config. That opens the file, and creates it if it does not exist yet.
{
"mcpServers": {
"dokitscript": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://dokitscript.com/mcp",
"--transport",
"http-only",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer dks_live_YOUR_KEY"
}
}
}
}If the file already holds an mcpServers object, add "dokitscript" inside it instead of replacing the whole file.
The key travels through env. On Windows, Claude Desktop passes args to npx without protecting the spaces. Written inline, "Authorization: Bearer dks_live_…" is cut at the space: the relay then reads an empty header, the rest of the key is left dangling as a stray argument, and the server answers 401 while the key itself is perfectly valid. Keeping the space inside the variable puts it out of reach of whatever does the splitting. The argument names the header before the colon, and the variable carries Bearer, a space, then your key.
--transport http-only removes a guess. Our server answers POST and returns 405 to anything else, on purpose. Left to choose the transport by itself, the relay treats a 405 as its cue to fall back to a server-sent-event mode that we deliberately do not implement, a dead end that has nothing to do with your key. Naming the transport takes that branch off the table.
Cmd + Q on macOS, quit from the system tray on Windows. The configuration is only read at startup.dokitscript should be sitting there with its five tools.list_transcripts on its own, without you naming the tool.The relay stands between you and us, so the client reports a server that will not start and never shows our HTTP status. Two commands tell you which half is at fault. This one talks to us with no relay involved, and a good key answers with the five tool definitions:
curl -X POST https://dokitscript.com/mcp \ -H "Authorization: Bearer dks_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
And this one runs the relay by hand, where its real error is printed instead of swallowed. Spaces are harmless here, because a terminal is not what was splitting them:
npx -y mcp-remote https://dokitscript.com/mcp \ --transport http-only --debug \ --header "Authorization: Bearer dks_live_YOUR_KEY"
| What you see | What to do |
|---|---|
| Nothing in the list, and no error anywhere | Either the file is not valid JSON, in which case the app ignores it in silence, or it was never fully quit. Run the file through a JSON validator, then quit and reopen. |
npx not found, or ENOENT |
Node is missing, or missing from the PATH the app inherits. Install Node 18+, add npm install -g npm on Windows, then log out and back in so the app picks up the new PATH. |
Connects, then 401 on the first call |
The key is wrong, truncated or revoked. The curl above settles it in a second: if curl works and the relay does not, the key was cut in transit, so check that AUTH_HEADER reads Bearer then a space then the key. |
429 API_DAILY_CAP_EXCEEDED |
The key hit its daily ceiling. Every call counts, tool listings included, and an assistant caught in a loop gets there fast. Retry-After gives the wait in seconds and the count resets at midnight, Europe/Paris time. |
503 Public API is unavailable |
Programmatic access is switched off on our side. Nothing to change locally. The status page says when it is back. |
| An old key keeps coming back | The relay caches connection data in ~/.mcp-auth. Delete that folder, then restart the client. |
The relay writes its own errors to the client log: ~/Library/Logs/Claude/mcp-server-dokitscript.log on macOS, %APPDATA%\Claude\logs\mcp-server-dokitscript.log on Windows. For the codes the server itself returns, see the table further down.
Any client that speaks MCP over HTTP and lets you set a header will work. The server takes POST requests carrying JSON-RPC 2.0 and answers as application/json. There are no sessions and no server-initiated stream, so GET and DELETE return 405 by design. To check your key by hand:
curl -X POST https://dokitscript.com/mcp \ -H "Authorization: Bearer dks_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
A working key returns the five tool definitions. Calling one looks like this:
curl -X POST https://dokitscript.com/mcp \ -H "Authorization: Bearer dks_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call", "params":{"name":"list_transcripts","arguments":{"limit":5}}}'
Your assistant picks these itself, from the descriptions below. You never have to name a tool: asking in plain language is enough.
| Tool | What it does | Arguments |
|---|---|---|
transcribe_url |
Submits a video or audio URL from TikTok, Instagram, YouTube, Facebook, X or LinkedIn. Returns an id straight away and runs the transcription in the background. | url (required) · language, a hint or auto · format: timestamps, plain, srt or vtt |
get_transcript |
Fetches a transcript by id, either the one transcribe_url just returned or one from your history. While a transcription is still running it reports progress instead of text. |
transcriptId (required) · format |
list_transcripts |
Lists the transcriptions on your account, newest first, with a short text preview for each. | page, from 1 · limit, up to 50 · platform filter |
search_transcripts |
Full-text search across everything you have transcribed. Useful for "what did I say about pricing in that interview". | query (required, up to 200 characters) · page · limit |
ask_question |
Asks a free-form question about one transcript and comes back with a researched answer and its sources. | transcriptId (required) · question (required, up to 500 characters) |
transcribe_url hands back an id immediately; the assistant then calls get_transcript with that same id until the text is ready. One id follows the whole job, so there is nothing for you to track by hand.
An AI agent that gets stuck in a loop is a normal failure mode, not necessarily an attack, so the server caps the number of requests a single key can make in a day.
| Limit | Value |
|---|---|
| Requests per key | 1,000 per day by default, counting every call including tool listings. Resets at midnight, Europe/Paris time. |
| Active keys | Up to 10 per account, revocable at any time. |
| Video length | 45 minutes per item when billed in API tokens, up to 5 hours on Business. |
| Search query | Up to 200 characters. |
| Question length | Up to 500 characters. |
| What you see | What it means |
|---|---|
| No tools at all in the client | The client did not reload the file. Quit it completely and reopen it. Then check the URL is https://dokitscript.com/mcp, with no trailing path. |
401 Missing or invalid API key |
The header must read exactly Authorization: Bearer dks_live_…. A single missing space, a truncated paste or a revoked key all land here. |
403 requires a paid plan or API tokens |
The account behind the key has neither a paid plan nor a token balance. Buy a pack or upgrade from your account. A suspended account also returns 403. |
402 API_CREDITS_INSUFFICIENT |
Not enough API tokens for a video of that length. Remember it is one token per started 15 minutes, so a long file costs several at once. |
429 API_DAILY_CAP_EXCEEDED |
The key hit its daily request limit. The Retry-After header gives the wait in seconds; the counter resets at midnight, Europe/Paris time. |
503 Public API is unavailable |
Programmatic access is temporarily switched off. Nothing to change on your side. Check the status page. |
405 on a GET request |
Expected, not a fault. The server only answers POST and never opens a stream of its own. |
| "Transcript not found" | The id is wrong, or it belongs to another account. Keys only ever see their own account's transcriptions. |
| "Still processing" | Normal on a long video. The assistant should call get_transcript again with the same id shortly after. |
Do I need a separate key for MCP?
No. The MCP server and the REST API share the same keys, the same access rules and the same balance. One key covers both.
Does Claude Desktop need something installed?
Yes, and it is the only one of the four that does. Claude Desktop cannot yet send a fixed key to a remote server, so it goes through mcp-remote, an open-source relay published on npm by third-party maintainers and fetched by npx on first run. It needs Node.js 18 or later. Claude Code, Cursor and VS Code call our address directly and install nothing.
Can my assistant see transcripts from other accounts?
No. Every tool filters on the account that owns the key, and an id from elsewhere simply comes back as not found.
Does connecting the server cost anything by itself?
No. Listing the tools and reading your own history are free. Only transcribing and asking questions consume anything.
Can I use it on several machines?
Yes. Create one key per machine, up to ten, and revoke a single one if a laptop is lost without disturbing the others.
Which languages does it handle?
The same 90+ languages as the web app. Leave language on auto and it is detected for you.
Create a key, paste one block, restart your client. Your assistant gets a transcription tool it can use on its own.