MCP (Model Context Protocol)
The Curate-Me MCP server (@curate-me/mcp-server) exposes 50+ tools
that let an MCP host (Claude Desktop, Cursor, OpenClaw, etc.) interact
with the Curate-Me platform — check budgets, install skills, post to
Slack, query shared memory. The server itself talks to the
Curate-Me gateway, so any LLM calls it makes are governed.
Host config
{
"mcpServers": {
"curate-me": {
"command": "npx",
"args": ["@curate-me/mcp-server"],
"env": {
"CM_API_KEY": "cm_sk_your_gateway_key",
"CM_GATEWAY_URL": "https://api.curate-me.ai"
}
}
}
}When the agent invokes a curate_* tool, the MCP server proxies the
underlying request through ${CM_GATEWAY_URL} using
X-CM-API-Key: ${CM_API_KEY}. Each request gets a X-CM-Request-Id
header you can search for in the dashboard.
Full example + smoke test at
examples/integrations/mcp/.
Auto-injection inside managed runners
When an OpenClaw / Claude Code session runs inside a Curate-Me managed
runner container, CM_API_KEY and CM_GATEWAY_URL are auto-injected
by the runner control plane. The agent doesn’t need to know its own
credentials — they’re scoped to the runner session and revoked on
session close.
Supported versions
| Surface | Version |
|---|---|
| MCP protocol | 2025-06-18 (stdio transport) |
@curate-me/mcp-server | latest (npm) |
| Claude Desktop | 1.0+ |
| Cursor | 0.45+ |
| OpenClaw | v2026.4.2+ |
Known limitations
- Streaming tools: SSE / streaming tool responses pass through unmodified. The cost-record event happens at stream-close, so a long stream’s cost won’t appear in the dashboard until it ends.
- Admin-scoped tools: the
curate_dashboard_*family requires a runner-tier or admin-scoped key. Non-admin keys see 403 on those tools (but the rest still work). - Non-OpenAI tool payloads: the gateway expects OpenAI’s tool
format. If you need Anthropic-native tools, call
/v1/anthropic/v1/messagesdirectly rather than going through the MCP server’s OpenAI-shaped tool surface. - Bidirectional streams: the WebSocket / HTTP-streamable transport
of MCP is supported by
@curate-me/mcp-serveritself; the gateway layer is stateless and only sees discrete LLM calls.