Cacoo Remote MCP Server
Удаленный MCP-сервер Cacoo
Удаленный MCP-сервер для Cacoo API, развертываемый на Cloudflare Workers, AWS Lambda, Google Cloud Run или Azure Container Apps.
В отличие от локального stdio MCP-сервера, этот работает как размещенный HTTP-эндпоинт: вы один раз проходите аутентификацию в браузере с помощью OAuth, и ваш Cacoo API-ключ никогда не покидает сервер.
Возможности
14 MCP-инструментов, покрывающих диаграммы, папки, организации и информацию об аккаунте
OAuth 2.1 с PKCE — клиенты аутентифицируются в браузере; API-ключ на клиенте не нужен
Список разрешенных email — авторизация на уровне приложения поверх вышестоящего IdP
Несколько Cacoo-аккаунтов — маршрутизация для каждого вызова с защитой «только чтение» для каждого аккаунта
Четыре цели развертывания, использующие одни и те же реализации инструментов
Related MCP server: AccelMCP
Выбор платформы развертывания
Cloudflare | AWS | Google Cloud | Azure | |
Среда выполнения | Workers (edge) | Lambda + API Gateway | Cloud Run | Container Apps |
MCP-сессия | Durable Objects | Без состояния | Без состояния | Без состояния |
OAuth-сервер авторизации |
|
|
|
|
Вышестоящий IdP | Cloudflare Access | Amazon Cognito | Google account | Microsoft Entra ID |
Хранение состояния | Workers KV | DynamoDB (TTL) | Firestore (TTL) | Cosmos DB (TTL) |
Секреты | Workers Secrets | Secrets Manager | Secret Manager | Key Vault |
IaC | wrangler | AWS SAM | Terraform | Bicep |
Файл конфигурации |
|
|
|
|
Инструменты и их поведение идентичны на всех платформах. Каждая платформа может использовать либо Google, либо Microsoft Entra ID в качестве вышестоящего IdP; в таблице показано значение по умолчанию.
Архитектура
Тот же MCP-сервер работает на четырех платформах. Каждый подграф платформы содержит собственную обвязку —
шлюз, хранилище и вышестоящий IdP — а платформы на Node.js сходятся в общем модуле
src/oauth, который в свою очередь использует 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" ==> CACOOПоток запросов
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Авторизация происходит в два уровня. Вышестоящий IdP решает, кто может войти, а список
разрешенных email решает, кто получает инструменты: пользователь, не входящий в список,
получает сервер, предоставляющий только набор access_denied. Флаг readOnly на аккаунте
отклоняет все запросы, кроме GET, в слое API-клиента, поэтому он не может быть обойден
отдельным инструментом.
Структура каталогов
Три уровня, по степени переиспользуемости:
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> — единственное место, где появляется облачный SDK. Добавление другой
Node-платформы означает реализацию AuthStore, просмотр секретов и точку входа,
которая передает Express-приложение среде выполнения.
Конфигурация
Аккаунты настраиваются как одна JSON-строка, CACOO_ACCOUNTS_CONFIG.
Смотрите Ключи Cacoo API и конфигурация профилей, чтобы узнать
о выпуске ключа и поиске своего organizationKey.
{
"accounts": [
{ "name": "main", "apiKey": "xxx", "organizationKey": "your-org-key" },
{ "name": "shared", "apiKey": "yyy", "readOnly": true }
],
"defaultAccount": "main"
}Поле | Значение |
| Имя, используемое аргументом |
| Cacoo API-ключ. Сгенерируйте его на https://cacoo.com/profile/api |
| Организация по умолчанию для инструментов диаграмм и папок. Требуется на тарифах, не признанных устаревшими; инструменты могут переопределить его в запросе |
| Если true, все запросы, кроме GET, отклоняются |
| По умолчанию |
Подключение из 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"]
}
}
}При первом подключении откроется браузер и попросит вас выполнить аутентификацию.
Claude Desktop (.mcpb-пакет)
Вместо ручного редактирования JSON выше можно дважды щелкнуть .mcpb (MCP Bundle), чтобы
установить его. Он создается во время развертывания и записывается в dist/.
npm run mcpb:pack # generate on its own
npm run aws:deploy # generated as part of the deployURL-адрес endpoint'а — это поле user_config, а домен, на который выполняется развертывание,
прописывается в нем как значение по умолчанию и формуется из --host, MCP_HOSTNAME,
ApiDomainName в infra/aws/params.yaml или MCP_HOSTNAME в .dev.vars в указанном порядке.
Пакет не содержит самого сервера. MCPB — это формат локального выполнения, поэтому
в него входит mcp-remote в качестве stdio-прокси, который подключается к вашему развернутому
серверу. Claude Code не использует этот пакет — он останавливается на claude mcp add --transport http.
Доступные инструменты
Диаграммы
Инструмент | Описание |
| Список диаграмм с фильтрацией, сортировкой и постраничным выводом |
| Информация об одной диаграмме, включая листы и комментарии |
| Создать новую пустую диаграмму |
| Скопировать существующую диаграмму |
| Переместить диаграмму в другую папку |
| Удалить диаграмму |
| PNG-рендеринг диаграммы или одного листа |
| Структурированное содержимое (формы, текст, линии) в XML |
Рабочее пространство
Инструмент | Описание |
| Настроенные аккаунты, применяемый по умолчанию и аккаунты с правом на запись |
| Папки аккаунта |
| Организации, включая |
| Профиль аутентифицированного аккаунта |
| Сведения о лицензии/плане |
| Публичный профиль пользователя по имени |
Безопасность
Аутентификация: OAuth 2.1 с PKCE (S256) через вышестоящий IdP
Авторизация:
ALLOWED_EMAILSзадает список разрешенных адресов на уровне приложения. Если оставить его пустым, весь список отключается, поэтому любой, кто может войти через вышестоящий IdP, получит доступ ко всем инструментамЗащита API-ключа: ключи Cacoo API остаются на сервере и никогда не отправляются клиентам
Согласие клиента: Dynamic Client Registration открыта для всех, поэтому авторизация ограничена экраном согласия, где указаны клиент и его адрес перенаправления, с защитой от CSRF. Подтверждения привязаны к
client_id+redirect_uriЗащита записи: аккаунты с
readOnly: trueотклоняют все запросы, кроме GET. Проверка находится вsrc/core/cacoo-client.ts, поэтому она не зависит от отдельных инструментовВладение зависимостями: в
.npmrcзадаетсяmin-release-age=3, поэтому при разрешении зависимостей учитываются только те версии паков, которые были опубликованы не менее трех дней назад
Локальная разработка
npm install
npm run type-check # all four platforms
npm test # 108 assertionsТест | Покрытие |
| Построение URL, разрешение |
| Регистрируются все 14 инструментов; запись через разрешенный лист |
| DCR, PKCE, одноразовые токены, области видимости, отзыв |
| HTML-экранирование, подписанные cookie, CSRF, дверь согласия |
| Определение конечных точек для Cognito / Google / Entra ID |
IaC можно проверить без облачных учетных данных:
npm run aws:validate # sam validate --lint
npm run gcp:validate # terraform validate
npm run azure:validate # az bicep buildБлагодарности
Определения инструментов перенесены из acoo-mcp-server (локальный stdio). Архитектура удаленного сервера общая с backlog-remote-mcp-server.
Лицензия
MIT License.
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