Skip to main content
Glama
midnight480

Cacoo Remote MCP Server

by midnight480

Cacoo Remote MCP Server

Cacoo API용 원격 MCP 서버로, Cloudflare Workers, AWS Lambda, Google Cloud Run 또는 Azure Container Apps에 배포할 수 있습니다.

로컬 stdio MCP 서버와 달리 이 서버는 호스팅된 HTTP 엔드포인트로 실행됩니다. 브라우저에서 OAuth로 한 번 인증하면 Cacoo API 키가 서버 밖으로 나가지 않습니다.

日本語版はこちら

기능

  • 14가지 MCP 도구 — 다이어그램, 폴더, 조직, 계정 정보를 다룹니다

  • OAuth 2.1 with PKCE — 브라우저에서 인증하고 클라이언트에는 API 키가 없습니다

  • 이메일 허용 목록 — 업스트림 IdP 위의 애플리케이션 수준 인가

  • 여러 Cacoo 계정 — 호출별 라우팅, 계정별 읽기 전용 가드

  • 네 가지 배포 대상 — 동일한 도구 구현을 공유합니다

Related MCP server: AccelMCP

배포 대상 선택

Cloudflare

AWS

Google Cloud

Azure

런타임

Workers (edge)

Lambda + API Gateway

Cloud Run

Container Apps

MCP 세션

Durable Objects

Stateless

Stateless

Stateless

OAuth 인가 서버

@cloudflare/workers-oauth-provider

src/oauth

src/oauth

src/oauth

업스트림 IdP

Cloudflare Access

Amazon Cognito

Google 계정

Microsoft Entra ID

상태 저장소

Workers KV

DynamoDB (TTL)

Firestore (TTL)

Cosmos DB (TTL)

비밀

Workers Secrets Manager

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 기반 플랫폼은 공통 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는 누가 로그인할 수 있는지 결정하고, 이메일 허용 목록은 누가 도구를 받을지 결정합니다. 허용 목록에 없는 사용자에게는 access_denied만 노출하는 서버가 제공됩니다. 계정의 readOnly 플래그는 API 클라이언트 계층에서 모든 비-GET 요청을 거부하므로 개별 도구로 우회할 수 없습니다.

디렉터리 구성

재사용 가능한 범위에 따른 세 계층입니다:

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으로 구성됩니다. 키를 발급하고 organizationKey를 찾는 방법은 Cacoo API keys 및 계정 구성 에서 확인하세요.

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

Field

Meaning

name

모든 도구 대상으로 사용되는 account 인수의 이름이다

apiKey

Cacoo API 키. https://cacoo.com/profile/api에서 생성합니다

organizationKey

다이어그램과 폴더 도구의 기본 조직입니다. non-legacy 요금제에서 필수이며, 도구별로 호출에 재정의할 수 있습니다.

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

{
  "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이 user_config 필드이며, 배포한 도메인은 기본값으로 내장되어 있습니다. 기본값은 --host, MCP_HOSTNAME, infra/aws/params.yamlApiDomainName, 또는 .dev.varsMCP_HOSTNAME 순서대로 결정됩니다(즉 순서대로 조회).

번들에는 서버 자체가 포함되지 않습니다. MCPB는 로컬 실행 형식이므로, 배포된 서버에 연결하는 mcp-remote를 stdio 프록시로 제공합니다. Claude Code는 이 번들을 사용하지 않고 claude mcp add --transport http를 그대로 사용합니다.

사용 가능한 도구

다이어그램

: 도구 | Description |

테이블 변환:

도구

설명

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

organizationKey 액세스로 사용되는 key를 포함한 조직 목록

get_account

인증된 계정의 프로필

get_license

라이선스/요금제 상세 정보

get_user

사용자 이름으로 공개 프로필 조회

보안

  • 인증: 업스트림 IdP 대상 OAuth 2.1 with PKCE (S256)

  • 인가: ALLOWED_EMAILS는 애플리케이션 수준의 이메일 허용 목록을 제공합니다. 이를 비워 두면 허용 목록이 비활성화되어 업스트림 IdP로 로그인할 수 있는 사람은 누구든 모든 도구를 사용할 수 있습니다.

  • API 키 보호: Cacoo API 키는 서버에 남아 있으며 절대 클라이언트로 전송되지 않습니다.

  • 클라이언트 동의: Dynamic Client Registration은 누구나 열려 있으므로, 인가는 클라이언트와 리다이렉트 대상을 명시하는 동의 화면과 CSRF 보호로 게팅됩니다. 승인은 client_id + redirect_uri를 기준으로 저장됩니다.

  • 쓰기 가드: readOnly: true로 표시된 계정은 모든 비-GET 요청을 거부합니다. 이 검사는 src/core/cacoo-client.ts에 있어서 개별 도구에 의존하지 않습니다.

  • 의존성 국영: .npmrcmin-release-age=3이 설정되어 있어 의존성 해결은 공개된 지 3일 이상 지난 패키지 버전만 고려합니다.

로컬 개발

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

테스트

관련 내용

npm run test:cacoo-client

URL 구성, organizationKey 확인, readOnly 가드, 오류 포맷, 4MB 이미지 제한

npm run test:tools

14개 도구 등록, 허용 목록 차단

npm run test:oauth

DCR, PKCE, 일회용 토큰, 스코프, 폐기

npm run test:oauth-consent

HTML 이스케이프, 서명된 쿠키, 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

만든 사람

The tool definitions are ported from cacoo-mcp-server (로컬 stdio). The remote host architecture is built with backlog-remote-mcp-server.

라이선스

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