{"id":220,"date":"2026-10-30T09:01:05","date_gmt":"2026-10-30T09:01:05","guid":{"rendered":"https:\/\/www.dobryakov.net\/blog\/220\/"},"modified":"2026-10-30T09:01:05","modified_gmt":"2026-10-30T09:01:05","slug":"local-transcribe-mcp","status":"publish","type":"post","link":"https:\/\/www.dobryakov.net\/blog\/220\/","title":{"rendered":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR"},"content":{"rendered":"<p>Zoom, Meet, and the rest have built-in AI assistants that transcribe and summarize your calls automatically. Everything that happens <em>outside<\/em> those platforms \u2014 a conversation in a room, a dictaphone recording, an in-person interview, an offline meeting \u2014 falls through the gap. There was no convenient tool where you just drop an audio file and get a proper dialogue with speakers and timestamps. Cloud ASR means handing your recording to a third party. The alternative was fiddling with pipelines nobody has time to assemble.<\/p>\n<p>So I built my own. CPU-only, free models, no cloud ASR. It outputs a Markdown dialogue with speakers and timestamps. It has a REST API and an MCP server so your AI client can submit audio, wait, and read the transcript itself. The repository is at the end of this post.<\/p>\n<p><!--more--><\/p>\n<h2>Where the gap is<\/h2>\n<p>Online calls are a solved problem. Zoom, Meet, and similar platforms ship with AI assistants that handle transcription and summarization natively. You start the call, the assistant joins, you get a transcript when it ends.<\/p>\n<p>Offline conversations have no such assistant. A recording from your phone, a meeting in a conference room, a field interview \u2014 none of these live inside a platform with a built-in AI layer. The tools that exist either require uploading your audio to a cloud ASR service or demand enough manual setup that you stop before you start.<\/p>\n<p>What I wanted was simple: my own transcriber, on my own machine, with audio that never leaves. No third-party ASR, no API keys to a cloud speech service, no recording sitting on someone else&#x27;s server.<\/p>\n<h2>What it does<\/h2>\n<p>The transcriber runs entirely on CPU using free models. No GPU required, no cloud ASR calls. The output is a Markdown dialogue \u2014 not a wall of continuous text, but a conversation broken into turns, each labeled with the speaker and a timestamp. You can read it directly or feed it into any downstream tool.<\/p>\n<p>On top of the transcription engine, there is a REST API and an MCP server. With the MCP layer, your AI client \u2014 Claude, for instance \u2014 submits the audio file itself, waits for processing to finish, and pulls the completed transcript into its own context. You do not manually trigger transcription and copy the result. The client handles the whole loop.<\/p>\n<h2>What is inside<\/h2>\n<p>The stack, briefly:<\/p>\n<ul>\n<li><strong>faster-whisper on CPU (int8)<\/strong> \u2014 speech recognition without a GPU, running in integer quantization so it works on an ordinary processor.<\/li>\n<li><strong>Diarization: sherpa or pyannote<\/strong> \u2014 speaker labeling, your choice of one of two engines.<\/li>\n<li><strong>Languages: en \/ ru \/ mixed (multi)<\/strong> \u2014 English, Russian, and a mixed mode for conversations where languages alternate.<\/li>\n<li><strong>One-time upload links<\/strong> \u2014 convenient for uploading audio from a phone via Claude.ai: you get a link, upload the file, the link expires.<\/li>\n<li><strong>Audio deleted after processing<\/strong> \u2014 everything stays on your machine. The recording does not linger on the server longer than the processing requires.<\/li>\n<\/ul>\n<p>Those last two points \u2014 one-time links and audio deletion after processing \u2014 are the reason this runs locally in the first place. The recording of your conversation does not travel to a third-party ASR. It is processed on your hardware and erased when processing is done.<\/p>\n<h2>Get the repository<\/h2>\n<p>Repository: https:\/\/github.com\/dobryakov\/local-transcribe-audio-mcp<\/p>\n<p>If you also wanted a transcriber that sits under Claude and does not ship your audio to a cloud provider \u2014 and a bit of Linux does not scare you \u2014 the repository is here. It comes up the usual way through <code>docker compose<\/code>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zoom and Meet have built-in AI assistants. Everything outside them \u2014 offline meetings, dictaphone recordings, in-person interviews \u2014 falls through the gap. So I built my own transcriber and open-sourced it.<\/p>\n","protected":false},"author":0,"featured_media":219,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-220","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.dobryakov.net\/blog\/220\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov&#039;s blog: management, development and testing\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\" \/>\n\t\t<meta property=\"og:description\" content=\"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.dobryakov.net\/blog\/220\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-30T09:01:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-30T09:01:05+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#blogposting\",\"name\":\"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\",\"headline\":\"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\",\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/local-transcribe-mcp.jpg\",\"width\":1200,\"height\":630,\"caption\":\"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\"},\"datePublished\":\"2026-10-30T09:01:05+00:00\",\"dateModified\":\"2026-10-30T09:01:05+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#webpage\"},\"articleSection\":\"Uncategorized\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/#listItem\",\"name\":\"Uncategorized\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/#listItem\",\"position\":2,\"name\":\"Uncategorized\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#listItem\",\"name\":\"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#listItem\",\"position\":3,\"name\":\"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/#listItem\",\"name\":\"Uncategorized\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#webpage\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/\",\"name\":\"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\",\"description\":\"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/local-transcribe-mcp.jpg\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#mainImage\",\"width\":1200,\"height\":630,\"caption\":\"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/220\\\/#mainImage\"},\"datePublished\":\"2026-10-30T09:01:05+00:00\",\"dateModified\":\"2026-10-30T09:01:05+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.","canonical_url":"https:\/\/www.dobryakov.net\/blog\/220\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.dobryakov.net\/blog\/220\/#blogposting","name":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","headline":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/10\/local-transcribe-mcp.jpg","width":1200,"height":630,"caption":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR"},"datePublished":"2026-10-30T09:01:05+00:00","dateModified":"2026-10-30T09:01:05+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/220\/#webpage"},"isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/220\/#webpage"},"articleSection":"Uncategorized"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dobryakov.net\/blog\/220\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.dobryakov.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/#listItem","name":"Uncategorized"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/#listItem","position":2,"name":"Uncategorized","item":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/220\/#listItem","name":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/220\/#listItem","position":3,"name":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/#listItem","name":"Uncategorized"}}]},{"@type":"Organization","@id":"https:\/\/www.dobryakov.net\/blog\/#organization","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","url":"https:\/\/www.dobryakov.net\/blog\/"},{"@type":"WebPage","@id":"https:\/\/www.dobryakov.net\/blog\/220\/#webpage","url":"https:\/\/www.dobryakov.net\/blog\/220\/","name":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.dobryakov.net\/blog\/220\/#breadcrumblist"},"author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"creator":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/10\/local-transcribe-mcp.jpg","@id":"https:\/\/www.dobryakov.net\/blog\/220\/#mainImage","width":1200,"height":630,"caption":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR"},"primaryImageOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/220\/#mainImage"},"datePublished":"2026-10-30T09:01:05+00:00","dateModified":"2026-10-30T09:01:05+00:00"},{"@type":"WebSite","@id":"https:\/\/www.dobryakov.net\/blog\/#website","url":"https:\/\/www.dobryakov.net\/blog\/","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov's blog: management, development and testing","og:type":"article","og:title":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","og:description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.","og:url":"https:\/\/www.dobryakov.net\/blog\/220\/","article:published_time":"2026-10-30T09:01:05+00:00","article:modified_time":"2026-10-30T09:01:05+00:00","twitter:card":"summary_large_image","twitter:title":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","twitter:description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps."},"aioseo_meta_data":{"post_id":"220","title":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.","keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","og_description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.","og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":"Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","twitter_description":"A self-hosted audio transcriber with REST API and MCP. CPU-only, free models, no cloud ASR. Outputs Markdown dialogue with speakers and timestamps.","schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-10-30 09:01:11","updated":"2026-10-30 09:01:11"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/\" title=\"Uncategorized\">Uncategorized<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tA Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.dobryakov.net\/blog"},{"label":"Uncategorized","link":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/"},{"label":"A Local Audio Transcriber for Claude: CPU-Only, No Cloud ASR","link":"https:\/\/www.dobryakov.net\/blog\/220\/"}],"_links":{"self":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/comments?post=220"}],"version-history":[{"count":0,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/220\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media\/219"}],"wp:attachment":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/tags?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}