Skip to main content
Glama
midnight480

Cacoo Remote MCP Server

by midnight480

Удаленный 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-сервер авторизации

@cloudflare/workers-oauth-provider

src/oauth

src/oauth

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

Файл конфигурации

.dev.vars

infra/aws/params.yaml

infra/gcp/terraform.tfvars

infra/azure/params.json

Инструменты и их поведение идентичны на всех платформах. Каждая платформа может использовать либо 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 &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

Поток запросов

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 parameters

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

Поле

Значение

name

Имя, используемое аргументом account во всех инструментах

apiKey

Cacoo API-ключ. Сгенерируйте его на https://cacoo.com/profile/api

organizationKey

Организация по умолчанию для инструментов диаграмм и папок. Требуется на тарифах, не признанных устаревшими; инструменты могут переопределить его в запросе

readOnly

Если true, все запросы, кроме GET, отклоняются

baseUrl

По умолчанию https://cacoo.com

Подключение из 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"]
    }
  }
}

При первом подключении откроется браузер и попросит вас выполнить аутентификацию.

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 deploy

URL-адрес 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.

Доступные инструменты

Диаграммы

Инструмент

Описание

list_diagrams

Список диаграмм с фильтрацией, сортировкой и постраничным выводом

get_diagram

Информация об одной диаграмме, включая листы и комментарии

create_diagram

Создать новую пустую диаграмму

copy_diagram

Скопировать существующую диаграмму

move_diagram

Переместить диаграмму в другую папку

delete_diagram

Удалить диаграмму

get_diagram_image

PNG-рендеринг диаграммы или одного листа

get_diagram_contents

Структурированное содержимое (формы, текст, линии) в XML

Рабочее пространство

Инструмент

Описание

list_accounts

Настроенные аккаунты, применяемый по умолчанию и аккаунты с правом на запись

list_folders

Папки аккаунта

list_organizations

Организации, включая key, используемый как organizationKey

get_account

Профиль аутентифицированного аккаунта

get_license

Сведения о лицензии/плане

get_user

Публичный профиль пользователя по имени

Безопасность

  • Аутентификация: 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

Тест

Покрытие

npm run test:cacoo-client

Построение URL, разрешение organizationKey, защита readOnly, форматирование ошибок, лимит изображений 4 Мбайт

npm run test:tools

Регистрируются все 14 инструментов; запись через разрешенный лист

npm run test:oauth

DCR, PKCE, одноразовые токены, области видимости, отзыв

npm run test:oauth-consent

HTML-экранирование, подписанные cookie, CSRF, дверь согласия

npm run test:oauth-upstream

Определение конечных точек для 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.

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