MCP server.
Point any MCP client at Open Mic and it can read your inbox, answer questions, publish episodes and change how the page looks — as you, in one space you choose, with nothing to copy and paste.
Connect
One endpoint, Streamable HTTP, no installation:
https://mcp.openmic.dev/
Claude Code
claude mcp add --transport http openmic https://mcp.openmic.dev/
Claude Desktop and claude.ai
Settings → Connectors → Add custom connector,
and paste https://mcp.openmic.dev/.
Cursor
{
"mcpServers": {
"openmic": { "url": "https://mcp.openmic.dev/" }
}
}
VS Code, Windsurf, Zed
Clients without native remote support bridge with mcp-remote:
{
"mcpServers": {
"openmic": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.openmic.dev/"]
}
}
}
Anything else
The URL above, Streamable HTTP. Both protocol revisions are spoken on the
one endpoint — the stateless 2026-07-28 one and the
older initialize-based ones — so the era your client
speaks is a property of its request rather than something to configure.
Signing in
Nothing to arrange first. Your client registers itself, and the first time it uses a tool your browser opens on Open Mic. Sign in as you normally would, and you get one screen:
- Which space. One per connection — connect twice for two.
- What it may do there, and never more than you can. An editor cannot hand over what the console keeps to owners, however much the client asked for.
- Who is asking. If the client registered itself we say so, and show where approving would send your browser — a name is something an app chooses for itself.
Approve, and the tool call you made carries on. There is no key anywhere: not in a config file, not on your clipboard, not in your shell history. Disconnect it whenever you like from the Keys page of the space you chose, and it stops working immediately.
What it can do
Everything the console can, minus the things no agent should hold. Each tool carries what it needs and what it costs in its own description, so an agent can tell that publishing emails people before it publishes.
| Tool | Needs | |
|---|---|---|
| get_space | read | The space this key belongs to |
| list_questions | read | Questions, newest first |
| get_question | read | One question |
| list_episodes | read | Published episodes, newest first |
| get_episode | read | One episode, with both transcripts |
| get_branding | read | The space's resolved appearance |
| update_branding | write | Change appearance |
| get_featured | read | The featured episodes, in order |
| update_featured | write | Set the featured list and its order |
| publish_episode | write | Publish an episode, or rehearse it |
| set_episode_themes | write | File an episode under themes |
| list_themes | read | Themes, in the space's own order |
Not here on purpose: nothing can grant consent to publish somebody's voice or face, and nothing can erase an asker. Both stay in the console, with a person present.
Servers & scripts
Signing in suits a client on your machine. For something running unattended — a cron job, a deploy hook, a server with nobody at a keyboard — create a secret key on the console's Keys page and send it as a bearer credential instead. Same endpoint, same tools. The API reference covers both, and the REST endpoints underneath.