Pular para o conteúdo principal

Endpoints

Servidor MCP​

AmbienteURL
Produçãohttps://mcp.dunning.kobana.com.br
Sandboxhttps://mcp.dunning.sandbox.kobana.com.br

A URL do servidor é a raiz do host — é esse endereço inteiro que você cola num cliente MCP. Ela é também o resource identifier OAuth (o aud que o token precisa ter), e é por isso que não carrega caminho nenhum.

Rotas servidas​

MétodoCaminhoPara quê
POST/Uma mensagem JSON-RPC por requisição. Toda a superfície de tools, resources e prompts.
GET/.well-known/oauth-protected-resourceMetadata do recurso protegido (RFC 9728). Pública, sem autenticação, com Cache-Control: public, max-age=300.
GET/405 com Allow: POST — este servidor é stateless e não abre stream SSE.
DELETE/204 — não há sessão para encerrar.

Documentação e API​

URL
Documentaçãohttps://docs.dunning.com.br
API REST (produção)https://api.dunning.kobana.com.br
API REST (sandbox)https://api.dunning.sandbox.kobana.com.br

A referência da API está em API REST.

dica

Comece pelo sandbox. As tools destrutivas mandam mensagens a devedores, negativam e protestam de verdade — a primeira exploração não deve ser em produção.

:::info Host separado, de propósito O servidor MCP tem host próprio em vez de um caminho no host da API ou do app. São três razões: o documento de descoberta OAuth precisa morar na raiz do host; nenhum cookie de dashboard é enviado para esta origin, o que elimina por construção uma classe inteira de problemas de confused deputy; e o host da API tem uma política de borda desenhada para integrações servidor-a-servidor, não para um app de consumo. :::

Desenvolvimento local​

Em desenvolvimento o endpoint responde em /mcp no host do app (http://localhost:3028/mcp), e o documento de descoberta em http://localhost:3028/.well-known/oauth-protected-resource. Fora do desenvolvimento, chegar em /mcp por qualquer host que não seja mcp.dunning.* responde 404.

No host MCP, qualquer caminho que não seja o endpoint nem o documento de descoberta responde 404 em JSON, com qualquer método:

{ "error": { "code": "NOT_FOUND", "message": "Not found." } }