mcpField
C
cambium (remote)

cambium (remote)

リモート
github.com/jarmstrong158メモリ・ナレッジ012 週間前に更新
リポジトリ

cambium (remote) について

cambium (remote)は、Cambiumで昇格したチームおよび組織の知識を読み取り専用で扱うCloudflare WorkerのMCPサーバーです。GitHub上の知識ファイルを検索でき、claude.aiのモバイル版にも対応します。

主な機能

  1. 01チームと組織の知識を検索
  2. 02自動、チーム、組織の範囲を選択
  3. 03設定と有効項目数を表示
  4. 04関連度が低い場合は回答を控える

活用シーン

  1. 01claude.aiのモバイル版から共有知識を検索
  2. 02ローカルCambiumなしでチームや組織の知識を検索
  3. 03Workerが参照できる知識範囲を確認

MCP 対応

読み取り専用の検索および状態確認ツールをMCPクライアントに提供します。知識の記録、推薦、昇格には対応しません。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://cambium-remote.{account}.workers.dev/mcp/{token}
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

cambium-remote

xylem スタックの一部です。

cambium の昇格済みナレッジを**claude.ai(モバイルを含む)**から呼び出せるようにする、読み取り専用の Cloudflare Worker MCP サーバーです。

ローカルの cambium はデスクトップの stdio サーバーです。チームナレッジは各プロジェクトリポジトリの cambium ブランチにあり、組織ナレッジは専用のナレッジリポジトリにあります。どちらも git 内の通常の knowledge.json ファイルです。この Worker は GitHub Contents API を通じてこれらのファイルを読み取り、その内容に対して recall() を提供します。これは、agentsync-remote が調整ボードに使用しているものと同じパターンです。

設計上、読み取り専用です。 recall と status を公開します。distill、endorse、promote は実行しません(これらは CAS 書き込み/一般化ゲートで、デスクトップ専用です)。また、ここでの recall は呼び出し回数を増やさないため、昇格に影響を与えることはありません。ローカル(個人用、未昇格)スコープはデスクトップ専用で、リモートからはアクセスできません。リモートで利用できるのは、昇格済みのチームおよび組織の階層のみです。

ツール

  • recall(query, scope?, limit?) — チームおよび組織のナレッジを検索します。scope: auto(デフォルト、チーム+組織)| team | org。ローカルの cambium と同様に、関連性がしきい値を下回る場合は no_confident_match で回答を控えます。
  • status() — Worker が読み取るように設定されている対象と、各スコープに含まれる有効な項目の数を示します。recall の結果が空に見える場合は、まずこれを呼び出してください。

⚠️ 信頼モデル — 組織に接続する前にお読みください

チームの「スコープ」は読み取り対象の選択であり、認可制御ではありません。 これは「どこを調べるか」に答えるもので、「誰が情報を伝えてよいか」に答えるものではありません。この Worker は、提供するナレッジの出所、署名、作成者を確認しません。

デフォルトの TEAM_SCOPE_MODE = "discover" モードでは、チームスコープのメンバーシップ判定は次のとおりです。

TEAM_OWNER が所有するこのリポジトリに、TEAM_BRANCH という名前のブランチがあるか?

許可リストも拒否リストもありません。 そのため、次のような問題が発生します。

  • TEAM_OWNER 配下のどのリポジトリに対しても cambium ブランチを push できる人は、誰でも組織全体の recall に情報を注入できます。小規模なリポジトリへの書き込み権限を持つ外部コントリビューター、侵害された CI トークン、削除し忘れたコラボレーターなどが該当します。その人の knowledge.json は、信頼できるチームナレッジとして読み込まれます。
  • その変更は5 分間の検出キャッシュ TTL 以内に有効になります。再デプロイも、レビューも、通知もありません。
  • recall() の出力は、エージェントが確立された事実として扱い、それに基づいて行動するような内容です。これは単なるデータ品質の問題ではなく、エージェントの挙動に対するインジェクション経路です。

このモードがデフォルトのままなのは、想定して構築された単独運用者のケースでは実際に安全であり、また、これを予告なく変更すると既存のデプロイでチームスコープが空になるためです。TEAM_OWNER 配下に push できる人があなただけである場合に限り、安全です。

TEAM_OWNER 配下に push できる人がほかにもいる場合は、strict モードを使用してください
TEAM_SCOPE_MODE = "allowlist"
TEAM_REPOS = "owner/repo-a,owner/repo-b"

この場合、チームスコープの対象は正確にそのリポジトリだけになります。検出スキャンは実行されず、TEAM_OWNER は完全に無視されるため、wrangler.toml に設定を残しても、後からスコープが予告なく広がることはありません。リポジトリの追加には、意図的な設定変更が必要になります。

status() は、現在有効なモデルを平易な言葉で出力します。デプロイの動作が不明な場合は、これを呼び出してください。

status() が意図的に表示しない情報

デフォルトでは、status() はチームリポジトリの数を返し、名前は返しません。discover モードでは、これらの名前は TEAM_OWNER が所有するすべてのリポジトリをスキャンした結果です。そのため、パスのトークンを持つ人なら誰でも、プライベートリポジトリの存在と名前を確認できます。その人には GitHub ID も、自分自身のリポジトリ権限もありません。件数を返せば、本来の診断上の問い(「チームスコープは何かを検出しているか?」)に答えられます。再表示を有効にするには、STATUS_DISCLOSE_REPOS = "true" を設定してください。allowlist モードでは、名前は常に表示されます。これは独自にコミットした設定であり、検出結果ではないためです。

GH_PAT は xylem スタックで最も強力な認証情報です

検出には、TEAM_OWNER 配下のすべてのリポジトリ(プライベートリポジトリを含む)で、Metadata: Read + Contents: Read が必要です。そのため、この Worker の PAT は agentsync-remote のもの(1つの調整リポジトリに限定)よりも大幅に強力です。対応を検討すべき影響が2つあります。

  • PAT のスコープをアカウント全体ではなく、一覧に記載されたリポジトリのみに限定できる allowlist モードを優先してください。
  • ここでの AUTH_TOKEN の漏えいは、同系列の他のものより深刻な問題として扱ってください。この Worker は呼び出し元に代わって、スコープ内のあらゆるリポジトリを読み取ります。

設定(wrangler.toml の vars)

var意味
ORG_REPO専用の組織ナレッジリポジトリの owner/name(デフォルトブランチの knowledge.json)。空欄の場合、組織の情報は取得されません。
TEAM_SCOPE_MODEdiscover(デフォルト)または allowlist。信頼に関する判断です。信頼モデルを参照してください。
TEAM_OWNERdiscover モードのみ。 チームリポジトリを自動検出する対象の所有者(ユーザー/組織)。その所有者のうち、TEAM_BRANCH があるすべてのリポジトリが読み取られます。空欄の場合、検出は行われません。allowlist モードでは無視されます。
TEAM_REPOSdiscover モード: 検出対象に追加する任意の owner/name リポジトリ。allowlist モード: チームスコープに含めるリポジトリの全一覧を、カンマ区切りで指定します。
TEAM_BRANCHチームスコープのブランチ(デフォルトは cambium)。
KNOWLEDGE_PATHファイル名(デフォルトは knowledge.json)。
STATUS_DISCLOSE_REPOS"true" にすると、status() がチームリポジトリの名前を一覧表示します。デフォルトでは無効です。検出された名前にはプライベートリポジトリが含まれることがあります。

discover モードでは、チームスコープは拡大し続ける集合です。新たにチーム昇格したリポジトリは、再デプロイなしで数分以内にモバイル上に表示されます。数分おきに行われる GraphQL スキャン(分離環境内にキャッシュされます)でリポジトリが一覧表示されます。ブランチがないリポジトリはスキップされます。

デプロイ

npm install
npm run typecheck && npm test
npx wrangler deploy
# then set the two secrets in the Cloudflare dashboard (never in the repo):
npx wrangler secret put AUTH_TOKEN   # the path-token credential; URL is /mcp/<AUTH_TOKEN>
npx wrangler secret put GH_PAT       # fine-grained GitHub token: Metadata: Read + Contents: Read across your repos
#                                    # (team scope is auto-discovered, so it needs to see all of TEAM_OWNER's repos)

その後、https://cambium-remote.<subdomain>.workers.dev/mcp/<AUTH_TOKEN> を claude.ai → Settings → Connectors でカスタムコネクターとして追加します。URL 全体が認証情報です。パスワードと同様に扱ってください。

🔒 認証 — コネクター URL は認証情報です

パストークン方式です。POST /mcp/<token> を受け付け、コンテンツと長さの両方に依存しない時間で AUTH_TOKEN シークレットと比較します。それ以外はすべて本文のない 404 を返します。同系列の Workers と同じ方式で、コードも同じもの(src/shared/mcp-core.ts)を使用しています。

トークンが URL パスに含まれる理由と、それに伴う代償

これは見落としではなく、意図的な設計上の選択です。claude.ai のカスタムコネクターはカスタムヘッダーを確実に送信できないため、明白な代替手段である Authorization: ヘッダーには依存できません。認証情報をパスに含めることで、コネクターが機能します。

ヘッダーの場合とは代償が異なるため、何が起こるかを明確にしておきましょう。

  • URL は、リクエスト本文には残らない場所にも記録されます。 ブラウザーの履歴、シェルの履歴、プロキシや CDN のアクセスログ、クラッシュレポート、バグレポート、スクリーンショット、「リンクをコピー」ボタン、そしてエージェントのセッショントランスクリプトです。このセクションを作成するきっかけとなった監査では、1 台のマシン上にあるローカルのセッショントランスクリプト 13 件で、これらの Worker のコネクター URL が約 54 件見つかりました。意図的に貼り付けられたものはなく、エージェントがそのまま出力したツール設定に含まれていただけでした。
  • Worker 自体はトークンをログに記録しません。 すべてのログ行では、ルートが /mcp/*** として記録されます。漏えいの可能性があるのは Worker の周辺すべてであり、まさに監査できない範囲です。
  • ここでの漏えいは、3 つの中で最も深刻です。 この Worker の GH_PAT は、TEAM_OWNER の下にあるすべてのリポジトリに及ぶためです(信頼モデルを参照)。

実用上のガイダンス:

  1. 疑わしい場合だけでなく、定期的にローテーションしてください。 管理下にない場所に URL が記録されていると想定しましょう。ローテーションは簡単です。AUTH_TOKEN を変更し、コネクターを更新してください。
  2. コネクターを設定しているマシンから、ターミナルの録画、トランスクリプト、画面キャプチャ、またはバグレポートを共有した場合は、直ちにローテーションしてください。
  3. 長くてランダムなトークン(32 バイト以上。例:openssl rand -hex 32)を使用してください。
  4. TEAM_SCOPE_MODE で許可される範囲内で、GH_PAT のスコープをできるだけ狭くしてください。
  5. ヘッダーまたは OAuth を使える機会があれば、必ず利用してください。このトレードオフはクライアントの制約によるものであり、望ましいものではありません。

開発

npm install
npm run typecheck
npm test

CI(.github/workflows/ci.yml)は、フォークを含むすべての push と PR で、型チェックとテストを実行します。.github/workflows/deploy.yml は、main が green の場合にのみ正規リポジトリをデプロイします。また、if: github.repository == … によって保護されているため、フォークが利用できないシークレットを使ってデプロイを試みることはありません。

ライセンス

MIT — LICENSE を参照してください。兄弟リポジトリである agentsync-remote と context-keeper-remote の Worker と同じライセンスです。

メンテナー向けの注意: この README には以前、PolyForm Noncommercial 1.0.0 と記載されていましたが、リポジトリにはLICENSE ファイルがありませんでした。両方の兄弟リポジトリに合わせて、MIT の LICENSE をここに追加しました。この Worker に PolyForm を適用する意図だった場合は、マージ前に LICENSE とこのセクションを置き換えてください。この不一致は以前からあったものであり、前提とせずに注意事項として記載しています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。