Cacoo Remote MCP Server
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 인가 서버 |
|
|
|
|
업스트림 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 |
설정 파일 |
|
|
|
|
도구와 그 동작은 모든 플랫폼에서 동일합니다. 모든 플랫폼은 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 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는 누가 로그인할 수 있는지 결정하고, 이메일 허용 목록은 누가 도구를 받을지 결정합니다. 허용 목록에 없는 사용자에게는 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 parameterssrc/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 |
| 모든 도구 대상으로 사용되는 |
| Cacoo API 키. https://cacoo.com/profile/api에서 생성합니다 |
| 다이어그램과 폴더 도구의 기본 조직입니다. non-legacy 요금제에서 필수이며, 도구별로 호출에 재정의할 수 있습니다. |
| true면 모든 비-GET 요청이 거부됩니다. |
| 기본값은 |
MCP 클라이언트에서 연결
Claude Code
claude mcp add --transport http cacoo https://<your-domain>/mcp -s userClaude 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.yaml의 ApiDomainName, 또는 .dev.vars의 MCP_HOSTNAME 순서대로 결정됩니다(즉 순서대로 조회).
번들에는 서버 자체가 포함되지 않습니다. MCPB는 로컬 실행 형식이므로, 배포된 서버에 연결하는 mcp-remote를 stdio 프록시로 제공합니다. Claude Code는 이 번들을 사용하지 않고 claude mcp add --transport http를 그대로 사용합니다.
사용 가능한 도구
다이어그램
: 도구 | Description |
테이블 변환:
도구 | 설명 |
| 필터링, 정렬 및 페이징을 지원하는 다이어그램 목록 |
| 시트와 댓글을 포함한 한 다이어그램의 상세 정보 |
| 새 빈 다이어그램 만들기 |
| 기존 다이어그램 복사 |
| 다이어그램을 다른 폴더로 이동 |
| 다이어그램 삭제 |
| 다이어그램 또는 한 시트의 PNG 렌더링 |
| 형태, 텍스트, 선 등 구조적 내용을 XML로 반환 |
워크스페이스
도구 | 설명 |
| 구성된 계정, 기본 계정, 쓰기 허용 계정 목록 |
| 계정의 폴더 목록 |
|
|
| 인증된 계정의 프로필 |
| 라이선스/요금제 상세 정보 |
| 사용자 이름으로 공개 프로필 조회 |
보안
인증: 업스트림 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에 있어서 개별 도구에 의존하지 않습니다.의존성 국영:
.npmrc에min-release-age=3이 설정되어 있어 의존성 해결은 공개된 지 3일 이상 지난 패키지 버전만 고려합니다.
로컬 개발
npm install
npm run type-check # all four platforms
npm test # 108 assertions테스트 | 관련 내용 |
| URL 구성, |
| 14개 도구 등록, 허용 목록 차단 |
| DCR, PKCE, 일회용 토큰, 스코프, 폐기 |
| HTML 이스케이프, 서명된 쿠키, 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만든 사람
The tool definitions are ported from cacoo-mcp-server (로컬 stdio). The remote host architecture is built with backlog-remote-mcp-server.
라이선스
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