前提:MCP 三連結の概要(まず接続、次に権限)。インストール手順はセットアップガイド(準備中)。5 分で要点だけは下の「よくある論点」へ。監査に使える全文はこのページ——MCP 権限の規範 v1.0であり、接続チュートリアルではありません。
よくある論点(検索用 · 章へジャンプ)
- Claude Code の MCP 権限はどう切る? →
~/.claude.json最小例 · コントロールプレーン · ポリシー表 - GitHub PAT を最小にするには? → GitHub MCP · PAT とスコープ
- CodeGraph MCP は読み取り専用にすべき? → CodeGraph 読み取り専用 · FAQ
- 本番に触れないようにするには? → API ステージング読み取り · 信頼境界 · チェックリスト
- 権限を絞ったのにエラーや挙動がおかしい? → 事故パス · 予定 MCP トラブルシュート(L4-Q07)
手順だけ欲しい場合は、予定の操作ガイド(L4-Q08)に任せ、この記事は設計レビュー向けの深さを維持します。
読み方(約 15 分 · 規範全文):よくある論点 → 一行モデル → システムモデル → 信頼境界とデータフロー → ポリシー表とコントロールプレーン → 設定例 → 攻撃チェーン。チーム SOP やセキュリティレビュー資料として引用できます。
一行でいうセキュリティモデル
MCP 権限の要は、Agent の「見える範囲」と「書き込める範囲」を分離し、既定を読み取り専用に寄せること。 書き込み・本番到達・CI 資格情報は信頼境界の外か、別プロファイルで明示的にだけ有効にします。
既定原則
インデックスとコンテキストは読み取り専用。書き込みは別 MCP / token / 環境に隔離。 コード変更はローカル git。本番 API と Runner 秘密は Claude の MCP 設定に入れない。
位置づけ:監査可能な規範
「よくある論点」が検索意図を章に結びつけます。ここからセキュリティアーキテクチャ規範です。接続確認は mcp__github__* の登録;権限確認は呼び出し時の到達面:パス、API、GitHub リソース、トークンスコープ。
Claude Code、CodeGraph、GitHub Runner を同じ Mac に載せる場合、MCP トークンと Runner 秘密は別管理。GitHub App 秘密鍵の共用や、本番 DATABASE_URL を Agent ワークスペースに置くのは禁止(リモート Mac は Cloud Mac vs ローカル Mac)。
第 1 層 · システムモデル
三連結 MCP は役割で三層に分かれ、それぞれ読み書きリスクの境界が異なります(全体像は MCP 概要):
Claude Code セッション
│
├─ GitHub MCP → intent (要件:issue / PR / コメント)
├─ CodeGraph MCP → context (変更箇所:impact / シンボル)
└─ API MCP → truth (検証:ステージングデータ / 契約)
リスク:intent の誤書き込みは協業面、context は索引汚染、truth は本番とステージングの混同。デプロイ:CodeGraph 5 分 は「グラフを使える状態」;本記事は「Agent から見てグラフと API は既定で読み取り専用」。系列 ① は アーキテクチャ、③ は予定の 脅威モデル(STRIDE)。
信頼境界
レビュー用の図:Agent セッションは内側、MCP は外部への唯一のゲートウェイ。本番、書き込み可能 FS、CI 資格情報への既定クロスは境界違反です。
┌─────────────────────────────────────────────────────────┐
│ ゾーン A · Claude Code(ユーザー / Agent) │
│ ┌────────────── MCP 層 ──────────────┐ │
│ │ GitHub(intent) → 協業システム │ │
│ │ CodeGraph(context)→ ローカル索引 │ │
│ │ API(truth) → ステージング DB │ │
│ └────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
▼ ▼ ▼
[ GitHub API ] [ .codegraph/ ] [ Staging API ]
禁止(既定で越えない):
✗ 本番 DB / 本番 API URL
✗ リポ全体への書き込み MCP
✗ Runner / CI トークンを mcpServers に
✗ .env.production · 隣接プロジェクトの秘密データフロー
権限はAgent → MCP → 外部のデータ移動と、どこで副作用が生まれるかの問題です。
プロンプト → Claude Code → MCP 呼び出し → 外部応答 → Agent 解釈 → 副作用(PR コメント / INSERT / 索引更新 / CI) 制御点: · 呼び出し前:読み取り専用 MCP / 最小スコープ · 応答注入前:PII マスク · 本番フィールド禁止 · 副作用前:書き込みサービス無効なら失敗すべき
典型的な権限事故
- GitHub MCP でコメント・ラベル変更 → コメント連動の bot / 自動マージが人の確認なしに pipeline を進める。
- CodeGraph または FS MCP がリポに書き込み →
.codegraph/汚染、codegraph_impactが信頼できない。 - API MCP がステージングに書き込み → 本番 mock と同名フィールドが PR 説明に混入。
- ワークスペースルートを丸ごと読む →
.env.productionや monorepo 隣接秘密がコンテキストに入る。
第 2 層 · 既定ポリシー(表の前に)
- セッションには読み取り専用 MCP のみ(
*-ro);書き込みは短命 token + 別サービス。 - CI / Runner は MCP 経由で露出しない。
- 本番は Agent から不可視:本番 URL・
DATABASE_URL・常駐 merge PAT なし。
ポリシー表(推奨既定)
| MCP / リソース | ロール | 既定 | Claude | CI / Runner | 本番 | よくある誤り |
|---|---|---|---|---|---|---|
| GitHub | intent | 読み取り PAT + issues;書き込みは短命 token |
可(RO サービス) | MCP 禁止;App / GITHUB_TOKEN |
本番ブランチ書き込み禁止 | repo 全権を ~/.claude.json に常駐 |
| CodeGraph | context | プロセス RO;query / impact のみ | 可 | 夜間索引再構築可 | — | リポ全体を MCP に書き込み可能 |
| API / DB | truth | ステージング RO;SELECT のみ | api-ro のみ |
テスト用 api-rw は分離 |
禁止 | 本番 URL をワークスペースに |
.env* |
— | MCP 非経由 | 全ツリー走査禁止 | Runner のみ | .env.production 禁止 |
monorepo ルート指定 |
| Runner 秘密 | — | mcpServers 外 |
禁止 | 可 | MCP と共用禁止 | App 秘密鍵の共用 |
コントロールプレーン
強制ポイント: 1. ~/.claude.json(静的スコープ · RO 既定) 2. OS / FS(リポと .codegraph/ の RO マウント) 3. GitHub PAT / App(細粒度 · 単一 repo · 期限付き書き込み) 4. CI(本番 URL ゲート · 秘密スキャン) 5. Runner ボールト(CI と MCP 環境変数の分離)
GitHub MCP · PAT
目的:issue を読み、コメントで引用できるが、マージ権限は常時 Agent に渡さない。
- 日常:
repo(private 読み取り)、issues、必要ならread:org。 - 自動化の書き込み:単一 repo の細粒度 PAT、Contents/Issues 書き込み、7–30 日で失効、使い終わったら
mcpServersから削除。
保存は環境変数(GITHUB_MCP_TOKEN)推奨。Cloud Mac はインスタンス secret、ローカルは Keychain / 1Password。
CodeGraph · 読み取り専用
codegraph init後、.codegraph/はビルド成果物扱い。- MCP プロセスはソース読み取り専用;再索引は CI / 手動。
codegraph_impactが空なら、まず索引と cwd を確認。書き込み権限は最後の手段。
大規模リポは CodeGraph と AI Coding Agent も参照。ポリシーは同じくグラフは RO。
API MCP · ステージング読み取り
- ベース URL はステージングのみ。
- DB は
SELECTのみ;書き込みはapi-staging-rwなど別名で、Claude では既定オフ。 - PII は MCP 層でマスク、生 JSON を issue に貼らない。
~/.claude.json 最小例
{
"mcpServers": {
"github-readonly": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_MCP_TOKEN_READONLY}"
}
},
"codegraph": {
"command": "codegraph",
"args": ["mcp"],
"env": { "CODEGRAPH_READ_ONLY": "1" }
}
}
}CODEGRAPH_READ_ONLY は示意。実装に無ければ OS の RO マウントで同等に。
リリース前チェック(要約)
- □ PAT は最小スコープで git に無いか
- □ 本番書き込み API MCP は無いか/既定オフか
- □ CodeGraph は impact/query のみか
- □ Cloud Mac の cwd は単一リポか
- □ Runner token と MCP token は分離か
- □ 権限変更時の参照先は本篇 + 概要 か
誤設定攻撃チェーン
1. 初期設定
- 単一
mcpServers:GitHub 書き込み + FS + CodeGraph 同居。 - CodeGraph が monorepo 根に書き込み;API は INSERT 可能。
2. トリガー
「issue #42 を直し PR 説明の repro を更新」→ GitHub → impact → API → FS。
3. 越境
- 隣接サブプロジェクトの設定変更。
.codegraph/破損。- ステージングへの INSERT が PR に混入。
- コメントで CI 自動起動。
5. 修復
- PAT 再発行(RO + 期限付き書き込み)。
- CodeGraph RO;再索引は Runner のみ。
api-ro/api-rw分離。
系列の関連記事
| 層 | ページ | qid | 予定 | 意図 |
|---|---|---|---|---|
| 1 | 権限規範(本記事) | L4-Q04 | ✅ | モデル · ポリシー |
| 2 | 権限の設定手順 | L4-Q08 | 6/11 | 5 分ガイド |
| 3 | トラブルシュート | L4-Q07 | 6/12 | エラー対応 |
| 拡張 | 脅威モデル | L4-Q05 | 6/10 | STRIDE |
Policy as Code
表の行を JSON 許可リスト、MCP DSL、CI ゲート(本番 URL / 全権 PAT 禁止)に落とし込む段階です。脅威モデル確定後に実行手順を分冊します。
FAQ
CodeGraph は読み取り専用にできる?
推奨。索引更新は CI / 手動のみ。
GitHub の書き込みは?
コメント程度なら可。merge / push は短命 token + 人の確認。
Runner 秘密と共用?
不可。露出面とローテーションが違う。
MCP が動かない?
問題対照表;権限は L4-Q07 予定ページへ。
ドキュメント情報
バージョン:AI Agent 権限規範 v1.0。系列:Cloud Mac AI Stack · L4。
| # | 文書 | 成果物 | 状態 |
|---|---|---|---|
| ① | アーキテクチャ | intent / context / truth | 概要 ✅ |
| ② | 権限 | ポリシー · フロー | 本記事 ✅ |
| ③ | 脅威モデル | STRIDE | 6/10 |
