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.
Chọn pattern
Phần tiêu đề “Chọn pattern”| Pattern | Làm gì | Cấu hình |
|---|---|---|
| Tắt MCP | Không server nào được nạp | managed-mcp.json với server map rỗng |
| Fixed deployment | Mọi user nhận cùng bộ server, không thêm được server khác | managed-mcp.json với server bạn muốn |
| Approved catalog | Publish danh sách server đã duyệt; user thêm server mình muốn, cái khác bị chặn | allowedMcpServers + allowManagedMcpServersOnly: true |
| Chỉ server từ plugin | Server chỉ đến từ plugin; user không tự thêm | strictPluginOnlyCustomization với mcp trong danh sách |
| Soft allowlist | Enforce allowlist mà user có thể mở rộng trong settings riêng | allowedMcpServers không kèm allowManagedMcpServersOnly |
| Chỉ denylist | Chặn server biết là xấu, cho phép mọi thứ khác | deniedMcpServers |
| Không giới hạn | User 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:
allowedMcpServersvàdeniedMcpServerscũ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.deniedMcpServersriê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 |
| Windows | C:\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" } } }}Authenticate bằng credential per-user
Phần tiêu đề “Authenticate bằng credential per-user”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
Xác thực cấu hình
Phần tiêu đề “Xác thực cấu hình”Kiểm tra file có hiệu lực bằng hai cách trên máy đã managed:
claude mcp listchỉ hiện server trongmanaged-mcp.jsonclaude mcp add --transport http test https://example.com/mcpthất bại với thông báoCannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers
Tắt MCP hoàn toàn
Phần tiêu đề “Tắt MCP hoàn toàn”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.
Kiểm soát theo policy: allowlist và denylist
Phần tiêu đề “Kiểm soát theo policy: allowlist và denylist”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 allowedMcpServers và allowManagedMcpServersOnly: 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.
Khớp server theo URL, command, hoặc name
Phần tiêu đề “Khớp server theo URL, command, hoặc name”| Key | Khớp | Dùng cho |
|---|---|---|
serverUrl | URL server từ xa, khớp chính xác hoặc wildcard * | Server HTTP và SSE |
serverCommand | Command và argument chính xác khởi động server stdio | Server stdio |
serverName | Label do user đặt. Chỉ khớp chính xác, không expand wildcard | Cả hai loại, nhưng xem cảnh báo dưới |
Server được đánh giá thế nào
Phần tiêu đề “Server được đánh giá thế nào”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ự:
- 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
- Kiểm tra denylist - server khớp bất kỳ entry denylist nào bị chặn, không gì override được
- 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ớpserverUrl, stdio khớpserverCommand)
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 allowManagedMcpServersOnly là true, 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.
Restriction hiện ra với user thế nào
Phần tiêu đề “Restriction hiện ra với user thế nào”| Restriction | User thấy gì |
|---|---|
managed-mcp.json tồn tại, user chạy claude mcp add | Cannot 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 add | Cannot add MCP server "<name>": server is explicitly blocked by enterprise policy |
Server không nằm trong allowlist, user chạy claude mcp add | Cannot add MCP server "<name>": not allowed by enterprise policy |
| Server đã cấu hình trước đó bị policy mới chặn | Server biến mất khỏi /mcp và claude 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.
Theo dõi MCP usage
Phần tiêu đề “Theo dõi MCP usage”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.
lượt xem