Der Remote-MCP-Endpunkt
Der MCP-Server ist ein Entwickler-Tool: Er läuft auf Ihrem Rechner und
hält einen Service-Key oder einen API-Key. Ein bereitgestelltes Backend kann MCP auch
selbst unter /mcp bereitstellen, für die Benutzer Ihrer Anwendung. Ein Assistent, den
einer von ihnen verbindet, liest und schreibt das Projekt als diese Person, und
jeder Aufruf läuft unter deren eigener Row-Level Security.
Der Endpunkt ist ausgeschaltet, solange Sie ihn nicht einschalten, und beide Variablen sind erforderlich:
REBASE_MCP_ENABLED=trueREBASE_PUBLIC_URL=https://app.example.com # this deployment's real originFehlt REBASE_PUBLIC_URL, ein JWT-Secret oder ein Daten-Treiber, der eine Abfrage auf
einen einzelnen Benutzer eingrenzen kann, wird der Endpunkt nicht eingebunden und nennt
den Grund im Boot-Log. Keine REBASE_ROLE schaltet ihn ein.
- OAuth, mit Zustimmungsbildschirm. Ein Client findet den Autorisierungsserver über
/.well-known/oauth-protected-resource, registriert sich selbst (die dynamische Registrierung ist standardmäßig aktiv;REBASE_MCP_OPEN_REGISTRATION=falsebeschränkt sie auf Clients, die Sie registrieren) und schickt die Person zu einem Zustimmungsbildschirm, der sie über Ihr bestehendes/auth/loginanmeldet. Ein Konto mit einem zweiten Faktor wird anschließend über die bestehenden/auth/mfa/challenge-Routen nach dem Code seiner Authenticator-App oder nach einem Wiederherstellungscode gefragt. Der Bildschirm meldet nur mit einem Passwort an: Wer bisher ausschließlich Google, GitHub oder einen E-Mail-Link verwendet hat, legt zuerst eines über/auth/forgot-passwordfest („Passwort vergessen“ in Ihrer App), und der Bildschirm sagt ihm das. Er nennt außerdem den Host, an den der Autorisierungscode gesendet wird, und weist darauf hin, dass dieser Host nicht verifiziert ist: Jeder darf einen Client unter einem beliebigen Namen registrieren, daher ist der Host der Teil, den eine Person überprüfen kann. - Acht Tools, drei Scopes. Dieselben Scopes, die
jedes Zugangsdatum verwendet.
data:readbietetlist_collections,describe_collection,query_collection,count_documentsundget_document;data:writefügtcreate_documentundupdate_documenthinzu;data:deletefügtdelete_documenthinzu. Ein Client, der nichts anfordert, erhältdata:read. Jeder davon lässt sich auf eine Collection eingrenzen:data:read:postslistet, beschreibt und liestpostsund sonst nichts. Ein Scope entscheidet, welche Tools angeboten werden und welche Collections sie erreichen, nicht welche Zeilen: Eine leere Liste kann bedeuten, dass RLS funktioniert, unddata:writekann dennoch keine Zeile schreiben, die die Person nicht schreiben könnte. - Vor 0.24 erteilte Berechtigungen behalten ihre Reichweite.
mcp:readwird alsdata:readgelesen undmcp:writealsdata:write data:delete, bei gespeicherten Berechtigungen ebenso wie bei bereits ausgestellten Tokens. - Ein API-Key funktioniert ebenfalls.
/mcpakzeptiert auchAuthorization: Bearer rk_…, für einen Client, der mit einem Header statt mit einem OAuth-Ablauf konfiguriert ist. Der Key erreicht die Tools, die seinedata:*-Scopes abdecken, als diejenige Identität, als die er handelt: ein persönlicher Key als sein Eigentümer, ein Service-Key alsapi-key:<id>. - Das Vokabular des SDK, die Antworten von REST. Die Tools nehmen entgegen, was das
SDK entgegennimmt –
where({"status": ["==", "paid"]}),orderBy(["created_at", "desc"]oder"created_at:desc"),limit,offset,searchStringunddatafür einen Schreibvorgang – und lesen über den Pfad vonGET /api/data/<collection>, sodass eine Zeile so zurückkommt, wie REST sie liefert (ISO-Datumsangaben, einebelongsTo-Relation als ihr Fremdschlüssel, z. B.authorId), und unverändert in einem Update zurückgesendet werden kann.query_collectionantwortet mit{ data, meta }samtmeta.totalundmeta.hasMore,count_documentsmit{ count }. Wie bei REST werden einlimitüber 1000, ein nicht deklariertes Argument und das Bearbeiten oder Löschen einer Zeile im Papierkorb (404) abgelehnt; wer das Soft-Delete-Feld aufnullsetzt, stellt sie wieder her.deleted: "only"(oder"include") beiquery_collectionundcount_documentsliest den Papierkorb, so wie?deleted=bei REST, sodass eine vondelete_documentin den Papierkorb verschobene Zeile wiedergefunden und wiederhergestellt werden kann. Die Beschreibung vondelete_documentsagt dem Modell nur dort, dass das Löschen endgültig ist, wo die Collection kein Soft-Delete-Feld hat. - Die Liste nennt die Collections;
describe_collectionliefert das Schema einer einzelnen.list_collectionsantwortet pro Collection mitname,titleunddescription, unddescribe_collection { collection }mit den OpenAPI-Schemasrowundcreatedieser Collection, dazusoftDeleteField, wo Zeilen in einen Papierkorb wandern. Die Tool-Beschreibungen weisen das Modell an, eine Collection zu beschreiben, bevor es in sie schreibt. Die Liste eines Projekts mit 200 Collections umfasst etwa 5k Tokens, jede Beschreibung unter 1k; mit allen Schemas in der Liste waren es etwa 150k. - Ein Token nur für diesen Endpunkt. Ein MCP-Access-Token wird von
/api/data,/api/adminund dem WebSocket abgelehnt, sodass das Verbinden eines Assistenten ihm keine Sitzung aushändigt.
Jede Anfrage an /mcp liest das Konto der Person neu ein. Ein gelöschtes oder
deaktiviertes Konto, oder ein „überall abmelden“ oder eine Passwortänderung nach der
Ausstellung des Tokens, stoppt einen verbundenen Client sofort mit einem 401. Eine
Herabstufung gilt für den nächsten Tool-Aufruf. Jede Erneuerung führt dieselben
Prüfungen durch und lehnt eine solche Berechtigung endgültig ab. Eine Gast-Sitzung kann
überhaupt nicht zustimmen.
Eine Einschränkung: Das Trennen eines Clients (DELETE /api/oauth/grants/:clientId, mit
der eigenen Sitzung der Person) widerruft dessen Refresh-Tokens sofort, aber ein bereits
ausgestelltes Access-Token funktioniert weiter, bis es abläuft, innerhalb einer Stunde.
Die Routen stehen im Endpunkt-Index und die Variablen unter Umgebung & Konfiguration.