Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TRANSCRIPTOR_MODELNoModel to use (per engine). `mlx-community/whisper-large-v3-mlx-8bit` under MLX, `Systran/faster-whisper-large-v3` under faster-whisper. Neither engine can read the other's weights.mlx-community/whisper-large-v3-mlx-8bit
TRANSCRIPTOR_DEVICENofaster-whisper only. `auto` | `cuda` | `cpu`.auto
TRANSCRIPTOR_ENGINENoInference engine: `auto` | `mlx` | `faster-whisper` | `fake`. Auto picks MLX on Apple Silicon, faster-whisper elsewhere.auto
TRANSCRIPTOR_CHUNK_SNoChunk length; overlap is stitched away.120
TRANSCRIPTOR_DATA_DIRNoModel weights and scratch audio only.<repo>/.transcriptor
TRANSCRIPTOR_REAPER_SNoJob reaper interval in seconds.60
TRANSCRIPTOR_DB_SCHEMANoSet to share an existing database instead of a dedicated one.public
TRANSCRIPTOR_OVERLAP_SNoOverlap between transcription chunks in seconds.15
TRANSCRIPTOR_PUNCTUATENoRestore sentence boundaries after transcription.True
TRANSCRIPTOR_MEM_POLL_SNoMemory pressure polling interval in seconds.5
TRANSCRIPTOR_DB_POOL_MAXNoMaximum database connection pool size.4
TRANSCRIPTOR_DB_POOL_MINNoMinimum database connection pool size.1
TRANSCRIPTOR_HEARTBEAT_SNoJob heartbeat interval in seconds.10
TRANSCRIPTOR_STALE_JOB_SNoHeartbeat age after which the reaper calls a job interrupted.90
TRANSCRIPTOR_VIEWER_HOSTNoLoopback. Change only if you understand what you are exposing.127.0.0.1
TRANSCRIPTOR_VIEWER_PORTNoChange if something else already has the port.8766
TRANSCRIPTOR_COMPUTE_TYPENofaster-whisper only. `float16` on CUDA, `int8` on CPU. Also `int8_float16`, `float32`.float16
TRANSCRIPTOR_COOKIES_FILENoPath to a cookies file, for login-walled sources.
TRANSCRIPTOR_DATABASE_URLNoDatabase URL. Marked required in the configuration table (percent-encode `@ : / #` in the password); note that the README elsewhere states the SQLite database file is created on first run by `transcriptor-mcp migrate` and that no connection string is needed.
TRANSCRIPTOR_IDLE_EVICT_SNoUnload the model after idle. Tightens under pressure.600
TRANSCRIPTOR_KEEP_SCRATCHNoKeep in-flight audio after a job, for debugging.False
TRANSCRIPTOR_MAX_CONCURRENTNoMaximum concurrent transcriptions. Do not raise on 16 GB — two jobs means swapping.1
TRANSCRIPTOR_MAX_DURATION_SNoRefuse sources longer than this (4 hours).14400
TRANSCRIPTOR_VIEWER_ENABLEDNoServe finished transcripts as download links.true
TRANSCRIPTOR_MAX_DOWNLOAD_MBNoMaximum download size in MB.2048
TRANSCRIPTOR_MEM_PAUSE_MAX_SNoHow long to wait under critical pressure before aborting.60
TRANSCRIPTOR_MEM_SELF_CAP_GBNoMax occupancy for Transcriptor. Measured peak is 3.04 GB (Apple Silicon).4.0
TRANSCRIPTOR_CAPTIONS_DEFAULTNoCaption policy: `manual_only` | `never` | `prefer`.manual_only
TRANSCRIPTOR_PRUNE_INTERVAL_SNoScratch pruning interval in seconds.3600.0
TRANSCRIPTOR_SCRATCH_TTL_DAYSNoPrune abandoned scratch. Active jobs are never touched.30.0
TRANSCRIPTOR_PUNCTUATION_MODELNoPunctuation restoration model.kredor/punctuate-all
TRANSCRIPTOR_DB_CONNECT_RETRY_SNoStartup wait — the client may launch before Docker is up.120
TRANSCRIPTOR_SEGMENT_BUFFER_MAXNoSegments held in memory during a database outage.500
TRANSCRIPTOR_MEM_SYSTEM_FLOOR_GBNoFree memory left for everything else. Measured, not guessed.2.5
TRANSCRIPTOR_COOKIES_FROM_BROWSERNo`chrome`, `safari`, `firefox`, `brave` — for login-walled sources.
TRANSCRIPTOR_YTDLP_REMOTE_COMPONENTSNo`ejs:github` to solve YouTube's JS challenge — downloads and runs remote code, so opt-in.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tasks
{
  "list": {},
  "cancel": {},
  "requests": {
    "tools": {
      "call": {}
    },
    "prompts": {
      "get": {}
    },
    "resources": {
      "read": {}
    }
  }
}
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
transcript_createA

Start a transcription job and return its id immediately.

source is either an absolute local path (~ is expanded) or a URL — YouTube, Instagram, TikTok, X, Vimeo, Reddit and anything else yt-dlp supports, plus direct media URLs. Relative paths are refused, and a playlist or channel URL is refused as ambiguous: pass one video.

The call never waits for work. Poll transcript_status, and read partial output with transcript_get while it runs.

captions decides whether to use a platform's existing subtitles instead of transcribing: manual_only (default) takes human-written captions when present, which are usually better than Whisper; prefer also accepts auto-generated ones, which are usually worse; never always transcribes. The result reports origin so you know which you got.

language is an ISO code to force; omit it for automatic detection. force bypasses the cache and re-transcribes.

Sources longer than four hours are refused. Login-walled, private, members-only or age-restricted URLs fail with auth_required — set TRANSCRIPTOR_COOKIES_FROM_BROWSER (chrome, safari, firefox, brave) or TRANSCRIPTOR_COOKIES_FILE in the server's .env and retry.

transcript_probeA

Inspect a source without transcribing it, and without downloading it.

Says how long it is, whether captions already exist (which would make it near-instant), whether it needs cookies, and whether you have already transcribed it under these exact settings. Pass the same language and captions you would pass to transcript_create, so existing reports what would happen rather than what might.

transcript_statusA

Where a job stands: status, stage, progress, elapsed and ETA.

status is one of queued, running, paused, done, failed, cancelled, interrupted. resumable says whether retrying helps — do not parse the error message to decide.

Once the job has produced anything, the response also carries download_urls (txt, srt, vtt, json) and view_url — loopback links served by this process. Give them to the user when a job finishes: clicking one downloads the transcript, which is a better answer than pushing thousands of words through the chat.

Present a link as a markdown link inside a sentence, not inside a code block — fenced blocks are not clickable, so the user has to copy and paste. Prefer offering view_url alone: that page already links to all four formats, so one link beats five.

transcript_getA

Transcript text, rendered from segments on demand.

format is txt, srt, vtt or json. mode="preview" is the default deliberately: a long transcript returned whole floods the calling agent's context. Use mode="full" when the user has actually asked for the whole transcript — the default exists to stop unprompted flooding, not to refuse a direct request.

The response also carries download_urls and view_url, which are usually the better answer for a long transcript: the user gets a file they can keep, and your context stays free for the work. Offer them as markdown links in a sentence — a URL in a code block cannot be clicked.

Works on a running job — you get what is committed so far, with partial: true.

transcript_searchA

Find a phrase in a transcript, with timestamps.

The intended way into a long transcript, together with transcript_segments — pulling the whole thing would flood your context. Works on a running job: it searches what has been committed so far. Falls back to fuzzy matching when nothing matches whole words, which is what helps when you half-remember a phrase.

transcript_segmentsA

Pull a time window of the transcript.

Segments overlapping the window are returned, not only those contained by it, so a segment straddling the boundary still appears. include_words roughly triples the response size, so it is off by default.

transcript_listB

Recent jobs, newest first.

Filter by status (queued, running, paused, done, failed, cancelled, interrupted) for a board-level view of what is in flight, what is stuck and what is finished.

transcript_exportA

Write a transcript to a file at a path you choose.

The only thing Transcriptor writes to disk, and only on request. dest_path must be absolute. Nothing partial is left behind if the write fails.

The response also carries download_urls and view_url. If the user asked for a link rather than a path, give them those — they are served by this process and need no file at all. Write them as markdown links in a sentence; a URL fenced in a code block has to be copied by hand.

transcript_cancelB

Stop a job.

A queued job stops at once; a running one stops at the next chunk boundary, so allow up to about two minutes. Everything already transcribed survives and the job can be resumed later.

transcript_deleteA

Delete a transcript. Destructive and not reversible.

Removes the job and its segments, chunks, events and cached renders. delete_media=True also removes any scratch audio still on disk. Refuses while the job is running — cancel it first.

transcript_batchA

Queue every media file in a folder, one job each.

folder must be absolute. Not recursive — recursing would silently pull in a backup directory nobody meant to transcribe. Files already transcribed under these settings come back as reused rather than being queued again. Poll the returned job_ids with transcript_status, or watch the whole set with transcript_list.

transcript_find_clipsA

Find self-contained, high-density moments worth cutting into clips.

Scored on words per second, but only runs that begin at the start of a sentence and end at the end of one are considered — a moment that opens mid-clause is worthless however dense it is. Selected clips never overlap.

Returns, per clip: the ffmpeg command to cut it, the command to crop it to 9:16, and an SRT rebased to the clip's own clock for burning in. The commands are returned, not run — nothing is written to disk.

transcript_healthA

Engine state, real memory pressure, queue depth, degraded tasks.

engine and device say what is actually running here — mlx on Metal, or faster-whisper on cuda or cpu. Worth reading before promising a user how long something will take: the same model differs by an order of magnitude between them. On a machine with a discrete GPU the report also carries vram_*; on unified memory those keys are absent, because there the GPU spends the memory system_available_gb already accounts for.

Also reports whether the transcript download viewer is serving. If viewer.available is false, viewer.error says why — usually the port is already taken by another Transcriptor.

Memory numbers come from the monitor task's most recent sample rather than being measured inline, so this stays a database-and-memory read.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation4/5

Each tool targets a distinct action, and descriptions explicitly clarify relationships (e.g. transcript_list for board view vs transcript_status for one job). The reading tools (transcript_get, transcript_segments, transcript_search) overlap in that they all return transcript content, though their modes differ enough to separate them.

Naming Consistency5/5

Every tool uses the same transcript_ prefix followed by a clear snake_case verb/noun (list, create, cancel, delete, export, probe, search, segments, find_clips). No style mixing or vague names.

Tool Count5/5

13 tools is well-scoped for a transcription service, covering the full job lifecycle plus read, search, clip-finding and health operations. Each tool earns its place without redundancy.

Completeness4/5

Core coverage is strong: create, list, status, get, search, segments, export, cancel, delete, batch, probe and health are all present. Minor gap: 'paused' and 'resumable' appear as statuses but no explicit pause/resume tool exists to trigger those states.

Maintenance

ActivityMaintained
ResponsivenessNo issues