mcp-listen
About
Give your AI agents the ability to listen. Microphone capture and speech-to-text tools for MCP-compatible agents.
Details
- Author
- Decibri
- GitHub stars
- 5
- Downloads
- 309
- Categories
- Communication, Productivity, AI
Jump to
- Windows x64
- macOS Apple silicon (arm64)
- Linux x64 and arm64 (glibc)
- Node.js 18+
- A microphone
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
mcp-listenCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
The README includes setup instructions such as claude mcp add mcp-listen npx mcp-listen.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"mcp-listen": {
"mcp-listen": {
"command": "npx",
"args": [
"-y",
"mcp-listen"
]
}
}
}
}
McpServers
{
"mcp-listen": {
"command": "npx",
"args": [
"-y",
"mcp-listen"
]
}
}
Give your AI agents the ability to listen
Microphone capture and speech-to-text tools for MCP-compatible agents.
claude mcp add mcp-listen npx mcp-listen
Claude Desktop / ChatGPT Desktop / Cursor / Windsurf / VS Code
{ "mcpServers": { "mcp-listen": { "command": "npx", "args": ["-y", "mcp-listen"] } } }
Compatible with Claude Desktop, ChatGPT Desktop, Cursor, GitHub Copilot, Windsurf, VS Code, Gemini, Zed, and any MCP-compatible client.
- Windows x64
- macOS Apple silicon (arm64)
- Linux x64 and arm64 (glibc)
Intel Mac (darwin-x64) is not supported: Apple has discontinued the platform and no decibri binary is published for it.
Forlist_audio_devicesandcapture_audio:
- Ollamarunning locally
- Whisper GGML model (seeWhisper Model Setup)
Arguments are validated before anything is recorded or written. An argument a tool does not declare is rejected with an error naming it, rather than silently ignored.duration_msmust be an integer between 100 and 30000;silence_msan integer between 100 and 10000;stop_on_silencea boolean;devicea non-negative integer index or a non-empty string id fromlist_audio_devices. Asilence_msthat cannot take effect (passed without silence-stopping active) is rejected for the same reason unknown arguments are. A rejected call writes nothing to disk.
Returns a JSON array of available audio input devices.
[ { "index": 0, "name": "Microphone", "id": "wasapi:{0.0.1.00000000}.{6b187949-26ea-470b-907d-66bf87261530}", "maxInputChannels": 2, "defaultSampleRate": 48000, "isDefault": true }, { "index": 1, "name": "Microphone Array", "id": "wasapi:{0.0.1.00000000}.{b7a6e3e2-a62b-4e92-9320-947c4be98552}", "maxInputChannels": 2, "defaultSampleRate": 48000, "isDefault": false } ]
Theidis stable across reboots and device changes. Theindexis positional and can shift when devices are added or removed, and names are not unique. Preferidwhen selecting a device. In the rare case the host cannot produce a stable id for a device, itsidis an empty string and it can only be selected byindex.
Records audio from the microphone and saves as a WAV file. Records for exactlyduration_msby default, or until the speaker stops talking withstop_on_silence: true.
{ "path": "/tmp/mcp-listen-1712345678901.wav", "duration_ms": 5000, "sample_rate": 16000, "channels": 1, "size_bytes": 160044 }
Example response (stop_on_silence: true):
{ "path": "/tmp/mcp-listen-1712345678901.wav", "duration_ms": 2600, "sample_rate": 16000, "channels": 1, "size_bytes": 83244, "stopped_by": "silence", "speech_detected": true }
Withstop_on_silence,duration_msin the response is the actual captured length, andstopped_bysays how the recording ended:"silence"(the speaker finished),"ceiling"(theduration_msmaximum was reached), or"no_speech_timeout"(nobody spoke for 10 seconds; the WAV is still returned, withspeech_detected: false, so silence is a reported outcome rather than an error). Detection runs per ~100ms audio buffer, so the effective hangover rounds up to the next buffer, and the recording keeps everything from the start of the call through the stop decision: nothing is gated or clipped at speech boundaries, and the audio itself is byte-identical to a fixed-duration capture of the same sounds.
Full voice pipeline: capture audio, transcribe with whisper.cpp, send to Ollama, return the response. Entirely offline. Recording stops automatically when the speaker stops talking; passstop_on_silence: falsefor a fixed-length recording.
{ "transcription": "What is the default port for PostgreSQL?", "response": "PostgreSQL runs on port 5432 by default.", "model": "llama3.2" }
Result outcomes.voice_queryreports five distinct outcomes. Thestructured fields are the contract(isError,speech_detected,transcription); anymessageis a human-readable hint whose wording is not part of the contract, so a caller branches on the fields, never on the prose. The rule is simple:if the pipeline ran, the result is a success (even when it found no words); if a dependency broke, the result is an error.
A caller distinguishes "the user was silent" from "the user spoke but produced no words" byspeech_detected(falsevstrue), both carryingtranscription: null. Non-speech audio never reaches the language model: whisper's non-speech markers ([BLANK_AUDIO],[MUSIC],(silence), and similar) are treated as no usable words rather than sent on as a query.
{ "speech_detected": false, "stopped_by": "no_speech_timeout", "transcription": null, "response": null, "message": "No speech was detected. Ask the user to repeat, or check that the correct microphone is selected." }
Speech, but no transcribable words(speech_detected: true,transcription: null):
{ "speech_detected": true, "stopped_by": "silence", "transcription": null, "response": null, "message": "Speech was detected but could not be transcribed. It may have been too quiet, too brief, or unclear. Ask the user to repeat, a little louder and closer to the microphone." }
Transcription and dependency failures returnisError: truewith the real cause (a missing model, a whisper load failure, Ollama not running, a timeout, or an empty model response), so a caller debugging can tell whether the failure was in capture, transcription, or the language model.
Audio is captured as 16-bit PCM at 16kHz mono, the standard format for speech-to-text engines.
Silence-stopping uses the Silero voice activity detection model that ships inside decibri, running on-device through the bundled ONNX Runtime. Nothing extra is downloaded and no audio leaves the machine. The stop decision is measured in captured audio, not wall-clock time, and the VAD only decides when to stop: it never gates or alters the recorded samples.
Thevoice_querytool runs the full pipeline locally: capture audio, transcribe with whisper.cpp, and send to a local Ollama LLM. Fully offline, nothing leaves your machine.
Thevoice_querytool requires a Whisper GGML model file. Download one:
mkdir -p ~/.mcp-listen/models curl -L -o ~/.mcp-listen/models/ggml-base.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
mkdir "$env:USERPROFILE\.mcp-listen\models" -Force Invoke-WebRequest -Uri "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin" -OutFile "$env:USERPROFILE\.mcp-listen\models\ggml-base.en.bin"
The model is ~150MB and downloads once. You can also set theWHISPER_MODEL_PATHenvironment variable to a custom directory.
- Install Ollama fromhttps://ollama.com
- Pull a model:ollama pull llama3.2
- Ensure Ollama is running:ollama serve
- A loud transient can register as speech.Silence-stopping decides "speech has started" from the VAD score, so a door slam or a cough can start the countdown and end the recording aftersilence_msof quiet, yielding a short capture of mostly silence. The outcome is visible, not silent: the result reports the actual duration, andvoice_queryreports an empty transcription rather than inventing one. A minimum-speech-duration guard is a candidate refinement.
- voice_queryrequires Ollama running.If Ollama isn't running, the tool returns a clear error message.
- Whisper model must be downloaded before first use.voice_querydoes not download the model itself; the first call requires a pre-downloaded model (~150MB). SeeWhisper Model Setup.
- No streaming.MCP's request/response pattern means the entire recording is captured, then transcribed, then sent to the LLM. No real-time partial results.
- Temp files.capture_audiowrites WAV files to the system temp directory and returns the path, so the file has to outlive the call for the caller to read it. Recordings older than 24 hours are removed the next time the server starts; recordings made since the last restart persist until then.voice_querydeletes its recording as soon as the query completes.
Windows: "Error opening microphone"Windows may block microphone access by default. Go toSettings > Privacy & security > Microphoneand ensure microphone access is enabled for desktop apps.
Ollama: "Ollama is not running"Some Ollama installations start as a background service automatically. If you see this error, runollama servemanually or check that the Ollama service is running.
Whisper: "model not found"The whisper model file must be downloaded before first use. SeeWhisper Model Setupfor instructions.
Whisper: "installed but failed to load"The@kutalia/whisper-node-addonpackage is present but a native library it depends on is missing or incompatible on your system. The error includes the underlying loader message naming the library. Reinstalling the package will not help; resolve the named library instead.
Manage your WhatsApp, SMS and Phone Calls using a single MCP connector
Connect to any function, any language, across network boundaries using AgentRPC.
Access your meeting transcripts, summaries, and action items from any AI assistant.
Connect Claude, ChatGPT, and other AI tools to your Granola meeting notes via MCP. Query your notes, search transcripts, and get meeting insights in your favorite AI assistants.
Build with the Kudosity API to send SMS and MMS. Access developer docs, API references and live testing tools to send messages, manage contact lists, configure webhooks and more.
Send SMS, WhatsApp, and RCS messages programmatically with DLT compliance. Manage contacts, schedule campaigns, and track delivery reports.
Interact with Twilio APIs to send messages, manage phone numbers, configure your account, and more.
The VoIPstudio MCP server gives compatible AI assistants secure access to authorised VoIPstudio account data, including recordings, call detail records, live calls and voicemails in order to query call activity, analyse patterns, identify agent performance issues and generate QA or operations reports in plain English.
A bridge server connecting Agent Communication Protocol (ACP) agents with Model Context Protocol (MCP) clients.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


