Vocateca, together with LLMs
Vocateca ships two ways to put an AI assistant in the loop: a command-line interface you can script directly, and an MCP server that lets assistants like Claude call those same commands as tools. Both talk to the exact same local data — your library never has to leave your Mac to be useful to an LLM.
The CLI
vocateca-cli is the same headless surface the app itself uses to subscribe, transcribe, and search — every command supports --json, so the output is exact and stable enough to script or hand to a model.
The CLI is open source — read the code or build it yourself. github.com/madevmuc/vocateca-open-core
Subscribe to a podcast feed
$ vocateca-cli sources add-podcast https://feeds.example.com/interest-rates-weekly.xml \
--title "Interest Rates Weekly" --json
{
"action" : "add-podcast",
"added" : true,
"ok" : true,
"polled" : false,
"slug" : "interest-rates-weekly",
"title" : "Interest Rates Weekly"
}Check what the queue is doing
$ vocateca-cli status --json
{
"by_status" : {
"deferred" : 12,
"deleted" : 0,
"done" : 486,
"downloaded" : 0,
"downloading" : 1,
"failed" : 2,
"pending" : 3,
"skipped" : 0,
"stale" : 0,
"transcribing" : 1
},
"in_flight" : 2,
"paused_reason" : "",
"queue_depth" : 5,
"queue_paused" : false
}Search everything you've transcribed
$ vocateca-cli library search "interest rates" --limit 2 --json
[
{
"guid" : "local:9f3a1c02",
"score" : 0.94,
"show_slug" : "interest-rates-weekly",
"show_title" : "Interest Rates Weekly",
"title" : "The Fed's next move",
"transcript_path" : "/Users/you/Library/Application Support/Vocateca/transcripts/interest-rates-weekly/9f3a1c02.md"
},
{
"guid" : "local:6b71ffa9",
"score" : 0.81,
"show_slug" : "market-signals",
"show_title" : "Market Signals",
"title" : "Why the yield curve matters",
"transcript_path" : "/Users/you/Library/Application Support/Vocateca/transcripts/market-signals/6b71ffa9.md"
}
]Export a transcript as SRT
$ vocateca-cli library export local:9f3a1c02 --format srt --out ~/Desktop/ --json
{
"action" : "library-export",
"dest_path" : "/Users/you/Desktop/9f3a1c02.srt",
"format" : "srt",
"guid" : "local:9f3a1c02",
"ok" : true,
"source_path" : "/Users/you/Library/Application Support/Vocateca/transcripts/interest-rates-weekly/9f3a1c02.srt"
}The MCP server
MCP (Model Context Protocol) is a standard way for AI assistants like Claude to call tools on your machine directly — instead of you copy-pasting commands, the assistant runs them itself and reads the result.
vocateca-cli mcp exposes every CLI command above as an MCP tool, generated from the same command catalog so the two surfaces never drift apart. A few of the most useful ones:
statusQueue depth, in-flight, by-status counts, paused state.showsWatchlist shows with per-show pending/done/failed counts.episodesEpisodes for one show.failedFailed episodes across every show.statsThroughput, success rate, realtime factor over N days.library_searchScore-ranked search over transcript titles and bodies.library_exportExport one transcript (md, txt, html, srt, okf).sources_add-podcastSubscribe to an RSS/podcast feed. (mutating)transcribeImport a single link and optionally run it to completion. (mutating)queue_runRun a headless drain: download, transcribe, write to the library. (mutating)retry_allRe-enqueue every failed episode, optionally for one show. (mutating)notifications_listIn-app notifications.46 tools in total — one for every CLI command, including the mutating ones (sources_add-podcast, queue_run, retry, …). Each mutating tool accepts an optional dry_run to preview a change before it writes anything.
Connect it to Claude Desktop or Claude Code
Point the mcpServers config at the built vocateca-cli binary and its mcp subcommand:
{
"mcpServers": {
"vocateca": {
"command": "/absolute/path/to/vocateca-cli",
"args": ["mcp"]
}
}
}Worked examples
What actually happens when you ask an assistant to do one of these:
“What needs my attention?”
Claude calls the status and failed tools. Both return small JSON objects — queue depth, counts by state, a list of failed guids with their error text. Claude reads that JSON and answers in plain language. Nothing else on your Mac is touched or sent anywhere.
“Catch me up on what's new”
Claude calls shows, then episodes for whichever show you mean, filtered to --status done. It gets back titles, publish dates, and word counts — not full transcripts — and summarizes the list for you. If you then ask what a specific episode actually said, that's when Claude calls library_export or reads the file it points to — only then does that transcript's text become part of the conversation.
“Find everything I've said about interest rates”
Claude calls library_search. The response is a ranked list — show, title, a relevance score, and a local file path — not the transcript contents. Claude can tell you which episodes match and where they live on disk. To see what's actually in one, it has to explicitly export or open that file, which you can watch it do.
What stays local: your audio, your transcripts, your watchlist, and everything in state.sqlite — Vocateca never uploads any of it. What reaches the model: only the JSON a tool call returns, which is exactly what you'd see printed to your terminal if you ran the same command yourself.