claude-code-ultimate-guide/examples/scripts/mcp-registry-template.yaml
Florian BRUNIAUX 77b48db01b docs(security): add enterprise AI governance guide + templates
New section for org-level Claude Code governance — fills the gap
between individual dev security (security-hardening.md) and what
engineering managers actually need when deploying at scale.

New files:
- guide/security/enterprise-governance.md (1117 lines)
  6 sections: local/shared split, usage charter, MCP approval
  workflow, 4 guardrail tiers (Starter/Standard/Strict/Regulated),
  policy enforcement at scale, SOC2/ISO27001 compliance guide
- examples/scripts/mcp-registry-template.yaml
  Org-level MCP registry with approved/pending/denied tracking
- examples/hooks/bash/governance-enforcement-hook.sh
  SessionStart hook validating MCPs against approved registry
- examples/scripts/ai-usage-charter-template.md
  Full charter template with data classification, use case rules,
  compliance mapping (SOC2/ISO27001/HIPAA/PCI DSS/GDPR)

Enriched sections:
- adoption-approaches.md: enterprise rollout (50+ devs) with
  3-phase approach and common mistakes
- observability.md: manager audit checklist, compliance reporting
- ai-traceability.md: evidence collection table for auditors
- production-safety.md + security-hardening.md: cross-references
  with explicit scope boundaries

Integration: guide/README.md, reference.yaml (22 new entries),
CHANGELOG.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 11:05:21 +01:00

138 lines
6.7 KiB
YAML

# MCP Registry Template
# Copy to: .claude/mcp-registry.yaml in your shared config repo
#
# Purpose: Track approved MCP servers, their scope, and review status.
# This is the org-level source of truth for permitted MCP usage.
#
# Related: guide/security/enterprise-governance.md §3.2
metadata:
organization: "[Your Organization Name]"
review_cycle: quarterly
last_reviewed: "YYYY-MM-DD"
next_review: "YYYY-MM-DD"
owner: "platform-team@company.com"
policy_doc: "https://your-wiki/ai-usage-charter"
# ─────────────────────────────────────────────────────────────────
# APPROVED MCPs
# ─────────────────────────────────────────────────────────────────
approved:
# Example: Read-only documentation lookup (LOW risk)
- name: context7
version: "1.2.3" # Pin exact version — never "latest"
source: "https://github.com/context7/mcp-server"
npm_package: "@context7/mcp-server"
approved_by: "john.doe@company.com"
approved_date: "2026-01-15"
expires: "2026-07-15" # 6 months default
data_scope: PUBLIC # PUBLIC | INTERNAL | CONFIDENTIAL | RESTRICTED
risk: LOW # LOW | MEDIUM | HIGH
rationale: "Read-only documentation lookup. No data egress, no credentials."
config:
command: npx
args: ["-y", "@context7/mcp-server@1.2.3"]
env: {}
# Example: Local reasoning (LOW risk)
- name: sequential-thinking
version: "0.6.2"
source: "https://github.com/modelcontextprotocol/servers"
npm_package: "@modelcontextprotocol/server-sequential-thinking"
approved_by: "jane.smith@company.com"
approved_date: "2026-01-15"
expires: "2026-07-15"
data_scope: INTERNAL
risk: LOW
rationale: "Local reasoning only. No network access, no file I/O beyond scratch."
config:
command: npx
args: ["-y", "@modelcontextprotocol/server-sequential-thinking@0.6.2"]
env: {}
# Example: Read-only internal database (MEDIUM risk, shorter expiry)
- name: internal-db-readonly
version: "2.1.0"
source: "internal" # "internal" for company-built MCPs
approved_by: "security@company.com"
approved_date: "2026-02-01"
expires: "2026-05-01" # Shorter expiry for higher risk
data_scope: CONFIDENTIAL
risk: MEDIUM
rationale: "Read-only replica. Allowlisted tables exclude PII, payments, audit."
restrictions:
- "Read-only database user only (no INSERT/UPDATE/DELETE)"
- "No access to: users, payments, audit_log, sessions tables"
- "Only connect to readonly replica, never primary"
config:
command: npx
args: ["-y", "@company/db-mcp@2.1.0"]
env:
DB_HOST: "readonly-replica.internal"
DB_USER: "claude_readonly"
# DB_PASS: loaded from secrets manager at runtime
# ─────────────────────────────────────────────────────────────────
# PENDING REVIEW
# ─────────────────────────────────────────────────────────────────
pending_review:
- name: github-mcp
requested_by: "dev@company.com"
requested_date: "2026-03-05"
source: "https://github.com/modelcontextprotocol/servers"
use_case: "Automated PR creation, issue management"
proposed_data_scope: INTERNAL
status: under_review # under_review | sandbox_trial | awaiting_security
reviewer: "jane.smith@company.com"
expected_decision: "2026-03-20"
notes: "Check GitHub token scope — should be limited to specific repos"
# ─────────────────────────────────────────────────────────────────
# DENIED
# ─────────────────────────────────────────────────────────────────
denied:
- name: browser-automation-mcp
denied_date: "2026-02-10"
requested_by: "dev2@company.com"
reason: >
Full browser automation with no scope restriction. Can navigate to arbitrary URLs,
exfiltrate data via screenshots, and access internal sites via authenticated sessions.
Risk too high without a sandboxed browser environment.
alternative: "Use Playwright MCP with restricted URL allowlist if browser access required."
- name: filesystem-mcp-unrestricted
denied_date: "2026-01-20"
requested_by: "dev3@company.com"
reason: >
Unrestricted filesystem access. CVE-2025-53109/53110 not patched in requested version.
Would allow sandbox escape via prefix bypass + symlinks.
alternative: "Use Claude Code's built-in Read/Write/Edit tools with permissions.deny rules."
# ─────────────────────────────────────────────────────────────────
# VERSION BUMP POLICY
# ─────────────────────────────────────────────────────────────────
version_bump_policy:
patch: # e.g., 1.2.3 → 1.2.4
requires: check_release_notes # Check for CVEs/breaking changes, then auto-approve
approver: tech_lead
turnaround: "48h"
minor: # e.g., 1.2.3 → 1.3.0
requires: full_security_review
approver: security_team
turnaround: "1 week"
major: # e.g., 1.2.3 → 2.0.0
requires: full_security_review + sandbox_trial
approver: security_team + engineering_director
turnaround: "2 weeks"
# ─────────────────────────────────────────────────────────────────
# SECURITY INCIDENT CONTACTS
# ─────────────────────────────────────────────────────────────────
incident_response:
report_to: "security@company.com"
slack: "#security-incidents"
response_time_sla: "4 hours business hours"
escalation: "engineering-director@company.com"