speaker-context-layer
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@speaker-context-layerIdentify who is speaking in this recording"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Speaker Context Layer
AI knows who logged in. It has no idea who is in the room.
A local MCP server that tells any AI assistant who is speaking. Voiceprints never leave your machine — no account, no cloud.
[Sammy]: We push the follow-up to Thursday.
[Amara]: I'll own the documentation pack.
[Wei]: Can we revisit the budget line first?
[UNKNOWN SPEAKER]: I don't agree with that.Try it in two minutes
pip install git+https://github.com/sammyghe/speaker-context-layer.git
scl-demoIt asks for a name, records 8 seconds, repeats for each person — then guesses who is speaking. Nothing is kept: scl-demo --reset deletes it.
Related MCP server: io.github.chicogong/ffvoice
Use it in an assistant
Claude Code
claude mcp add speaker-context-layer -- speaker-context-layerClaude Desktop — add to claude_desktop_config.json:
{ "mcpServers": { "speaker-context-layer": { "command": "speaker-context-layer" } } }Then say:
Use
record_and_enrollto save my voice as Sammy in English — I consent, verbally, right now.
Setup for Gemini CLI and troubleshooting: docs/mcp-clients.md
Where it works, honestly
Claude Code, Claude Desktop, Gemini CLI | Yes — local, today |
Claude mobile / voice | Not yet — needs a remote server |
ChatGPT text | Poorly — connectors are mostly limited to |
ChatGPT voice mode | No — MCP tools are switched off during voice conversations |
Voice mode is the least available place, which is the opposite of what you'd guess. An MCP tool call carries text — by the time the model calls a tool, the audio is already transcribed and gone, so no tool can reach the waveform it would need. Speaker identity has to be computed alongside a voice conversation by something holding the microphone, which is exactly what scl-room does.
Full explanation, and what a Connector Directory listing would cost: docs/where-it-runs.md
What it does that others don't
One person, several voiceprints — one per language. A voice embedding shifts when you switch language, so a code-switching speaker reads as two different people. Enroll each person once per language they use:
enroll_speaker(name="Sammy", language="en", ...)
enroll_speaker(name="Sammy", language="lg", ...)It refuses to guess. Three answers, not two: a name, NEW_SPEAKER, or AMBIGUOUS when two people score too closely. Misattributing a decision is worse than admitting you don't know.
The threshold is yours, not inherited. Everyone else ships one number tuned on English-heavy data. On other accents that number is wrong — and it fails silently, returning a confident wrong name. So it ships unset, every answer is marked calibrated: false, and you fix it with your own voices:
scl-calibrate ./clips --population "Kampala team, EN/LG" --applyIt reports the gap between your worst genuine match and your best impostor — and refuses to invent a threshold when the two overlap.
The reasoning, the evidence, and what would prove it wrong: THESIS.md
Not authentication
Use it to label a transcript, follow a conversation, or caption a meeting. Never to unlock anything, approve a payment, gate access, or stand in for a signature. It cannot detect a recording or a cloned voice. A 0.96 score is not a signature.
Tools
Tool | |
| Record a consenting person, store the print, delete the clip |
| Record, identify, delete the clip |
| Store a voiceprint from a file |
| Attribute a clip, or return |
| Roster, languages, consent records |
| Erase one language or the whole person |
| Available inputs |
| Whether the threshold has been tested on your voices |
Writing tools refuse without consent_confirmed=true and a consent_method describing how the person agreed.
Your data
~/.speaker-context-layer/registry.jsonVoiceprints, consent records, your threshold. Treat it as biometric data — it is gitignored, and CI fails the build if audio or a registry is ever committed. See SECURITY.md.
Honest status
v0.1.0. The logic is tested (22 tests, ~0.5s). Accuracy on real voices is not established — no calibration run has happened yet. That is the next real step, and the software tells you so on every answer instead of hiding it.
Composes with
pyannote.audio (MIT) for diarization on long recordings — this project does not attempt it. Picovoice Eagle drives the experimental live room (scl-room).
Roadmap
Calibration on real Ugandan English, Luganda, and Swahili-English code-switching
Published calibration profiles per population, so others start from a real number
Evaluate Intron Sahara as an African-language embedding backend
Consent ceremony on first contact — chime, ask, wait, then enroll
Credits
Built by Sammy Gedamu with Claude Code as engineering coworker — architecture, research, and implementation paired throughout.
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Speech-to-Text
An MCP memory server. One memory your agents share — across models, devices and apps.
AI voice generation: text-to-speech and voice cloning from any MCP client.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA local voice interface providing high-performance speech recognition and natural text-to-speech with voice cloning capabilities. It enables AI assistants to speak, listen, and engage in character-based voice conversations through integrated MCP tools.
- AlicenseNot gradedqualityCmaintenanceMCP server for offline speech-to-text and speaker diarization, enabling AI agents to transcribe audio locally without cloud APIs.3MIT
- FlicenseNot gradedqualityDmaintenanceA local-first MCP server that builds compact voice profiles from writing samples, then compares, rewrites, or generates new text in that voice.
- AlicenseNot gradedqualityBmaintenanceLocal-first speech-to-text and text-to-speech MCP server. Hot-swappable engines via config.yaml — no code changes, no API keys required.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sammyghe/speaker-context-layer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server