DEVELOPER DOCS
MCP
Server
- URL:
https://makecortex.com/mcp/<username> - Transport: HTTP. JSON-RPC 2.0 over POST; every reply is a single JSON body (no SSE). Protocol version
2024-11-05. - Auth:
Authorization: Bearer cx_...on every call. The owner's key, or an organization teammate's own key. - The profile does not need to be public. Which tools are listed depends on the owner's plan.
Keep the key in your shell, not in the config file and never in a chat: mint one on Activate, then export CORTEX_API_KEY='cx_...'. Every snippet below reads it from the environment.
Set up your client
Claude Code
claude mcp add \
--transport http cortex-<username> https://makecortex.com/mcp/<username> \
--scope user \
--header "Authorization: Bearer ${CORTEX_API_KEY}"Cursor
Paste the whole block into a terminal at the root of your project. It writes .cursor/mcp.json; then restart Cursor and enable the server under Settings, MCP.
mkdir -p .cursor && cat > .cursor/mcp.json <<'EOF'
{
"mcpServers": {
"cortex-<username>": {
"type": "http",
"url": "https://makecortex.com/mcp/<username>",
"headers": { "Authorization": "Bearer ${CORTEX_API_KEY}" }
}
}
}
EOFCodex
Append to ~/.codex/config.toml (or .codex/config.toml in the repo), then restart Codex.
[mcp_servers.cortex-<username>]
url = "https://makecortex.com/mcp/<username>"
bearer_token_env_var = "CORTEX_API_KEY"Any other MCP client
A project .mcp.json. It references the key by variable, so it is safe to commit.
{
"mcpServers": {
"cortex-<username>": {
"type": "http",
"url": "https://makecortex.com/mcp/<username>",
"headers": { "Authorization": "Bearer ${CORTEX_API_KEY}" }
}
}
}Signed in? Coding loop shows these with your username filled in, plus a one-line browser login that mints and stores a key for you.
Tools
| TOOL | INPUT | RETURNS |
|---|---|---|
query_person | question (required), context, conversationHistory, querierContext, images | The answer in their voice, then a JSON block with response, confidence, sources and mode. |
get_profile | none | Values, expertise, decision framework and communication style. |
get_expertise_on | domain (required) | What they know and think about that domain. |
get_communication_style | none | How they write and speak. |
coding_loop_review | sessionId, goal, report, evidence | Concierge only. The owner reviews an agent’s work in a loop until it approves. |
Owners on a plan with the agent arm also see list_calendar_events, search_emails and get_daily_brief on their own key. Teammates never do.
query_person({
question: "I wrote this launch plan. What feels weak or naive?",
context: "Give me direct feedback before I ship it.",
querierContext: { type: "ai", identity: "Claude helping with launch review" }
})Calling it directly
You do not need an MCP client to try it. tools/list over curl:
curl -X POST https://makecortex.com/mcp/<username> \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CORTEX_API_KEY" \
-d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'curl -X POST https://makecortex.com/mcp/<username> \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CORTEX_API_KEY" \
-d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": { "name": "query_person", "arguments": { "question": "What do you look for in a first hire?" } } }'GET https://makecortex.com/mcp/<username> with the same header returns a discovery document listing the tools.
Errors and limits
Errors come back as JSON-RPC errors, usually with HTTP 200, so check the error field rather than the status.
| CODE | MEANING |
|---|---|
| -32041 | Missing or invalid API key. Mint one on Activate and set CORTEX_API_KEY. |
| -32002 | Rate limited. data.retryAfter is the wait in seconds. The daily per-Cortex limit counts query_person and get_expertise_on. |
| -32001 | The Cortex cannot answer: for example its plan does not include MCP, or the profile does not exist. |
| -32601 | Unknown method or tool. |
| -32602 | Invalid parameters, for example a missing question. |
| -32700 / -32600 | The request is not valid JSON-RPC (HTTP 400). |
Daily limits and monthly usage are the same as REST; see the overview.