O Endpoint MCP Remoto
O servidor MCP é uma ferramenta de desenvolvedor: ele roda na sua máquina e
guarda uma chave de serviço ou uma chave de API. Um backend implantado também pode servir
o MCP por conta própria, em /mcp, para as pessoas que usam a sua aplicação. Um
assistente que uma delas conecta lê e grava no projeto como essa pessoa, e cada
chamada é executada sob a segurança em nível de linha dela.
Ele vem desligado, a menos que você o ative, e as duas variáveis são obrigatórias:
REBASE_MCP_ENABLED=trueREBASE_PUBLIC_URL=https://app.example.com # this deployment's real originSem REBASE_PUBLIC_URL, sem um segredo JWT, ou sem um driver de dados capaz de restringir
uma consulta a um único usuário, o endpoint se recusa a ser montado e diz o motivo no log
de inicialização. Nenhum REBASE_ROLE o ativa.
- OAuth, com uma tela de consentimento. Um cliente encontra o servidor de autorização
por meio de
/.well-known/oauth-protected-resource, registra-se (o registro dinâmico vem ativado por padrão;REBASE_MCP_OPEN_REGISTRATION=falseo limita aos clientes que você registrar) e leva a pessoa a uma tela de consentimento que a autentica pelo seu/auth/loginexistente. Uma conta com segundo fator recebe então o pedido do código do seu autenticador ou de um código de recuperação, pelas rotas/auth/mfa/challengeexistentes. A tela autentica apenas com senha: quem sempre usou só o Google, o GitHub ou um link por e-mail define uma primeiro com/auth/forgot-password(“Esqueci minha senha” do seu app), e a tela avisa isso. Ela também informa o host para o qual o código de autorização é enviado e diz que esse host não é verificado: qualquer pessoa pode registrar um cliente com qualquer nome, então o host é a parte que alguém pode conferir. - Oito ferramentas, três escopos. Os mesmos escopos
que toda credencial usa.
data:readoferecelist_collections,describe_collection,query_collection,count_documentseget_document;data:writeacrescentacreate_documenteupdate_document;data:deleteacrescentadelete_document. Um cliente que não pede nada recebedata:read. Cada um pode ser restrito a uma coleção:data:read:postslista, descreve e lêpostse nada além disso. Um escopo decide quais ferramentas são oferecidas e quais coleções elas alcançam, não quais linhas: uma lista vazia pode ser a RLS funcionando, edata:writecontinua sem poder gravar uma linha que a pessoa não poderia gravar. - Concessões feitas antes da 0.24 mantêm o seu alcance.
mcp:readé lido comodata:read, emcp:writecomodata:write data:delete, nas concessões armazenadas e nos tokens já emitidos. - Uma chave de API também funciona. O
/mcptambém aceitaAuthorization: Bearer rk_…, para um cliente configurado com um cabeçalho em vez de um fluxo OAuth. A chave alcança as ferramentas que os seus escoposdata:*cobrem, como quem quer que ela represente: uma chave pessoal como o seu dono, uma chave de serviço comoapi-key:<id>. - O vocabulário do SDK, as respostas da REST. As ferramentas recebem o que o SDK
recebe —
where({"status": ["==", "paid"]}),orderBy(["created_at", "desc"]ou"created_at:desc"),limit,offset,searchStringedatapara uma gravação — e leem pelo caminho deGET /api/data/<collection>, de modo que uma linha volta como a REST a serve (datas ISO, umbelongsTocomo a sua chave estrangeira, por exemploauthorId) e pode ser enviada de volta em uma atualização sem alterações.query_collectionresponde{ data, meta }commeta.totalemeta.hasMore, ecount_documentsresponde{ count }. Como na REST, são recusados umlimitacima de 1000, um argumento não declarado e a edição ou exclusão de uma linha que está na lixeira (404); definir o campo de exclusão lógica comonulla restaura.deleted: "only"(ou"include") emquery_collectionecount_documentslê a lixeira, como o?deleted=da REST, de modo que uma linha quedelete_documentenviou para a lixeira pode ser encontrada de novo para ser restaurada. A descrição dessa ferramenta diz ao modelo que a exclusão é permanente apenas onde a coleção não tem campo de exclusão lógica. - A listagem nomeia as coleções;
describe_collectionentrega o esquema de uma.list_collectionsresponde oname, otitlee odescriptionde cada coleção, edescribe_collection { collection }responde os esquemas OpenAPIrowecreatedessa coleção, além desoftDeleteFieldonde as linhas vão para uma lixeira. As descrições das ferramentas dizem ao modelo para descrever uma coleção antes de gravar nela. A listagem de um projeto com 200 coleções tem cerca de 5k tokens, e cada descrição menos de 1k; com todos os esquemas na listagem eram cerca de 150k. - Um token só para este endpoint. Um token de acesso MCP é recusado por
/api/data,/api/admine pelo WebSocket, então conectar um assistente não lhe entrega uma sessão.
Toda requisição ao /mcp relê a conta da pessoa. Uma conta excluída ou desativada, ou um
“sair em todos os lugares” ou uma troca de senha depois da emissão do token, interrompe
imediatamente um cliente conectado com um 401. Um rebaixamento vale a partir da próxima
chamada de ferramenta. Cada renovação faz as mesmas verificações e recusa essa concessão de
vez. Uma sessão de convidado não pode dar consentimento.
Um limite. Desconectar um cliente (DELETE /api/oauth/grants/:clientId, com a sessão da
própria pessoa) revoga os refresh tokens dele na hora, mas um token de acesso já emitido
continua funcionando até expirar, dentro de uma hora.
As rotas estão em Endpoints e as variáveis em Configuração.