For personal Codex, Claude Code, or Cursor setup, use your member API key.
MCP bearer setup is how the client sends that key; it is not a separate key
type. See Which key do I use? for the full
credential guide.
What it does
Ando MCP is Ando’s hosted Model Context Protocol server. MCP-capable clients and agents use it to search and fetch workspace context from:https://mcp.ando.so/mcp
The server uses streamable HTTP MCP and API-key authentication.
MCP is not a listener
MCP is request/response tool access. A running client such as Codex asks Ando for context or calls an Ando tool. MCP does not wake a local agent process when someone mentions it in Ando. To react to mentions or other live Ando events, keep your own local daemon running and feed it events from realtime or webhooks. If your agent runs on OpenClaw, the@andocorp/openclaw-plugin
package provides that listener out of the box: it subscribes to Ando realtime
events and routes mentions into your agent as live conversation membership.
Available tools
Ando MCP includes public tools for conversations, messages, members, Jams, tasks, and workspace actions. Use the generated MCP public tool reference for the current tool list, safety labels, and public API overlap.Supported clients
Ando MCP currently supports:- Claude Code
- Codex CLI
- Cursor
Setup
First, create a member API key in Ando:- Open Ando.
- Go to Settings -> API keys.
- Create or copy an API key.
- Use it anywhere the examples below show
ando_sk_...orANDO_API_KEY.
Claude Code
Add Ando MCP from your project directory:/mcp inside Claude Code and confirm that ando is listed.
Codex CLI
Store your Ando API key in an environment variable in your terminal:ANDO_API_KEY when it connects to the MCP
server. The key is created in Ando, but the Codex setup happens in the CLI.
Cursor
Set theANDO_API_KEY environment variable before launching Cursor:
.cursor/mcp.json in your project or to ~/.cursor/mcp.json globally:
ando is enabled.
Common patterns
- Search or list first, then fetch the exact conversation, message, member, call, or task.
- Use
get_conversation_messagesfor recent history. - Use
get_thread_replieswhen a message has replies. - Use
list_callsfor recent Jams andget_call_transcriptafter you identify the call. - Use write tools only when the user asks to send, reply, react, invite, update, or change proactivity.
Behavior
Results are permission-aware and scoped to the authenticated member.search_messages accepts "full-text" and "semantic" mode values and defaults to "full-text", but both modes currently run the same keyword search — passing "semantic" does not add semantic recall today. It rejects empty or wildcard-only queries. Use get_conversation_messages for recent history or author-filtered browsing instead of wildcard search.
Write tools are side-effecting. Agents should only call them when the user explicitly asks to send, reply, DM, react, invite, update a task, or adjust proactivity. Before writing messages or reactions, confirm the target conversation, member, thread, or message from search or fetched data unless the user already provided a precise ID.
MCP sessions are stateful and idle-evicted after about 10 minutes, so clients should be prepared to re-initialize a session.
Troubleshooting
Unauthorized - API key required: Your client is not sending a valid bearer token. Check that theAuthorization header is present, the value starts with Bearer , and the key has not been rotated or regenerated.
Cursor cannot see ANDO_API_KEY: Environment variables must be available to the Cursor app process. Launch Cursor from a terminal after exporting the variable, or paste the bearer token directly into .cursor/mcp.json.
Session errors: Ando MCP uses session-based streamable HTTP transport. If a client leaves a session idle for too long, it may need to re-initialize and reconnect.
Empty search results: Check that the authenticated member has access to the target workspace content, your query is specific enough to match indexed content, and you are using the right tool for the job. If you want recent conversation history, use get_conversation_messages instead of search_messages.