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 ツール — 図、フォルダー、組織、アカウント情報をカバー
PKCE を使用した OAuth 2.1 — クライアントはブラウザで認証し、クライアント側に API キーは不要
メール許可リスト — アップストリーム IdP に重ねるアプリケーションレベルの認可
複数の Cacoo アカウント — 呼び出しごとにルーティングし、アカウントごとの読み取り専用ガードを備える
4 つのデプロイ先 — 同じツール実装を共有
Related MCP server: AccelMCP
デプロイ先の選択
Cloudflare | AWS | Google Cloud | Azure | |
ランタイム | Workers (エッジ) | Lambda + API Gateway | Cloud Run | Container Apps |
MCP セッション | Durable Objects | ステートレス | ステートレス | ステートレス |
OAuth 認可サーバー |
|
|
|
|
アップストリーム IdP | Cloudflare Access | Amazon Cognito | Google アカウント | Microsoft Entra ID |
状態ストレージ | Workers KV | DynamoDB (TTL) | Firestore (TTL) | Cosmos DB (TTL) |
シークレット | Workers Vaults Secrets | Secrets Manager | Secret Manager | Key Vault |
IaC | wrangler | AWS SAM | Terraform | Bicep |
設定ファイル |
|
|
|
|
ツールとその動作はすべてのプラットフォームで同じです。どのプラットフォームでも、アップストリーム IdP として Google または Microsoft Entra ID を使用できます。表に示されているのはデフォルトです。
アーキテクチャ
同じ MCP サーバーが 4 つのプラットフォームで動作します。各プラットフォームのサブグラフは、ゲートウェイ、ストレージ、アップストリーム IdP といった配線を独自に持ち、Node.js ベースのものは共有 src/oauth に合流し、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認証は2つのレイヤーで行われます。アップストリーム IdP が 誰 にサインインを許可し、メール許可リストが 誰にツールを与えるか を判定します。許可リストにないユーザーには access_denied だけを公開するサーバーが割り当てられます。アカウントの readOnly フラグは、API クライアント層で非 GET リクエストをすべて拒否するため、個々のツールからバイパスすることはできません。
ディレクトリ構成
再利用範囲に応じて3つのレイヤーに分けています:
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 キーとアカウント設定 を参照してください。
{
"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 バンドル)
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 はローカル実行形式であるため、デプロイ済みサーバーに接続する stdio プロキシとして mcp-remote の同梱しています。Claude Code はこのバンドルを利用せず、claude mcp add --transport http` のままです。
利用可能なツール
図
Tool | Description |
| フィルタリング、ソート、ページング付きの図一覧取得 |
| シートやコメントを含む単一の図の詳細取得 |
| 新しい空の図を作成 |
| 既存の図をコピー |
| 図を別のフォルダーへ移動 |
| 図を削除 |
| 図または 1 つのシートの PNG レンダリング |
| 構造化された内容(図形、テキスト、線)を XML で取得 |
ワークスペース
Tool | Description |
| 設定済みアカウント、既定のアカウント、書き込み可能なアカウント |
| アカウント内のフォルダー一覧 |
| 組織一覧。 |
| 認証済みアカウントのプロフィール |
| ライセンス・プランの詳細 |
| ユーザー名によるユーザーの公開プロフィール |
セキュリティ
認証: アップストリーム IdP に対する PKCE (S256) を使用した OAuth 2.1
認可:
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 エスケープ、署名済み 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クレジット
ツール定義は cacoo-mcp-server(ローカル stdio)から移植されています。 リモートサーバーのアーキテクチャは 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