Cacoo Remote MCP Server
Cacoo Remote MCP Server
Ein Remote-MCP-Server für die Cacoo API, bereitstellbar auf Cloudflare Workers, AWS Lambda, Google Cloud Run oder Azure Container Apps.
Anders als ein lokaler stdio-MCP-Server läuft dieser als gehosteter HTTP-Endpunkt: Sie authentifizieren sich einmal im Browser mit OAuth, und Ihr Cacoo-API-Schlüssel verlässt den Server nie.
Funktionen
14 MCP-Tools für Diagramme, Ordner, Organisationen und Kontoinformationen
OAuth 2.1 mit PKCE – Clients authentifizieren sich im Browser, kein API-Schlüssel auf dem Client
E-Mail-Zulassungsliste – Anwendungsbezogene Autorisierung auf der Ebene des vorgelagerten IdP
Mehrere Cacoo-Konten – Routen einzelner Aufrufe, mit einem schreibgeschützten Schutz pro Konto
Vier Bereitstellungsziele mit denselben Tool-Implementierungen
Related MCP server: AccelMCP
Bereitstellung wählen
Cloudflare | AWS | Google Cloud | Azure | |
Laufzeit | Workers (edge) | Lambda + API Gateway | Cloud Run | Container Apps |
MCP-Sitzung | Durable Objects | Stateless | Stateless | Stateless |
OAuth-Autorisierungsserver |
|
|
|
|
Vorgelagerter IdP | Cloudflare Access | Amazon Cognito | Google-Konto | Microsoft Entra ID |
Zustandsspeicher | Workers KV | DynamoDB (TTL) | Firestore (TTL) | Cosmos DB (TTL) |
Geheimnisse | Workers Secrets | Secrets Manager | Secret Manager | Voll Key Vault |
IaC | wrangler | AWS SAM | Terraform | Bicep |
Konfigurationsdatei |
|
|
|
|
Das Werkzeuge und ihr Verhalten sind auf allen identisch. Jede Plattform kann entweder Google Sign-In oder Microsoft Entra ID als vorgelagerten IdP verwenden. Die Tabelle zeigt die Standardeinstellung.
Architektur
Derselbe MCP-Server läuft auf vier Plattformen. Jeder Plattform-Subgraph enthält seinen
eigenes Verdrahtung – Gateway, Speicher und vorgelagerten IdP – und die Node-basierten
laufen durch teilt die Knoten-gehosteten in das gemeinsame src/oauth, das wiederum
src/core verwendet.
flowchart TB
subgraph clients["MCP clients"]
direction LR
CC["Claude Code<br/><i>native HTTP transport</i>"]
CD["Claude Desktop / Kiro / Cursor<br/><i>mcp-remote proxy</i>"]
end
subgraph cf["Cloudflare src/platforms/cloudflare"]
direction TB
CFW["Workers <i>OAuthProvider</i>"]
CFA["Cloudflare Access<br/><i>or Google / Entra ID</i>"]
CFKV["KV <i>OAUTH_KV</i>"]
CFDO["Durable Object<br/><i>CacooMCP session</i>"]
CFW -. "OIDC" .-> CFA
CFW --- CFKV
CFW --> CFDO
end
subgraph aws["AWS src/platforms/aws"]
direction TB
APIGW["API Gateway<br/><i>HTTP API + ACM + Route 53</i>"]
LAMBDA["Lambda <i>nodejs22 / arm64</i>"]
COG["Amazon Cognito"]
DDB["DynamoDB <i>OAuth state</i>"]
SM["Secrets Manager<br/><i>Cacoo API keys</i>"]
APIGW --> LAMBDA
LAMBDA -. "OIDC" .-> COG
LAMBDA --- DDB
LAMBDA --- SM
end
subgraph gcp["Google Cloud src/platforms/gcp"]
direction TB
RUN["Cloud Run <i>container</i>"]
GID["Google account"]
FS["Firestore <i>OAuth state</i>"]
GSM["Secret Manager"]
RUN -. "OIDC" .-> GID
RUN --- FS
RUN --- GSM
end
subgraph azure["Azure src/platforms/azure"]
direction TB
ACA["Container Apps <i>container</i>"]
ENT["Entra ID"]
COS["Cosmos DB <i>OAuth state</i>"]
AKV["Key Vault"]
ACA -. "OIDC" .-> ENT
ACA --- COS
ACA --- AKV
end
subgraph oauth["src/oauth shared by Node runtimes"]
OP["provider.ts <i>OAuth authorization server</i>"]
OS["store.ts <i>AuthStore interface</i>"]
OP --- OS
end
subgraph shared["src/core every runtime"]
CS["create-server.ts<br/><i>tool registration + email allowlist</i>"]
TOOLS["tools/ <i>14 MCP tools</i>"]
BC["cacoo-client.ts<br/><i>account routing + readOnly guard</i>"]
CS --> TOOLS --> BC
end
CACOO["Cacoo API <i>/api/v1</i>"]
clients == "Streamable HTTP + OAuth" ==> CFW
clients == "Streamable HTTP + OAuth" ==> APIGW
clients == "Streamable HTTP + OAuth" ==> RUN
clients == "Streamable HTTP + OAuth" ==> ACA
CFDO --> CS
LAMBDA --> OP
RUN --> OP
ACA --> OP
OP --> CS
DDB -. "implements AuthStore" .-> OS
FS -. "implements AuthStore" .-> OS
COS -. "implements AuthStore" .-> OS
BC == "per-account API key" ==> CACOOAnfragefluss
sequenceDiagram
autonumber
participant C as MCP client
participant S as Worker / Lambda / Container
participant I as Upstream IdP
participant K as Cacoo
C->>S: POST /mcp
S-->>C: 401 + OAuth metadata
C->>S: authorize
S->>I: redirect to upstream OIDC
I-->>S: callback with identity
Note over S: email allowlist check<br/>reject -> access_denied tool only
S-->>C: access token
C->>S: tools/list, tools/call
Note over S: resolve account -> pick API key<br/>readOnly guard blocks writes
S->>K: Cacoo REST API v1
K-->>S: JSON / PNG / XML
S-->>C: MCP resultDie Verschlüsselung passiert in zwei Schichten. Der vorgeldete IdP entscheidet, welche
der Benutzer sich anmelden darf, und die E-Mail-Zulassungsliste entscheidet, wer Werkzeuge erhält:
Ein Benutzer außerhalb der Zulassungsliste erhält einen Server, der nur
access_denied enthält. Das readOnly-Flag eines Kontos lehnt jede Nicht-GET-Anfrage
in der API-Client-Schicht ab, sodass es von einem einzelnen Tool auf keinem Weg umgangen werden kann.
Verzeichnisstruktur
Drei Ebenen, danachlässig, wie breit jede wiederverwendet werden kann:
src/
core/ Every runtime. Depends only on the MCP SDK and zod
cacoo-client.ts Cacoo API client (account routing + readOnly guard)
tools/ 14 MCP tools
create-server.ts MCP server assembly and authorization
oauth/ Node runtimes. OAuth authorization server (Express)
provider.ts OAuthServerProvider implementation
store.ts AuthStore interface — the persistence port
upstream.ts Upstream OIDC client
consent.ts Consent screen
app.ts Express app exposing /authorize, /token, /mcp, ...
platforms/
cloudflare/ Workers wiring (uses its own Workers OAuth provider)
aws/ Lambda wiring + DynamoDB / Secrets Manager adapters
gcp/ Cloud Run wiring + Firestore / Secret Manager adapters
azure/ Container Apps wiring + Cosmos DB / Key Vault adapters
infra/
aws/ SAM template and parameters
gcp/ Terraform configuration
azure/ Bicep template and parameterssrc/platforms/<name> ist der einzige Ort, an dem eine Cloud-SDK selbst vorkommt.
Eine Node-gehergehogene Platform hinzuzufügen bedeutet, eine AuthStore, eine
Geheimnisabfrage und einen Einstiegspunkt zu implementieren, der die Express-App in die
Laufzeit übergibt.
Konfiguration
Konten werden als ein einzelner JSON-String CACOO_ACCOUNTS_CONFIG soll konfiguriert.
Weitere Details: Cacoo-API-Schlüssel und Kontokonfiguration
zeigt, wie Sie einen Schlüssel ausstellen und Ihre organizationKey finden.
{
"accounts": [
{ "name": "main", "apiKey": "xxx", "organizationKey": "your-org-key" },
{ "name": "shared", "apiKey": "yyy", "readOnly": true }
],
"defaultAccount": "main"
}Feld | Bedeutung |
| Name, der vom |
| Cacoo-API-Schlüssel. Erzeugen Sie einen unter https://cacoo.com/profile/api |
| Standardorganisation für Diagramm- und Ordner-Werkzeuge. Erforderlich auf Nicht-Legacy-Plans; Tools können es pro Anruf überschreiben |
| Wenn |
| Standard: |
Verbindung von MCP-Clients
Claude Code
claude mcp add --transport http cacoo https://<your-domain>/mcp -s userClaude Desktop / Kiro / Cursor
{
"mcpServers": {
"cacoo": {
"command": "npx",
"args": ["mcp-remote", "https://<your-domain>/mcp"]
}
}
}Ein Frame Opens in der Browser bei der ersten Verbindung und fragt Sie nach Authentifizierung.
Claude Desktop (.mcpb-Bundle)
Statt des JOBS oben manuell zu bearbeiten, können Sie eine .mcpb-Datei (MCP Bundle)
per Doppelklick installieren. Sie wird beim Deployment erzeugt und nach dist/ geschrieben.
npm run mcpb:pack # generate on its own
npm run aws:deploy # generated as part of the deployDie Endpunkt-URL ist ein user_config-Feld, und die Domain, auf der Sie deployed haben, ist
als Standard eingebaut. Sie wird aus --host, MCP_HOSTNAME, ApiDomainName in
infra/aws/params.yaml oder MCP_HOSTNAME in .dev.vars in dieser Reihenfolge aufgelöst.
Das Bundle enthält den Server selbst nicht. MCPB ist ein lokal ausführbares Format,
Es liefert mcp-remote als stdio-Proxy, der sich mit Ihrem bereitgestellten Server verbindet.
Claude Code verwendet dieses Bundle nicht – es bleibt bei claude mcp add --transport http.
Verfügbare Tools
Diagramme
Tool | Beschreibung |
| listet Diagramme mit Filtern, Sortierung und Pagination auf |
| details eines Diagramms, einschließlich Blätter und Kommentare |
| erstellt ein neues leeres Diagramm |
| kopiert ein vorhandenesurvesarioDiagramm |
| verschiebt ein Diagramm in einen anderen Ordner |
| löscht ein Diagramm |
| PNG-Rendering eines Diagramms oder eines Blattstands |
| strukturierter Inhalt (Formen, Text, Linien) als XML |
Arbeitsbereich
Tool | Beschreibung |
| konfigurierte Konten, das Standardkonto und welche Schreibvorgänge erlauben |
| Ordner im Konto |
| Organisationen, einschließlich des |
| Profil des authentifizierten Kontos |
| Lizenz- bzw. Plandetails |
| öffentliches Profil eines Benutzers anhand eines Namens |
Synergie
Authentifizierung: OIDC 2.1 mit PKCE (S256) gegen einen vorgelagertischen IdP
Autorisierung:
ALLOWED_EMAILSbietet eine E-Mail-Zulassung auf Anwendungsebene. Wenn Sie leer ist, ist die Zulassungsliste deaktiviert, sodass alle, die sich über den vorgelagerten IdP anmelden, alle Tools erhaltenAPI-Schlüsselschutz: Cacoo-API-Schlüssel bleiben auf dem Server und werden nie an Clients gesendet
Zustimmung statt: Dynamic Client-Registrierung, daher Nutzerbestätigung hinter Konsens-Bildschirm mit Angabe des Clients und der Redirect-URL, mit CSRF-Schutz. Zustimmungen werden an
client_id+redirect_urigebundenSchreibschutz: Konten mit
readOnly: truereagieren jede Nicht-GET-Anfrage ab. Der Check liegt insrc/core/cacoo-client.ts; abhängig ist also nicht von einzel ToolsDependency-Abstand:
.npmrcsetztmin, so dass die Dependency-Auflösung die öffentlich für mindestens drei Tage gewesen, Versionen abzielt
Lokale Entwicklung
npm install
npm run type-check # all four platforms
npm test # 108 assertionsTest | Abgedeckt |
| URL-Aufbau, |
| alle 14 Tools registriert; Zulassungsliste-Gating |
| DCR, PKCE, Single-Use-Tokens, Scopes, Widerrufs |
| HTML-Escaping, signierte Cookies, CSRF, Genehmigungs-Gateway |
| Endpunktauflösung für Cognito / Google / Entra ID |
Die IaC kann provozial ohne Cloud-Credentials validiert werden:
npm run aws:validate # sam validate --lint
npm run gcp:validate # terraform validate
npm run azure:validate # az bicep buildCredits
Die Toolsdefinitionen wurden portiert von cacoo-mcp-server (lokal stdio). Die Remote-Server-Architektur wird mit backlog-remote-mcp-server geteilt.
Lizenz
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a standardized MCP interface for interacting with HTTP tools and services, enabling unified API access and management.MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server with HTTP/stdio support, a web admin panel for managing services, capabilities, and user permissions with Bearer token authentication, enabling relay and access control for MCP tools.
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI agents to read and write architecture-map projects and diagrams with per-project access controls via OAuth 2.1/PKCE.101ISC
- FlicenseNot gradedqualityCmaintenanceEnables managing car repair records through MCP tools, with OAuth authentication via Microsoft Entra ID.
Related MCP Connectors
34 production API tools over one hosted MCP endpoint.
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/midnight480/cacoo-remote-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server