MCP#
Endpoint do protocolo:
POST /v1/mcp(Streamable HTTP) · gestão em/v1/mcp/*(owner/admin)
O que é#
Um endpoint Model Context Protocol que expõe os produtos da sua conta como ferramentas tipadas (~54 tools) para Claude Code, Cursor e qualquer client MCP: perguntar à wiki, buscar nos vetores, rodar SQL governado, listar/assinar arquivos do storage, inspecionar o cache. O agente trabalha com seus dados — sem credencial de banco em prompt — e cada chamada passa por token com escopo, RBAC por usuário e SQL guard.
Conectar em 1 comando#
claude mcp add --transport http catcher-data \
https://data-api.catcher.one/v1/mcp \
--header "Authorization: Bearer ctc_mcp_SEU_TOKEN"
Qualquer client compatível funciona: a autenticação é Authorization: Bearer
com um token MCP (abaixo). Um 401 devolve o Protected Resource
Metadata (RFC 9728), então clients modernos descobrem sozinhos como
autenticar.
O manifest é o contrato#
curl -s https://data-api.catcher.one/v1/mcp/manifest -H "X-API-Key: ctc_…"
Retorna o endpoint, o connect_hint (o comando pronto acima), o catálogo de
scopes e a lista de tools — cada tool com name, scope exigido e
description. O Console (página MCP) mostra o mesmo catálogo.
Tokens MCP (PAT por usuário)#
Tokens do MCP são separados das API keys: prefixo ctc_mcp_, emitidos por
usuário, com escopos e TTL opcional.
KEY="X-API-Key: ctc_…" ; B=https://data-api.catcher.one ; JS='Content-Type: application/json'
# mintar (o segredo aparece UMA única vez)
curl -sX POST $B/v1/mcp/tokens -H "$KEY" -H "$JS" \
-d '{ "label": "claude-code", "scopes": ["wiki:read","vec:read","db:read"], "expires_in_days": 30 }'
# → { "id": 7, "token": "ctc_mcp_…", "scopes": [...], ... }
curl -s $B/v1/mcp/tokens -H "$KEY" # listar (label, last4, escopos, último uso, status)
curl -sX DELETE $B/v1/mcp/tokens/7 -H "$KEY" # revogar — efeito imediato
Escopos#
| Escopo | Libera |
|---|---|
wiki:read / wiki:write |
ask, search, get/list de páginas / upsert, delete, ingestão, refinery |
vec:read / vec:write |
busca e listagens / criar coleção, adicionar docs, ingerir |
db:read / db:write |
db_run_sql read-only / escrita (DDL continua sujeito ao guard) |
store:read / store:write |
listar, stat, URL assinada / upload, delete |
cache:read |
inspeção do cache |
Um token só enxerga as tools cujos escopos carrega — o resto nem aparece na listagem de tools daquele token.
RBAC por usuário (overrides)#
Além dos escopos do token, o owner/admin pode liberar ou bloquear um escopo para um usuário específico — e deny sempre vence:
curl -sX PUT $B/v1/mcp/grants -H "$KEY" -H "$JS" \
-d '{ "user_id": 12, "scope": "db:read", "effect": "deny" }'
curl -s "$B/v1/mcp/grants?user_id=12" -H "$KEY"
curl -sX DELETE "$B/v1/mcp/grants?user_id=12&scope=db:read" -H "$KEY"
Camadas de defesa#
- Escopo do token —
wiki:readnão escreve, nunca. - RBAC por usuário — deny vence allow; auditável no Console.
- SQL guard —
db_run_sqlnasce read-only; escrita/DDL são liberações explícitas;GRANT,REVOKEeCREATE USERsão bloqueados SEMPRE. - Isolamento de conta/tenant — o token carrega a empresa; ids forjados de outra conta resolvem 404 (validado pela suite de pentest, incluindo os fluxos do MCP).
Boas práticas#
- Um token por agente/ferramenta, com o menor conjunto de escopos que resolve — revogação cirúrgica quando precisar.
- Use TTL (
expires_in_days) para agentes experimentais. - Prefira
wiki_ask/vec_searchadb_run_sqlquando a pergunta é de conhecimento — resposta melhor, superfície menor. - O guia completo de tools por produto está nas páginas de cada módulo: Wiki · Vector · Database · Storage · Cache.