Management-API-MCP
Die Management API bietet einen MCP-Endpoint (Model Context Protocol), damit KI-Clients — Cursor, Claude Desktop und andere MCP-kompatible Tools — direkt auf die Daten Ihrer Organisation lesend und schreibend zugreifen können, ohne eine individuelle Integration. Es ist dieselbe Management API, die Sie bereits über REST nutzen: MCP ist ein zusätzlicher Transportweg auf demselben Dienst und stellt eine kuratierte Allowlist von Tools bereit statt jeder REST-Route.MCP ist additiv. Ihre bestehenden API-Schlüssel-Integrationen, Webhooks und REST-Aufrufe
bleiben davon vollständig unberührt — diese Seite betrifft nur das Verbinden eines
KI-Clients.
Verbinden
auth-Block von mcp.json ein statt eines Bearer-Tokens:
RXSCALE_MCP_CLIENT_ID in Ihrer Shell-Umgebung, statt die Client-ID wörtlich in
die Datei zu schreiben — Cursor interpoliert ${env:...} im auth-Block genauso wie in
headers. Setzen Sie scopes immer explizit auf die Liste der Berechtigungs-Strings (siehe
Berechtigungen), die Ihr RxScale-Kundenbetreuer für Ihren
Client bestätigt hat — fordern Sie nur an, was Ihre Nutzung des Clients tatsächlich braucht.
Dynamic Client Registration ist für diesen Rollout nicht aktiviert — die Client-ID oben
ist eine, die RxScale Ihrer Organisation zuweist, nicht eine, die Cursor spontan
registriert. Bevor die Anmeldung
überhaupt funktionieren kann, müssen zwei Dinge außerhalb dieser Konfiguration existieren:
Fragen Sie Ihren RxScale-Kundenbetreuer nach einer Client-ID, und lassen Sie ihn Cursors
feste OAuth-Redirect-URL(s) dagegen in Auth0 freischalten — Cursor dokumentiert feste
Callback-URLs pro Oberfläche, nicht eine einzige:
- Web und Cursor Agents:
https://www.cursor.com/agents/mcp/oauth/callback - Desktop-App:
http://localhost:8787/callback
Authentifizierung
Der MCP-Endpoint akzeptiert dieselben Anmeldeinformationen wie der Rest der Management API — siehe Authentifizierung für alle Details — mit einem wichtigen Unterschied: seine Bearer-Tokens werden für eine eigene OAuth-Audience ausgestellt, getrennt von der REST-API.
Ein für eine Audience ausgestelltes Token wird bei der jeweils anderen abgelehnt. Um ein Token
für die MCP-Audience anzufordern, wird derselbe OAuth-2.0-Client-Credentials-Grant verwendet,
der in Authentifizierung beschrieben ist, mit
audience gesetzt auf die eigene URL des MCP-Endpoints:
scope ist eine durch Leerzeichen getrennte Liste derselben Berechtigungs-Strings, die auch
bei REST verwendet werden (siehe Berechtigungen) —
fordern Sie nur an, was der aufrufende Client benötigt; die Tools des resultierenden Tokens
sind darauf beschränkt, genau wie bei den Berechtigungen eines API-Schlüssels.
API-Schlüssel (X-API-Key) funktionieren ebenfalls am MCP-Endpoint, mit denselben
Berechtigungen wie bei REST — nützlich für einen Client, der nur eine statische
Anmeldeinformation unterstützt.
Client-Kompatibilität (OAuth-Discovery)
Eine nicht authentifizierte Anfrage an den MCP-Endpoint liefert401 mit einem
WWW-Authenticate-Header, der auf das RFC-9728-Dokument
„Protected Resource Metadata” dieser Ressource verweist:
resource-Feld des Metadaten-Dokuments exakt der kanonischen URL des MCP-Endpoints selbst
entspricht — nicht der breiteren Management-API-Wurzel. Deshalb ist die MCP-Audience oben die
/mcp-URL und nicht https://api.rxscale.com/v1/management. Dieser Discovery-Ablauf bringt
einen Client nur bis zu dem Punkt, den Autorisierungsserver zu finden und die Anmeldung zu
starten; er hebt die oben unter Verbinden beschriebene Voraussetzung nicht auf
— RxScale muss weiterhin die Client-ID Ihrer Organisation bereitstellen und die exakte(n)
Redirect-URL(s) Ihres Clients in Auth0 registrieren, bevor diese Anmeldung gelingen kann.
Browser-basierte Clients und Origin-Freischaltung
Eine Anfrage mit einemOrigin-Header — den nur Browser senden — wird gegen die Allowlist
dieses Dienstes geprüft, bevor die Authentifizierung läuft. Ein Origin, der nicht auf der
Allowlist steht, wird sofort abgelehnt, mit 403 und ohne Versuch, Anmeldeinformationen zu
lesen:
curl oder einer
HTTP-Bibliothek — sendet niemals einen Origin-Header und ist von dieser Prüfung völlig
unberührt; sie existiert, um zu verhindern, dass eine Webseite diesen Endpoint über die
Cookies Ihres Browsers per DNS-Rebinding ansteuert — ein Angriff, der für einen
Nicht-Browser-Aufrufer irrelevant ist. Relevant ist dies nur, wenn Sie einen eigenen,
browser-basierten MCP-Client bauen — eine Web-App, die diesen Endpoint direkt aus
JavaScript in einer Seite heraus aufruft. Kontaktieren Sie in diesem Fall Ihren
RxScale-Kundenbetreuer mit dem genauen Origin (scheme://host[:port], z.B.
https://app.example.com), den Sie freigeschaltet haben möchten; er kann nicht vom Client
selbst hinzugefügt werden, und es gibt keine Selbstbedienungsmöglichkeit, einen zu
registrieren.
Verfügbare Tools
tools/list liefert stets nur die Tools, die die Berechtigungen Ihres Tokens erlauben —
dieselben EnumAPIKeyPermission-Scopes, die auch bei REST geprüft werden. Jedes Tool ruft
denselben Handler- und Serialisierungspfad wie sein REST-Äquivalent auf, sodass die beiden
Oberflächen für dieselben Daten nicht unterschiedliches JSON liefern können.
health_check erfordert weiterhin irgendeine gültige Anmeldeinformation — einen
API-Schlüssel oder ein Bearer-Token, das speziell für die MCP-Audience ausgestellt
wurde — auch wenn keine Berechtigung nötig ist. Ein für die REST-Audience ausgestelltes
Bearer-Token wird hier genauso abgelehnt wie bei jedem anderen Tool, da die MCP-Route gegen
MCP_API_AUDIENCE prüft, nicht gegen die REST-API_AUDIENCE (siehe
Authentifizierung oben). Das unterscheidet sich vom REST-Endpoint
GET /health, der überhaupt keine Authentifizierung erfordert: Jeder MCP-Aufruf,
einschließlich health_check, durchläuft zunächst die eigene Authentifizierung dieses
Endpoints, während /health bewusst offen bleibt, damit Infrastruktur ihn
unauthentifiziert prüfen kann.Nicht über MCP verfügbar
Nur die oben aufgeführten Tools existieren. Es gibt kein generisches „beliebigen REST-Endpoint aufrufen”-Tool, und das Hinzufügen eines neuen Tools ist eine bewusste Katalog-Änderung auf Seiten von RxScale — ein Tool erscheint nie nur, weil eine REST-Route existiert. Ausschließlich über REST verfügbare Management-API-Operationen. Diese Endpoints existieren und verhalten sich genau wie auf ihren eigenen REST-Referenzseiten dokumentiert; sie stehen in der aktuellen Version schlicht nicht auf der MCP-Allowlist:- Order Intake und Fulfillment — Bestellung erstellen, Bestellung aktualisieren, Fulfillment erstellen und Fulfillment abbrechen (Order Intake)
- Rezeptsignierung — Rezept-PDF rendern oder ein Rezept als extern signiert markieren
- Benachrichtigungs-Abonnements (Webhooks) — die gesamte
/notification-subscriptions/-Ressource: Auflisten, Erstellen, Entfernen und Test-Versand (Webhooks) - Warteraum — Registrieren, Statusabfrage oder Stornieren eines Warteraum-Eintrags (Warteraum)
- Listing-Request-Entscheidungen — Annehmen oder Ablehnen eines offenen Listing-Requests (Auflisten und Abrufen eines Listing-Requests sind über MCP verfügbar; nur die Annehmen-/Ablehnen-Aktionen sind ausschließlich über REST)
- Wallet-Pass-Verifizierung und Push-Benachrichtigungen (Auflisten von Vorlagen und Pässen ist über MCP verfügbar)
- Löschen eines Patientenprofilfeld-Werts
- Patienten-Intent-Status —
GET /patients/{patient_uid}/intent/{intent}(Auflisten und Abrufen eines Patienten per UID oder E-Mail sind über MCP verfügbar; dieser engere Abruf ist ausschließlich über REST verfügbar) - Erstellen und Widerrufen von Review-Links —
POST /review-linksundDELETE /review-links/{review_link_uid}(Auflisten von Review-Links ist über MCP verfügbar) - Blacklist von Apotheken-SKUs pro Arzt — die gesamte
/doctors/{uid}/blacklisted-skus-Ressource - Schreibende Terminverwaltungs-Operationen — Termin stornieren sowie sämtliches CRUD für Termintypen und Arzt-Verfügbarkeitsregeln/-ausnahmen (nur das Auflisten von Terminen und Termintypen ist über MCP verfügbar)
- Löschen eines Produkts oder eines Fragebogens
- Fragebogen-Autorenfunktionen (individuelles CSS, Datei-Assets, Archivierung, Duplizierung) — ausschließlich im Admin Tool
- Verschachtelte SKU-Attributgraphen über die auf Produkte dokumentierte Create/Patch-Form hinaus
- CSV-Exporte von Statistiken
- Referral-Scan- und Referral-Konversionsstatistiken
Ein Tool aufrufen
Der MCP-Endpoint verwendet JSON-RPC 2.0 über eine einzelnePOST-Route — kein separater
Handshake ist erforderlich. tools/call erwartet den Tool-name und dessen arguments,
passend zum inputSchema des Tools aus tools/list:
Ein erfolgreicher Aufruf
Zwei unterschiedliche Arten von Fehlern
MCP unterscheidet zwischen einer Anfrage, die der Server gar nicht erst versuchen konnte (ein Fehler auf Protokollebene, ein JSON-RPC-error), und einem Tool, das gelaufen ist
und selbst einen Fehler gemeldet hat (ein Ergebnis auf Fachebene). Dieser Endpoint
behält diese Unterscheidung bei, statt beide in dieselbe Form zu pressen:
Protokollebene — ein error auf oberster Ebene, kein result. Ein unbekannter
Tool-name, ein fehlender name, arguments, die kein Objekt sind, ein Argumentschlüssel,
den das inputSchema des Tools nicht kennt, oder Argumente, die die eigene
Schema-Validierung des Tools nicht bestehen, scheitern alle bevor das Tool läuft, mit
error.code -32602 (Invalid params):
method auf oberster Ebene, die dieser Endpoint überhaupt nicht unterstützt
(im Gegensatz zu einem Tool-Namen innerhalb von tools/call), scheitert ebenso, mit
error.code -32601 (Method not found).
Fachebene — ein normales result mit isError: true. Tool-Name und Argumente waren
gültig, und der Dispatch ist tatsächlich gelaufen — und das ist gescheitert: eine
Berechtigung, die dem Token fehlt, oder eine UID, die nicht existiert oder zu einer anderen
Organisation gehört. Das ist kein JSON-RPC-Fehler, sondern ein erfolgreicher RPC-Aufruf,
dessen Payload einen Fehlschlag meldet — genauso geformt wie das Erfolgsbeispiel oben, aber
mit isError: true, einer lesbaren Meldung in content und einem maschinenlesbaren
structuredContent.code:
structuredContent.code ist permission_denied, wenn dem Token die vom Tool benötigte
Berechtigung fehlt, oder not_found, wenn die UID nicht existiert oder zu einer anderen
Organisation gehört.
Auf diesem einen Endpoint werden zwei JSON-RPC-Protokollrevisionen unterstützt: eine
zustandslose, header-geroutete Form (
Mcp-Protocol-Version: 2026-07-28), die die meisten
aktuellen MCP-Clients verwenden, und die frühere initialize-Handshake-Form (2025-11-25).
Beide werden transparent behandelt — Ihr MCP-Client wählt die ihm bekannte Revision, eine
Konfiguration ist nicht erforderlich.Header für eigene und headless Clients
Ein interaktiver MCP-Client (Cursor, Claude Desktop) setzt diese automatisch; Sie brauchen sie nur zu kennen, wenn Sie einen eigenen Client gegen die zustandslose Revision2026-07-28 schreiben, statt einen fertigen Client zu verwenden:
Jeder dieser drei Header darf in der Base64-Sentinel-Form der MCP-Spezifikation gesendet
werden,
=?base64?<base64-des-werts>?=, statt als Klartext — erforderlich, wenn der Wert
nicht sicher als rohes ASCII-HTTP-Header-Feld übertragen werden kann. Der Server dekodiert
den Sentinel und vergleicht den dekodierten Wert mit dem JSON-RPC-Body; ein nicht
dekodierbarer Sentinel wird genauso abgelehnt wie ein widersprüchlicher Klartextwert.2026-07-28-Anfrage ohne Mcp-Method (oder bei tools/call ohne Mcp-Name) wird vor
dem Dispatch mit 400 und JSON-RPC-Fehlercode -32020 abgelehnt — auf dieser Revision sind
diese Header für das Routing tragend, keine optionalen Metadaten. Die Antwort trägt weiterhin
die eigene id der Anfrage (eine Header-Routing-Ablehnung ist keine Notification) und ein
data-Objekt, das den Header und den Wert nennt, gegen den verglichen wurde:
Mcp-Protocol-Version-Header, der eine von diesem Endpoint nicht unterstützte Version
nennt, wird mit 400 und JSON-RPC-Fehlercode -32022 abgelehnt, mit data.requested und
data.supported (der Liste aus Zwei JSON-RPC-Protokollrevisionen
oben), damit der Client mit einer unterstützten Version erneut versuchen kann:
Fehlerantworten
Ein Fehler auf Tool-Ebene (
permission_denied, not_found) ist immer 200 mit
result.isError: true — er wird nie zu einem HTTP-Fehlerstatus. Nur ein Fehler auf
Protokollebene (fehlerhaftes JSON-RPC, unbekannte Methode oder Tool, ungültige Argumente,
ein nicht erlaubter Origin, ungültige Anmeldeinformationen) ändert den HTTP-Status weg
von 200.