Origin MCP
O Origin está em Early Beta e sujeito a alterações.
No momento, o servidor MCP do Origin está disponível apenas no Cursor e no Grok Bot. O suporte a outros harnesses de agentes chegará em breve.
O servidor MCP do Origin dá aos agentes acesso a repositórios e pull requests hospedados no Origin (origin.cursor.com). Ele abrange navegação e busca em repositórios, commits e branches, leituras e gravações de pull requests, revisões e comentários, rótulos, revisores e verificações. As ferramentas só enxergam repositórios hospedados no Origin, identificados pelo namespace Origin (owner) e pelo name do repositório. Um repositório espelhado no Origin é considerado hospedado nele.
Para conhecer cada ferramenta, com seus parâmetros, limites e campos de retorno, consulte a referência de ferramentas.
Endpoints
| URL | Ferramentas listadas |
|---|---|
https://api.origin.cursor.com/mcp | Todas as ferramentas que o chamador pode usar. |
https://api.origin.cursor.com/mcp/readonly | Somente ferramentas de leitura. Ferramentas de gravação ficam ocultas e são bloqueadas. |
Enviar o cabeçalho x-mcp-readonly: true para /mcp tem o mesmo efeito que chamar /mcp/readonly.
Transporte
O servidor se comunica via MCP por HTTP streamable sem estado:
- Envie cada mensagem JSON-RPC como um
POSTHTTP comContent-Type: application/json. Outros métodos retornam405, e outros tipos de conteúdo retornam415. - As respostas são JSON simples. O servidor não abre streams de server-sent events nem mantém sessões, então cada solicitação é independente.
- O servidor oferece suporte apenas ao recurso de ferramentas: sem resources, prompts ou sampling.
- As solicitações têm um limite de tamanho e um tempo limite. Uma solicitação que excede o tamanho máximo retorna
413.
Autenticação
Envie um bearer token no cabeçalho Authorization. O servidor aceita:
- uma sessão de usuário do Cursor, como a usada pelo app desktop, pela CLI e pelos agentes do Cursor;
- um token de acesso da instalação de um app Origin (
oit_…); - um JWT do app assinado por um app Origin;
- um token de usuário da instalação.
As ferramentas agem como o chamador autenticado. Cada chamada passa pelas mesmas verificações de permissão e pelos mesmos limites de taxa da solicitação equivalente na API Origin, ou seja, uma ferramenta só pode fazer o que o chamador conseguiria fazer pela API. A referência de ferramentas lista os escopos exigidos por cada ferramenta. Sessões de agente com escopo limitado não veem as ferramentas que seus escopos sempre recusariam.
Falhas de autenticação retornam 401 (credenciais ausentes ou inválidas), 403 (não permitido) ou 503 (não foi possível verificar as credenciais no momento).
Confirmação
Ferramentas destrutivas ou difíceis de desfazer, como fazer merge de um pull request ou descartar uma revisão, definem _meta["cursor/requiresConfirmation"]: true em tools/list. Os clients do Cursor exibem uma solicitação de aprovação antes de cada chamada a essas ferramentas. Outros clients MCP podem usar a mesma flag, ou a anotação padrão destructiveHint, para decidir quando pedir confirmação ao usuário.
Erros
Quando uma ferramenta falha, ela retorna um resultado comum de ferramenta MCP com isError: true. O conteúdo de texto é uma mensagem legível seguida de um ID de solicitação. O conteúdo estruturado é:
{ "data": { "category": "not_found", "message": "…", "requestId": "6e0d261c-86a2-4383-89f0-9162c1c10662", "retryAfterSeconds": 30, "rateLimit": { "limit": "…", "remaining": "…", "reset": "…" } }}category é um dos seguintes valores: not_found, forbidden, quota_exceeded, conflict, validation_error ou upstream_failure. retryAfterSeconds e rateLimit só aparecem quando a chamada atinge o limite de taxa. Inclua o ID da solicitação ao relatar um problema.
Ferramentas desconhecidas e parâmetros inválidos retornam erros JSON-RPC em vez de resultados da ferramenta.
Paginação
As ferramentas de listagem recebem pageSize e pageToken e retornam nextPageToken. Passe o nextPageToken retornado como pageToken para ler a próxima página; ele fica ausente na última página. Ferramentas que filtram uma lista, como list_pull_requests, exigem os mesmos filtros em todas as páginas.