These endpoints are not the Memory MCP protocol. For agent retrieval, use
POST /v1/mcp/memory — see MCP reference.Authentication
Developer API endpoints require a PAM access JWT in theAuthorization header:
- Static
pam_mkeyagent API keys (Cursor, Claude Code, scripts) - OAuth 2.1 Bearer tokens (browser-hosted LLM connectors such as Claude web)
Browser clients discover OAuth via:
GET /.well-known/oauth-protected-resourceGET /.well-known/oauth-authorization-serverPOST /v1/oauth/register(DCR)
https://claude.ai/api/mcp/auth_callback and https://chatgpt.com/connector/oauth/{id}.
Base URL
Endpoints
Not counted toward MCP quotas
Developer REST calls do not count toward Memory MCP retrieval limits. Onlytools/call → retrieve_memory on /v1/mcp/memory is metered.
Typical workflows
Check if memory is ready before connecting an agent
Check if memory is ready before connecting an agent
Call
GET /v1/dev/readiness and confirm ready: true before testing retrieve_memory from your MCP client.Get live MCP config for your account
Get live MCP config for your account
Call
GET /v1/dev/mcp-config when you want account-specific MCP connection details in one response. See mcp-config fields below — most integrations only need a subset.Rotate a compromised key
Rotate a compromised key
Call
POST /v1/dev/rotate-key with your access JWT. Copy the new api_key immediately and update your MCP client configuration.Debug a failed retrieval
Debug a failed retrieval
Call
GET /v1/dev/mcp-requests to list recent calls, then GET /v1/dev/mcp-requests/{request_id} for full prompt and response details.List or revoke a browser LLM connection
List or revoke a browser LLM connection
Call
GET /v1/dev/oauth-connections to see ChatGPT and Claude web sessions (one row per refresh-token family). Revoke with POST /v1/dev/oauth-connections/{connection_id}/revoke — the same action as Connected apps in the PAM app.mcp-config fields
GET /v1/dev/mcp-config is a dashboard aggregate — one poll for the Memory MCP UI. External automation can use it too, but you usually do not need every field.
api_key is almost always null. The full secret is returned only once from POST /v1/dev/rotate-key. Use key_prefix plus your stored secret, or rotate and capture the new key immediately.Use these for MCP setup
Typical flow: poll until
readiness.ready is true → paste claude_code_config_example → inject your key → run hello_world_prompt → confirm mcp_verified.
Optional convenience copies
You can hardcode these from the docs instead of reading them from the API.
Also included (prefer dedicated endpoints when polling)
Safe to ignore in code
Example response (abbreviated)
DeveloperMcpConfigResponse in the Developer API reference.
Response examples
All examples use fictional account data. Timestamps are ISO 8601 UTC.GET /v1/dev/readiness
ready is false and estimated_wait_message explains the wait:
POST /v1/dev/rotate-key
The full api_key is returned once. Store it immediately — subsequent GET /v1/dev/mcp-config calls return api_key: null.
POST /v1/dev/revoke-key
GET /v1/dev/oauth-connections
Lists browser LLM connections (one item per refresh-token family). expires_at reflects refresh-token lifetime when present.
status is active, expired, or revoked.
POST /v1/dev/oauth-connections/{connection_id}/revoke
GET /v1/dev/mcp-usage-stats?days=30
Daily series includes every calendar day in the range (zero-filled when there was no activity). hourly_heatmap uses weekday 0 = Sunday through 6 = Saturday.
GET /v1/dev/mcp-requests?limit=10&page=1
response_json is the stored MCP tool result — same shape as a live tools/call response (content, structuredContent, isError). Text fields may be truncated in this example.
GET /v1/dev/mcp-requests/{request_id}
Same fields as a list item — use this endpoint when you already have a request_id and need the full stored prompt and response.
Related
- Setup and keys — key format and security
- MCP reference — Memory MCP protocol
- Quotas and limits — what counts toward limits