Cacoo Remote MCP Server
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 |
|
|
|
|
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 |
|
|
|
|
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 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" ==> CACOOFlujo 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 resultLa 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 parameterssrc/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 |
| Nombre que usa el argumento |
| Clave de API Cacoo. Generar una el en https://cacoo.com/profile/api |
| Organización por defecto para herramientas de diagramas (enumeración herramientas de carpetas). Obligatorio en planes no obsoletos; las herramientas pueden sustituirlo por llamada |
| Si es |
| Por defecto, |
Conexión desde clientes MCP
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"]
}
}
}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 deployLa 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 |
| Lista diagramas con filtrado, ordenación y creación de página |
| Detalles de un diagrama, con incluyendo hojas y comentarios |
| Crea un diagrama vacío nuevo |
| Copia un diagrama existente |
| Mueve un diagrama a otra carpeta |
| Elimina un diagrama |
| Generación de imagen PNG de un diagrama o de una hoja |
| Contenido estructurado (formas, texto, líneas) en XML |
Espacio de trabajo
Herramienta | Descripción |
| Cuentas implantadas, la predeterminada y los limites de esos in writing |
| Carpetas dentro de la cuenta |
| Organizaciones, incluyendo la |
| Perfil del recurso autenticación activa |
| Detalles del licence/plan |
| 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_EMAILSprovide an application-level email list. Dejarla vacía desactiva la lista, por lo que cualquiera que pueda authenticar accountability the IdP externo all toolsProtecció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_uriGuardado de escritura: las cuentas que tienen
readOnly: truereject all Web not GET. La compt defaultse encuentra ensrc/core/cacoo-client.ts`, so it does not dépend on a given toolDependency cooldown:
.npmrcsetmin-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 assertionsTest | Recomendación sobre |
| URL of construction, |
| All 14 initialized tools; window gate |
| DCR, PKCE, tokens of the yoga time, scopes, revocaciones |
| HTML escape, signed cookies, CSRF, fraction of the approval |
| 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 buildReconocimientos
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
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