Transcribe local audio files to text using SenseVoiceSmall with private, on-device inference.
Also known as modelscope/FunASR, funasr-mcp
- Stars
- 21,008
- Tools
- 2
- Downloads, 30 days
- —
- Latest version
- 0.1.2
- Last commit
- Nov 12, 2026
- License
- MIT
What is FunASR MCP?
FunASR is an MCP server. Transcribe local audio files to text using SenseVoiceSmall with private, on-device inference. It exposes 2 tools, such as audio_path, language.
Summary generated from the project's README
About FunASR MCP server
FunASR provides local audio transcription capabilities for AI assistants using the SenseVoiceSmall model. This server enables developers to convert speech from various file formats like wav, mp3, flac, m4a, and ogg into text directly on their own hardware. Because inference happens on your machine, your audio data remains private and never leaves your local environment.
Users can set up the server via a local Python installation or by running a Docker container. When using Docker, you must mount a host audio directory to the /audio path within the container. The server supports different hardware backends through the FUNASR_DEVICE environment variable, allowing you to select between cpu, cuda, or mps. It is compatible with several AI clients including Claude Desktop, Claude Code, Cursor, and Windsurf.
The transcribe_audio tool supports automatic language detection or specific language hints for Mandarin, Cantonese, English, Japanese, and Korean. It also utilizes VAD segmentation to handle longer audio files by splitting them before recognition.
What you can do with it
- 1Transcribe meeting recordingsAsk your AI assistant to convert a specific meeting audio file into a written transcript.
- 2Extract content from interviewsProvide a path to an interview audio file to find out what was discussed.
- 3Convert voice memosTurn a recorded voice memo into a text format for easier reading.
Written from the project's README. Every use case is checked against a quote from it.
How to install FunASR MCP
Formats verified 10 Nov 2026Install FunASR MCP in Claude Code
$ claude mcp add funasr-mcp -- docker run -i --rm ghcr.io/modelscope/funasr-mcp:0.1.2Install FunASR MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"funasr-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/modelscope/funasr-mcp:0.1.2"
]
}
}
}Install FunASR MCP in VS Code
.vscode/mcp.json
{
"servers": {
"funasr-mcp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/modelscope/funasr-mcp:0.1.2"
]
}
}
}Install FunASR MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"funasr-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/modelscope/funasr-mcp:0.1.2"
]
}
}
}Install FunASR MCP in Codex
~/.codex/config.toml
[mcp_servers.funasr-mcp] command = "docker" args = ["run", "-i", "--rm", "ghcr.io/modelscope/funasr-mcp:0.1.2"]
Install FunASR MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"funasr-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/modelscope/funasr-mcp:0.1.2"
]
}
}
}FunASR MCP tools 2
Detected from the READMEaudio_pathlanguage
| audio_path | — | |
| language | — |
Configuration
FUNASR_DEVICE
| Name | Description | |
|---|---|---|
| FUNASR_DEVICE | — |
Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packageNot checked
- Remote endpoint uses HTTPSNot checked
- Destructive tools are labelledPass
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesNot checked
README
View on GitHubFunASR MCP Server
Model Context Protocol server that gives AI assistants local audio transcription with SenseVoiceSmall by default.
Setup
1. Install dependencies
pip install funasr
2. Optional: run with Docker
The Dockerfile starts the MCP server over stdio and is suitable for MCP directory
checks that initialize the server and call tools/list.
docker build -t funasr-mcp examples/mcp_server
docker run --rm -i \
-e FUNASR_DEVICE=cpu \
--mount type=bind,src=/path/to/audio,dst=/audio,readonly \
--mount type=volume,src=funasr-mcp-cache,dst=/root/.cache/modelscope \
funasr-mcp
Verify the image entrypoint and MCP handshake without downloading a model:
python examples/mcp_server/smoke_test.py funasr-mcp
When submitting this server to MCP directories such as Glama, use this folder as
the Docker build context so the container entrypoint runs funasr_mcp.py.
The repository root glama.json declares GitHub maintainer ownership for Glama,
while the glama.json file in this directory declares the container command and
metadata for directory scanners.
Official MCP Registry
The versioned Registry metadata is in server.json. It points to
the public GHCR image and asks clients to mount one host audio directory at
/audio read-only. The Dockerfile carries the matching OCI ownership label:
Current published release:
LABEL io.modelcontextprotocol.server.name="io.github.modelscope/funasr-mcp"
The release workflow validates the metadata against the official schema, builds
the image, performs an MCP initialize and tools/list handshake, pushes the
versioned image to GHCR, and publishes server.json through the official
mcp-publisher CLI.
To release a new MCP server version:
- Update
versionand the OCI image tag inserver.jsontogether. - Merge the change after the MCP validation workflow passes.
- Have a
modelscopeorganization Owner push the matchingmcp-v<version>tag, for examplemcp-v0.1.2. - Approve the protected
mcp-registry-publishenvironment deployment.
The official Registry only grants the io.github.modelscope/* namespace to a
GitHub organization Owner. Keep the publish environment restricted to release
tags and require a maintainer approval because its OIDC token can publish the
organization namespace.
After publication, clients can run the pinned image directly:
docker run --rm -i \
--mount type=bind,src=/path/to/audio,dst=/audio,readonly \
--mount type=volume,src=funasr-mcp-cache,dst=/root/.cache/modelscope \
ghcr.io/modelscope/funasr-mcp:0.1.2
When using the container, pass tool paths under /audio, such as
/audio/meeting.wav.
Glama submission checklist
Use these values when adding the server at https://glama.ai/mcp/servers:
| Field | Value |
|---|---|
| Repository URL | https://github.com/modelscope/FunASR |
| Docker build context | examples/mcp_server |
| Dockerfile path | examples/mcp_server/Dockerfile |
| Server command | python /app/funasr_mcp.py |
| Expected MCP tool | transcribe_audio |
After Glama finishes evaluation, verify that the listing or API shows an evaluated quality score before adding it to directory PRs. An HTTP 200 from the listing or badge endpoint alone does not prove that a score has been assigned:
[](https://glama.ai/mcp/servers/modelscope/FunASR)
If the badge endpoint still returns 404, keep the badge out of external directory submissions until the Glama listing is live.
Directory listings
The FunASR MCP server is published in the official Registry and listed on mcp.so:
- https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.modelscope/funasr-mcp
- https://mcp.so/server/mcp-server-funasr/radial-hks
3. Configure your AI tool
Claude Code (~/.claude.json):
{
"mcpServers": {
"funasr": {
"command": "python",
"args": ["/path/to/examples/mcp_server/funasr_mcp.py"],
"env": {"FUNASR_DEVICE": "cuda"}
}
}
}
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"funasr": {
"command": "python",
"args": ["/path/to/funasr_mcp.py"],
"env": {"FUNASR_DEVICE": "cpu"}
}
}
}
Cursor (Settings → MCP Servers → Add):
- Command:
python /path/to/funasr_mcp.py - Environment:
FUNASR_DEVICE=cuda
Tools
transcribe_audio
Transcribe a speech audio file to text.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
audio_path |
string | Yes | Path to audio file (wav, mp3, flac, m4a, ogg) |
language |
string | No | auto, zh, yue, en, ja, or ko (default: auto) |
Returns: Transcribed text with per-segment timestamps when the model returns them.
Example Usage
Once configured, ask your AI assistant:
- "Transcribe the meeting recording at ~/Downloads/meeting.wav"
- "What was said in this audio file? /path/to/interview.mp3"
- "Convert this voice memo to text: ~/voice_note.m4a"
Environment Variables
| Variable | Default | Description |
|---|---|---|
FUNASR_DEVICE |
cpu |
Device: cuda, cpu, or mps |
FUNASR_MODEL |
iic/SenseVoiceSmall |
Model name or local model path passed to AutoModel |
Features
- Five-language transcription — Mandarin, Cantonese, English, Japanese, and Korean
- Automatic detection or explicit hints —
auto,zh,yue,en,ja, andko - VAD segmentation — splits longer audio before recognition
- Optional segment timestamps — included only when the configured model returns them
- Configurable local inference — choose the model and CPU, CUDA, or MPS with environment variables
- No API key needed — fully local inference
- MIT licensed, privacy-friendly (audio never leaves your machine)
Verified Compatibility
| Tool | Status |
|---|---|
| Claude Code | ✅ Tested |
| Claude Desktop | ✅ Compatible |
| Cursor | ✅ Compatible |
| Windsurf | ✅ Compatible |
| Any MCP client | ✅ Standard protocol |
FunASR MCP questions
How do I add FunASR MCP to Claude Code?
Run claude mcp add funasr-mcp -- docker run -i --rm ghcr.io/modelscope/funasr-mcp:0.1.2 in your terminal. Add --scope user to make it available in every project.
How do I add FunASR MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does FunASR MCP provide?
It exposes 2 tools, including audio_path, language.
Does this server require an API key?
No, the server performs fully local inference so no API key is needed.
Which languages can be transcribed?
The server supports Mandarin, Cantonese, English, Japanese, and Korean.
Can I run this on a GPU?
Yes, you can configure the device to use CUDA or MPS via environment variables.
Is my audio data private?
Yes, the server is privacy-friendly because audio never leaves your machine.