Skip to main content
Glama
midnight480

Cacoo Remote MCP Server

by midnight480

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.

Japanische Version hier

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

@cloudflare/workers-oauth-provider

src/oauth

src/oauth

src/oauth

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

.dev.vars

infra/aws/params.yaml

infra/gcp/terraform.tfvars

infra/azure/params.json

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 &nbsp;&nbsp; src/platforms/cloudflare"]
        direction TB
        CFW["Workers &nbsp;&nbsp; <i>OAuthProvider</i>"]
        CFA["Cloudflare Access<br/><i>or Google / Entra ID</i>"]
        CFKV["KV &nbsp;&nbsp; <i>OAUTH_KV</i>"]
        CFDO["Durable Object<br/><i>CacooMCP session</i>"]
        CFW -. "OIDC" .-> CFA
        CFW --- CFKV
        CFW --> CFDO
    end

    subgraph aws["AWS &nbsp;&nbsp; src/platforms/aws"]
        direction TB
        APIGW["API Gateway<br/><i>HTTP API + ACM + Route 53</i>"]
        LAMBDA["Lambda &nbsp;&nbsp; <i>nodejs22 / arm64</i>"]
        COG["Amazon Cognito"]
        DDB["DynamoDB &nbsp;&nbsp; <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 &nbsp;&nbsp; src/platforms/gcp"]
        direction TB
        RUN["Cloud Run &nbsp;&nbsp; <i>container</i>"]
        GID["Google account"]
        FS["Firestore &nbsp;&nbsp; <i>OAuth state</i>"]
        GSM["Secret Manager"]
        RUN -. "OIDC" .-> GID
        RUN --- FS
        RUN --- GSM
    end

    subgraph azure["Azure &nbsp;&nbsp; src/platforms/azure"]
        direction TB
        ACA["Container Apps &nbsp;&nbsp; <i>container</i>"]
        ENT["Entra ID"]
        COS["Cosmos DB &nbsp;&nbsp; <i>OAuth state</i>"]
        AKV["Key Vault"]
        ACA -. "OIDC" .-> ENT
        ACA --- COS
        ACA --- AKV
    end

    subgraph oauth["src/oauth &nbsp;&nbsp; shared by Node runtimes"]
        OP["provider.ts &nbsp;&nbsp; <i>OAuth authorization server</i>"]
        OS["store.ts &nbsp;&nbsp; <i>AuthStore interface</i>"]
        OP --- OS
    end

    subgraph shared["src/core &nbsp;&nbsp; every runtime"]
        CS["create-server.ts<br/><i>tool registration + email allowlist</i>"]
        TOOLS["tools/ &nbsp;&nbsp; <i>14 MCP tools</i>"]
        BC["cacoo-client.ts<br/><i>account routing + readOnly guard</i>"]
        CS --> TOOLS --> BC
    end

    CACOO["Cacoo API &nbsp;&nbsp; <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" ==> CACOO

Anfragefluss

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 result

Die 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 parameters

src/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

Name, der vom account-Argument in allen Tools verwendet wird

apiKey

Cacoo-API-Schlüssel. Erzeugen Sie einen unter https://cacoo.com/profile/api

organizationKey

Standardorganisation für Diagramm- und Ordner-Werkzeuge. Erforderlich auf Nicht-Legacy-Plans; Tools können es pro Anruf überschreiben

readOnly

Wenn true, wird jede Nicht-GET-Anfrage abgelehnt

baseUrl

Standard: https://cacoo.com

Verbindung von MCP-Clients

Claude Code

claude mcp add --transport http cacoo https://<your-domain>/mcp -s user

Claude 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 deploy

Die 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

list_diagrams

listet Diagramme mit Filtern, Sortierung und Pagination auf

get_diagram

details eines Diagramms, einschließlich Blätter und Kommentare

creat_diagram

erstellt ein neues leeres Diagramm

copy_diagram

kopiert ein vorhandenesurvesarioDiagramm

move_diagram

verschiebt ein Diagramm in einen anderen Ordner

delete_diagram

löscht ein Diagramm

get_diagram_image

PNG-Rendering eines Diagramms oder eines Blattstands

get_diagram_contents

strukturierter Inhalt (Formen, Text, Linien) als XML

Arbeitsbereich

Tool

Beschreibung

list_accounts

konfigurierte Konten, das Standardkonto und welche Schreibvorgänge erlauben

list_folders

Ordner im Konto

list_organizations

Organisationen, einschließlich des key als organizationKey

get_accounting

Profil des authentifizierten Kontos

get_license

Lizenz- bzw. Plandetails

get_user

öffentliches Profil eines Benutzers anhand eines Namens

Synergie

  • Authentifizierung: OIDC 2.1 mit PKCE (S256) gegen einen vorgelagertischen IdP

  • Autorisierung: ALLOWED_EMAILS bietet 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 erhalten

  • API-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_uri gebunden

  • Schreibschutz: Konten mit readOnly: true reagieren jede Nicht-GET-Anfrage ab. Der Check liegt in src/core/cacoo-client.ts; abhängig ist also nicht von einzel Tools

  • Dependency-Abstand: .npmrc setzt min, 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 assertions

Test

Abgedeckt

npm run test:cacclient

URL-Aufbau, organizationKey-Auflösung, readOnly-Guard, Fehlerformatierung, 4-MB-Bildbegrenzung

npm run test:tools

alle 14 Tools registriert; Zulassungsliste-Gating

npm run test:oauth

DCR, PKCE, Single-Use-Tokens, Scopes, Widerrufs

npm run test:oauth-consent

HTML-Escaping, signierte Cookies, CSRF, Genehmigungs-Gateway

npm run test:oauth-upstream

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 build

Credits

Die Toolsdefinitionen wurden portiert von cacoo-mcp-server (lokal stdio). Die Remote-Server-Architektur wird mit backlog-remote-mcp-server geteilt.

Lizenz

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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).

View all MCP Connectors

Latest Blog Posts

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