Bỏ qua để đến nội dung

Kiểm soát MCP server cho tổ chức

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Mặc định, bất kỳ ai chạy Claude Code đều có thể kết nối bất kỳ MCP server nào họ chọn. Anthropic review connector theo tiêu chí listing riêng trước khi thêm vào Anthropic Directory, nhưng không security-audit hay quản lý bất kỳ MCP server nào. Với vai trò admin, bạn có thể giới hạn server nào chạy trong tổ chức - từ deploy một bộ cố định đã duyệt, đến tắt MCP hoàn toàn.

PatternLàm gìCấu hình
Tắt MCPKhông server nào được nạpmanaged-mcp.json với server map rỗng
Fixed deploymentMọi user nhận cùng bộ server, không thêm được server khácmanaged-mcp.json với server bạn muốn
Approved catalogPublish danh sách server đã duyệt; user thêm server mình muốn, cái khác bị chặnallowedMcpServers + allowManagedMcpServersOnly: true
Chỉ server từ pluginServer chỉ đến từ plugin; user không tự thêmstrictPluginOnlyCustomization với mcp trong danh sách
Soft allowlistEnforce allowlist mà user có thể mở rộng trong settings riêngallowedMcpServers không kèm allowManagedMcpServersOnly
Chỉ denylistChặn server biết là xấu, cho phép mọi thứ khácdeniedMcpServers
Không giới hạnUser thêm bất cứ gìKhông deploy managed MCP config

Kiểm soát tuyệt đối bằng managed-mcp.json

Phần tiêu đề “Kiểm soát tuyệt đối bằng managed-mcp.json”

Nếu deploy file managed-mcp.json, Claude Code chỉ nạp server file đó định nghĩa. User không thể thêm, sửa, hoặc dùng bất kỳ MCP server nào khác, kể cả server từ plugin. File này cũng ẩn claude.ai connector trừ khi bạn cho phép chúng cùng tồn tại với bộ managed.

Hai setting khác lọc thêm bộ managed:

  • allowedMcpServersdeniedMcpServers cũng áp dụng cho managed server - server managed không qua được các điều kiện này sẽ không nạp.
  • deniedMcpServers riêng của user gộp vào từ settings cá nhân, nên user có thể chặn một managed server cho riêng mình.

managed-mcp.json là file độc lập, không phân phối được qua server-managed settings - phải deploy qua device management tooling (Jamf, Group Policy, Intune, hoặc fleet management khác). Claude Code tìm file tại:

Nền tảngĐường dẫn
macOS/Library/Application Support/ClaudeCode/managed-mcp.json
Linux và WSL/etc/claude-code/managed-mcp.json
WindowsC:\Program Files\ClaudeCode\managed-mcp.json

Format giống file .mcp.json ở project scope:

{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"sentry": {
"type": "http",
"url": "https://mcp.sentry.dev/mcp"
},
"company-internal": {
"type": "stdio",
"command": "/usr/local/bin/company-mcp-server",
"args": ["--config", "/etc/company/mcp-config.json"],
"env": {
"COMPANY_API_URL": "https://internal.example.com"
}
}
}
}

Bất kỳ user nào trên máy đều đọc được file này, nên không lưu API key hay credential trong block env. Dùng thay:

  • Expansion ${VAR} để đọc secret từ môi trường của từng user
  • OAuth hoặc per-user header để mỗi user tự authenticate
  • headersHelper để sinh credential lúc kết nối

Kiểm tra file có hiệu lực bằng hai cách trên máy đã managed:

  1. claude mcp list chỉ hiện server trong managed-mcp.json
  2. claude mcp add --transport http test https://example.com/mcp thất bại với thông báo Cannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers

Deploy managed-mcp.json với server map rỗng:

{
"mcpServers": {}
}

User không thấy MCP server nào trong /mcp, và claude mcp add báo lỗi enterprise-policy như trên.

Cho phép claude.ai connector cùng với bộ managed

Phần tiêu đề “Cho phép claude.ai connector cùng với bộ managed”

Deploy managed-mcp.json mặc định ẩn claude.ai connector. Để nạp connector này song song với server trong managed-mcp.json, đặt "allowAllClaudeAiMcps": true trong một nguồn managed settings (yêu cầu Claude Code v2.1.149+). Setting này chỉ đọc được từ managed settings tier - đặt ở user/project settings không có tác dụng.

Allowlist và denylist lọc server nào được nạp - không phải registry: server vẫn phải được thêm bởi user, plugin, hoặc managed-mcp.json trước khi allowlist/denylist áp dụng.

Để allowlist mang tính quyết định, đặt allowedMcpServersallowManagedMcpServersOnly: true cùng nhau trong managed settings. Không có allowManagedMcpServersOnly, allowlist từ mọi nguồn gộp lại - user có thể tự mở rộng những gì allowlist của bạn cho phép. Denylist luôn gộp từ mọi nguồn bất kể setting này.

KeyKhớpDùng cho
serverUrlURL server từ xa, khớp chính xác hoặc wildcard *Server HTTP và SSE
serverCommandCommand và argument chính xác khởi động server stdioServer stdio
serverNameLabel do user đặt. Chỉ khớp chính xác, không expand wildcardCả hai loại, nhưng xem cảnh báo dưới

Trước khi nạp một server, kể cả server từ managed-mcp.json, Claude Code chạy ba bước theo thứ tự:

  1. Gộp danh sách - entry allowlist/denylist từ mọi nguồn settings gộp thành một allowlist và một denylist duy nhất
  2. Kiểm tra denylist - server khớp bất kỳ entry denylist nào bị chặn, không gì override được
  3. Kiểm tra allowlist - nếu không đặt allowedMcpServers ở đâu, mọi server qua được denylist đều nạp; nếu có đặt, phải khớp theo loại server (remote khớp serverUrl, stdio khớp serverCommand)

URL hỗ trợ wildcard * ở bất kỳ đâu, kể cả scheme. Matching hostname không phân biệt hoa thường.

Giới hạn allowlist chỉ dùng managed settings

Phần tiêu đề “Giới hạn allowlist chỉ dùng managed settings”
{
"allowManagedMcpServersOnly": true,
"allowedMcpServers": [
{ "serverUrl": "https://api.githubcopilot.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
]
}

Khi allowManagedMcpServersOnlytrue, allowlist từ user/project/local settings bị bỏ qua. Denylist vẫn gộp từ mọi nguồn, nên user luôn tự chặn được server cho riêng mình.

RestrictionUser thấy gì
managed-mcp.json tồn tại, user chạy claude mcp addCannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers
Server nằm trong denylist, user chạy claude mcp addCannot add MCP server "<name>": server is explicitly blocked by enterprise policy
Server không nằm trong allowlist, user chạy claude mcp addCannot add MCP server "<name>": not allowed by enterprise policy
Server đã cấu hình trước đó bị policy mới chặnServer biến mất khỏi /mcpclaude mcp list không cảnh báo gì

Ở trường hợp cuối, user không nhận được tín hiệu gì rằng policy là nguyên nhân - hãy chủ động thông báo cho user bị ảnh hưởng khi triển khai restriction mới.

Khi đã cấu hình OpenTelemetry export, Claude Code có thể ghi lại MCP server và tool nào user gọi. Đặt OTEL_LOG_TOOL_DETAILS=1 để bao gồm tên MCP server và tool trong tool event, rồi tổng hợp trong collector để biết user thực sự kết nối server nào.