Quickstart: direct HTTP MCP
Use this page when you are implementing an MCP client yourself instead of using an IDE bridge.
Prerequisites
- A ZITADEL bearer token accepted by InBlack.
- An InBlack tenant ID.
- An HTTP client that can send JSON-RPC POST requests.
Endpoint
https://ai-coo.inblack.app/mcpThe public MCP endpoint is stateless streamable HTTP. It accepts JSON-RPC POST requests only. Send Authorization on every request and, after organization selection, send X-Tenant-ID on every request.
Authorization: Bearer <zitadel-access-token>X-Tenant-ID: <tenant-id>Content-Type: application/jsonThe dedicated alias https://mcp.inblack.app/mcp is equivalent. Legacy /sse and /messages paths return 410 legacy_sse_retired.
Discover the manifest
curl https://ai-coo.inblack.app/mcp/manifest \ -H "Authorization: Bearer <zitadel-access-token>" \ -H "X-Tenant-ID: <tenant-id>"The manifest is filtered by the principal and tenant policy. It includes schema_version, canonical_catalog, surface, transport, auth, counts by kind and pillar, and a tools array with per-tool metadata.
Initialize
curl https://ai-coo.inblack.app/mcp \ -H "Authorization: Bearer <zitadel-access-token>" \ -H "X-Tenant-ID: <tenant-id>" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": { "tools": {} }, "clientInfo": { "name": "my-agent", "version": "0.1.0" } } }'List tools
curl https://ai-coo.inblack.app/mcp \ -H "Authorization: Bearer <zitadel-access-token>" \ -H "X-Tenant-ID: <tenant-id>" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }'The response contains only tools visible to the current surface, tenant policy, role, entitlements, AI COO scope, and persona.
Call a tool
curl https://ai-coo.inblack.app/mcp \ -H "Authorization: Bearer <zitadel-access-token>" \ -H "X-Tenant-ID: <tenant-id>" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "inblack_list_accounts", "arguments": { "limit": 5 } } }'Tool results are JSON-serialized in MCP content text. The underlying tool result includes a status, tier, summary, and optional data, warning, preview, pending_action_id, or error_code.
Select an organization first
If your client does not know the tenant ID yet, call bootstrap-visible organization tools first. When inblack_set_org succeeds, the Worker includes:
{ "next_request_headers": { "X-Tenant-ID": "tenant_..." }}Send that header on subsequent requests.
Internal surface
The internal surface is:
https://ai-coo.inblack.app/internal/mcpIt requires a service token or a ZITADEL token with inblack:mcp:internal, mcp:internal, or the mcp_internal role. It is for InBlack platform callers, not external customer code.