Skip to main content
Glama
midnight480

Cacoo Remote MCP Server

by midnight480

Cacoo Remote MCP Server

Un servidor MCP remoto para la API de Cacoo, que puede desplegarse en Cloudflare Workers, AWS Lambda, Google Cloud Run o Azure Container Apps.

A diferencia de un servidor MCP local con stdio, este se ejecuta como un endpoint HTTP alojado: te autenticas una sola vez en el navegador con OAuth, y tu clave de API de Cacoo nunca sale del servidor.

日本語版はこちら

Características

  • 14 herramientas MCP que cubren diagramas, carpetas, organizaciones e información de cuentas

  • OAuth 2.1 con PKCE — los clientes se autentican en el navegador; no hay clave de API en el cliente

  • Lista de permitidos por correo electrónico — autorización a nivel de aplicación sobre el IdP ascendente

  • Varias cuentas de Cacoo — enrutamiento por llamada, con una protección de solo lectura por cuenta

  • Cuatro destinos de despliegue que comparten las mismas implementaciones de herramientas

Related MCP server: AccelMCP

Elección de un despliegue

Cloudflare

AWS

Google Cloud

Azure

Runtime

Workers (edge)

Lambda + API Gateway

Cloud Run

Container Apps

Sesión MCP

Durable Objects

Sin estado

Sin estado

Sin estado

Servidor de autorización OAuth

@cloudflare/workers-oauth-provider

/src/oauth

/src/oauth

/src/oauth

IdP ascendente

Cloudflare Access

Amazon Cognito

Cuenta Google

Microsoft Entra ID

Almacenamiento de estado

Workers KV

DynamoDB (TTL)

Firestore (TTL)

Cosmos DB (TTL)

Secretos

Workers Secrets

Secrets Manager

Secret Manager

Key Vault

IaC

wrangler

AWS SAM

Terraform

Bicep

Archivo de configuración

.dev.vars

infra/aws/params.yaml

infra/gcp/terraform.tfvars

infra/azure/params.json

Las herramientas y su comportamiento de uso son idénticos en todas ellas. Todas las plataformas pueden usar Google o Microsoft Entra ID como IdP externo; la tabla muestra el valor que se usa por defecto.

Arquitectura

El mismo servidor MCP se ejecuta en las cuatro plataformas. Cada subgrafo de plataforma tiene su propio montaje interno (puerta de enlace, almacenamiento e IdP ascendente), y los basados en Node.js confluyen en el src/oauth/ compartido, que a su vez utiliza src/core.

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

Flujo de peticiones

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

La autorización se hace en dos líneas. La proveniente IdP decide quién puede iniciar sesión sos, y la lista de permitidos por correo electrónico decide quién recibe las herramientas: un usuario que no esté en la lista recibe un servidor que expone único access_denied. La marca readOnly de una cuenta rechaza toda petición que no sea GET en la capa de cliente de la API, por lo que un único herramienta no poquitún iba.

Organización de directorios

Tres líneas, según cuánto se pueda reutilizar una en cada una:

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/<nombre> es el único lugar donde aparece un SDK de las unidades. Añadir una plataforma alojada en Node.js significa implementar AuthStore, una búsqueda de secretos, así como un punto de entrada que transfiera de la aplicación Express al already time.

Configuración

Las cuentas se configuran como una sola cadena de texto JSON, CACOO_ACCOUNTS_CONFIG. Consulta Claves de API de Cacoo y configuración de cuentas para ver cómo obtener una clave y encontrar tu organizationKey.

{
  "accounts": [
    { "name": "main", "apiKey": "xxx", "organizationKey": "your-org-key" },
    { "name": "shared", "apiKey": "yyy", "readOnly": true }
  ],
  "defaultAccount": "main"
}

Campo

Significado

name

Nombre que usa el argumento account de todas las herramientas

apiKey

Clave de API Cacoo. Generar una el en https://cacoo.com/profile/api

organizationKey

Organización por defecto para herramientas de diagramas (enumeración herramientas de carpetas). Obligatorio en planes no obsoletos; las herramientas pueden sustituirlo por llamada

readOnly

Si es true, toda petición que no sea GET se rechaza

baseUrl

Por defecto, https://cacoo.com

Conexión desde clientes MCP

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"]
    }
  }
}

Solo el primer contacto abre un navegaate Ellen net.

Claude Desktop (.mcpb en paquete)

En lugar de editar manualmente el JSON anterior, puedes pulsar dos veces en .mcpb (un MCP Bundle) para installarlo. Se genera durante todas las expansiones y see guarda en dist/.

npm run mcpb:pack   # generate on its own
npm run aws:deploy  # generated as part of the deploy

La URL del endpoint es un campo user_config, tema inicial como valor por defecto el dominio que se usa para lanzar la solución, resuelto de --host, MCP_HOSTNAME, ApiDomainName en infra/aws/params.yaml, o MCP_HOSTNAME en .dev.vars, in ese order.

El paquete no contiene el servidor en sí. MCPB es un formato de ejecución local, así que incluye mcp-remote como proxy stdio connecting el servidor desplegado. Claude Code no usa este paquete — se limita a claude mcp add --transport http.

Herramientas disponibles

Diagramas

Herramienta

Descripción

list_diagrams

Lista diagramas con filtrado, ordenación y creación de página

get_diagrama

Detalles de un diagrama, con incluyendo hojas y comentarios

create_diagrama

Crea un diagrama vacío nuevo

copy_diagrama

Copia un diagrama existente

move_diagrama

Mueve un diagrama a otra carpeta

delete_diagrama

Elimina un diagrama

get_diagram_imagen

Generación de imagen PNG de un diagrama o de una hoja

get_diagram_contenido

Contenido estructurado (formas, texto, líneas) en XML

Espacio de trabajo

Herramienta

Descripción

list_accounts

Cuentas implantadas, la predeterminada y los limites de esos in writing

list_folders

Carpetas dentro de la cuenta

list_organizations

Organizaciones, incluyendo la key usada como organizationKey

get_account

Perfil del recurso autenticación activa

get_licencia

Detalles del licence/plan

get_user

Perfil público of a user por nombre

Seguridad

  • Autenticación: OAuth 2.1 con PKCE (S256) a través de un IdP externo

  • Autorización: ALLOWED_EMAILS provide an application-level email list. Dejarla vacía desactiva la lista, por lo que cualquiera que pueda authenticar accountability the IdP externo all tools

  • Protección de claves de la API: la API Cacoo llaves se queda en el servidor and never are sent to clients

  • Consentimiento del cliente: el Dynamic Client Registration está abierto a cualquier persona, por lo que la autorización se se ve limitada por una pantalla de consentimiento que mention the client and its redirect, with CSRF. La aprobación se base on client_id + redirect_uri

  • Guardado de escritura: las cuentas que tienen readOnly: true reject all Web not GET. La compt defaultse encuentra ensrc/core/cacoo-client.ts`, so it does not dépend on a given tool

  • Dependency cooldown: .npmrc set min-release-age=3, de modo que resolution of dependencies only considers packages versions that have been public at least for a tricycle days

Desarrollo local

npm install
npm run type-check   # all four platforms
npm test             # 108 assertions

Test

Recomendación sobre

npm run test:cacoo-client

URL of construction, organizationKey address resolve, readOnly follow-up object, error formatting, 4 MB image cap

npm run test:tools

All 14 initialized tools; window gate

npm run test:oauth

DCR, PKCE, tokens of the yoga time, scopes, revocaciones

npm run test:oauth-consent

HTML escape, signed cookies, CSRF, fraction of the approval

npm run test:oauth-upstream

Resolved endpoints for Cognito / Google / Azarana ID

IaC can be validated without access to the cloud:

npm run aws:validate     # sam validate --lint
npm run gcp:validate     # terraform validate
npm run azure:validate   # az bicep build

Reconocimientos

The tool para tool definitions have been transferred from cacoo-mcp-server (stdio store). El remote server architecture is shared con backlog-remote-mcp-server.

Licence

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