Sign inSign up

artsamsonov/transcriptor-mcp

By artsamsonov

•Updated 4 minutes ago

Now your AI assistant can watch videos

Image
Machine learning & AI
Web analytics
0

10K+

artsamsonov/transcriptor-mcp repository overview

transcriptor-mcp logo

⁠Transcriptor MCP

Now your AI assistant can watch videos.

Connect one server. Then ask Claude, ChatGPT, or Cursor about any video: the transcript, the chapters, the metadata, or a single frame. It works with 11 platforms, not only YouTube.

Website: https://transcriptor-mcp.org⁠ Source and full documentation: https://github.com/samson-art/transcriptor-mcp⁠ In the MCP Registry as io.github.samson-art/transcriptor-mcp.


⁠⚡ Start with the hosted server

You do not need this image to use the tools. A hosted server is ready:

https://transcriptor.gateway.mcpal.io/mcp

Your client opens a browser and you sign in there. There is no API key to copy.

One click: Add to Cursor⁠ · Add to VS Code⁠ · Add to LM Studio⁠

Claude Code:

claude mcp add --transport http transcriptor https://transcriptor.gateway.mcpal.io/mcp

Then run /mcp and approve the sign-in in the browser.

Claude (web and desktop): open Settings → Customize → Connectors. Select Add → Add custom connector, paste the URL, then select Add.

ChatGPT and Codex: install Transcriptor from the ChatGPT plugin directory⁠ — select Install plugin, sign in when asked, then mention @Transcriptor in a chat. Codex shares the directory: Sources → Use plugins → Transcriptor, or /plugins in the CLI.

Windsurf, Cline, Zed, Gemini CLI: each client wants a different config shape. The website⁠ has a ready snippet for every one of them.

Any other MCP client:

{
  "mcpServers": {
    "transcriptor": {
      "url": "https://transcriptor.gateway.mcpal.io/mcp"
    }
  }
}

The hosted server is governed by the Terms of Service⁠ and the Privacy Policy⁠. A server you run from this image is governed by the MIT Licence alone.


⁠🐳 Use this image to run your own server

The tools are the same as on the hosted server. You need no account.

The image serves Streamable HTTP on port 4200:

docker run --rm -p 4200:4200 artsamsonov/transcriptor-mcp:latest

Then point your client at http://<host>:4200/mcp.

For stdio, give the image an explicit command:

docker run --rm -i artsamsonov/transcriptor-mcp:latest npm run start:mcp
{
  "mcpServers": {
    "transcriptor": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "artsamsonov/transcriptor-mcp:latest", "npm", "run", "start:mcp"]
    }
  }
}

With docker compose:

services:
  transcriptor-mcp:
    image: artsamsonov/transcriptor-mcp:latest
    ports:
      - "4200:4200"

The repository file docker-compose.example.yml shows a full stack with a Whisper service and COOKIES_FILE_PATH.

Transport. The server accepts POST /mcp only. GET and DELETE return 405. The server is stateless and sends no Mcp-Session-Id. The same port serves GET /health and GET /metrics in Prometheus format.

Authentication. The Node process does not check bearer tokens. Put a reverse proxy or a gateway in front of it for authentication and TLS. The hosted server works this way.


⁠🧰 Tools

All eight tools are read-only.

ToolResult
get_transcriptClean plain text, in parts
get_raw_subtitlesRaw SRT or VTT, in parts
get_available_subtitlesOfficial and auto-generated language codes
get_video_infoExtended metadata from yt-dlp
get_video_chaptersChapter markers with start time, end time, and title
get_video_frameOne frame at a timestamp (needs ffmpeg, included)
get_playlist_transcriptsTranscripts for several videos of a playlist
search_videosYouTube search through ytsearch

Four tools also have an interactive interface: get_transcript, get_video_info, get_video_frame, and search_videos. Clients that support MCP Apps or the ChatGPT Apps SDK show this interface in the chat; other clients get the same data as text and JSON.

The search_videos widget: a carousel of result cards

The get_transcript widget: a video card above searchable timed captions


⁠🌍 Platforms

YouTube · Twitter/X · Instagram · TikTok · Twitch · Vimeo · Facebook · Bilibili · VK · Dailymotion · Reddit

The tool search_videos works with YouTube only. The server returns text, metadata and single still frames. It never returns video or audio files.


⁠🗣️ Whisper fallback

When a video has no subtitles, the server can transcribe the audio. Set WHISPER_MODE:

  • local — a self-hosted Whisper service, for example whisper-asr-webservice⁠. Set WHISPER_BASE_URL.
  • api — the OpenAI Whisper API, or a compatible one. Set WHISPER_API_KEY, and WHISPER_API_BASE_URL if the host is different.
  • off — the default. No transcription.

The tools get_transcript and get_raw_subtitles report the origin in structuredContent as source: "youtube" or source: "whisper".


⁠⚙️ Environment variables

The image starts with no environment variables. Each variable below is optional; .env.example in the repository lists the rest.

VariableDefaultFunction
MCP_PORT4200The HTTP port
MCP_HOST0.0.0.0The bind address
COOKIES_FILE_PATH—A Netscape cookies.txt file for videos that need an account
YT_DLP_TIMEOUT60000The timeout of yt-dlp, in ms
YT_DLP_MAX_CONCURRENCY4How many yt-dlp/ffmpeg processes may run at once. YT_DLP_MAX_QUEUE (8) is how many calls may wait; beyond that a call is refused with "server busy". A call peaks at ~40 MiB, so the cap bounds platform throttling and latency, not memory
CANARY_INTERVAL_MS900000How often the HTTP server fetches one transcript to prove the path still works. 0 turns it off; CANARY_URL picks the video
YT_DLP_FRAME_TIMEOUTYT_DLP_TIMEOUTThe timeout of get_video_frame, in ms
YT_DLP_JS_RUNTIMES—The value of yt-dlp --js-runtimes; unset leaves the yt-dlp default
YT_DLP_REMOTE_COMPONENTSejs:githubThe value of yt-dlp --remote-components
YT_DLP_PROXY—A proxy for yt-dlp
WHISPER_MODEoffoff, local, or api
WHISPER_BASE_URL—The Whisper service for local mode
WHISPER_API_KEY—The API key for api mode
WHISPER_API_BASE_URLhttps://api.openai.com/v1The base URL for api mode
WHISPER_TIMEOUT600000The Whisper timeout, in ms (10 minutes)
CACHE_MODEoffoff or redis
CACHE_REDIS_URL—The Redis URL for redis mode
CACHE_TTL_SUBTITLES_SECONDS604800The lifetime of cached subtitles (7 days)
CACHE_TTL_METADATA_SECONDS3600The lifetime of cached metadata (1 hour)
SHUTDOWN_TIMEOUT10000The shutdown timeout, in ms
LOG_LEVELinfoThe log level
SENTRY_DSN—Error reporting, off by default

If a video needs an account, mount your cookies file:

docker run --rm -p 4200:4200 \
  -e COOKIES_FILE_PATH=/cookies/cookies.txt \
  -v "/path/to/cookies.txt:/cookies/cookies.txt:ro" \
  artsamsonov/transcriptor-mcp:latest

artsamsonov/transcriptor-mcp-api gives the same extraction as a REST API, with a Swagger interface at /docs.

⁠License

MIT

Tag summary

Content type

Image

Digest

sha256:e843b9b02…

Size

509 MB

Last updated

4 minutes ago

docker pull artsamsonov/transcriptor-mcp