Skip to main content
guidesSource-backed

Auditing MCP Client Configuration Before Team Rollout

Source-backed checklist for reviewing Claude Code MCP client configuration before a team rollout, covering scopes, transports, commands, secrets, allowlists, denylists, approvals, and rollback.

by YB0y·added 2026-06-10·
Review first review before installing

Open the source and read safety notes before installing.

Citation facts

Source-backed facts for citing this resource, derived directly from the registry — also available as plain text for AI assistants.

Source URLs
https://code.claude.com/docs/en/mcp, https://github.com/JSONbored/awesome-claude/blob/main/content/guides/auditing-mcp-client-configuration-before-team-rollout.mdx
Safety notes
Local stdio MCP servers execute commands with the user's privileges, so review the exact command, arguments, package runner, file paths, and network behavior before sharing a config., Remote MCP servers can expose model-controlled tools for production systems; require least-privilege scopes, explicit approval for write tools, and a rollback path before team rollout., Do not rely on server names alone for enforcement because names are user-assigned labels; use command or URL allowlist entries when policy must control what actually runs.
Privacy notes
MCP client configuration can reveal server URLs, internal hostnames, command paths, environment-variable names, header names, OAuth client IDs, and tool availability., Do not store API keys, bearer tokens, client secrets, tenant IDs, or personal credentials in shared `.mcp.json`, managed-mcp.json, PR bodies, issue comments, logs, or screenshots., Tool arguments, tool results, resources, prompts, logs, traces, and OAuth metadata can expose private repositories, tickets, databases, user identities, and workspace data.
Author
YB0y
Submitted by
YB0y
Claim status
unclaimed
Last verified
2026-06-10

Decision playbook

Review trust signals before you adopt

Signals are present but mixed. Use the checklist below to confirm the source and operational safety for your environment.

Compare context
Selected

0

Current score

63

Baseline

Delta

No baseline selected

No major trust-signal divergence detected in the current selection.

Source and provenance checks

Needs review

Confirm ownership and provenance before trusting install instructions.

  • Source link availableRequired

    Open the canonical repository and verify ownership.

    Done
  • Source provenance statusRequired

    Marked as source-backed.

    Done
  • Metadata reviewed

    No reviewed flag detected in metadata.

    Pending

Safety and privacy checks

Complete

Validate risk disclosures before installation or API wiring.

  • Safety notes presentRequired

    Review the listed safety guidance before running commands.

    Done
  • Privacy notes presentRequired

    Review data handling notes before connecting accounts or secrets.

    Done
  • Trust level risk gateRequired

    Trust level does not block evaluation.

    Done

Package and install checks

Needs review

Check package metadata and artifact integrity signals.

  • Install payload available

    Install or copy payload is available for review.

    Done
  • Package verification flag

    No package verification flag provided.

    Pending
  • Checksum metadata

    No checksum provided for downloaded artifact.

    Pending

Compare-driven decision checks

Needs review

Use compare context to validate trade-offs before adoption.

  • Compare tray has multiple entries

    Add at least one more entry to compare trust differences.

    Pending
  • Baseline comparison available

    No baseline peer selected yet.

    Pending
  • Diverging trust signals identified

    No major trust-signal divergence found.

    Pending

Setup at a glance

Copy & paste

Copy-ready — paste the snippet to get started.

Adoption plan

Balanced adoption plan

Current risk score 24/100. Use staged verification before broader rollout.

Risk 24

Pre-adoption checks

Validate source and review signals before any execution.

  • Confirm source provenanceRequired

    Source URL/provenance metadata is present.

    Done
  • Confirm metadata review state

    No review metadata found; increase manual validation.

    Pending
  • Verify install payload

    Install/config payload exists and can be inspected.

    Done

Security checks

Confirm safety, privacy, and package integrity signals.

  • Review safety notesRequired

    Safety notes are present.

    Done
  • Review privacy notesRequired

    Privacy notes are present.

    Done
  • Verify package integrity metadata

    No package verification/checksum metadata.

    Pending

Rollout

Adopt in controlled steps based on the selected plan.

  • Run in isolated sandbox firstRequired

    Use a constrained sandbox and observe behavior across multiple tasks.

    Pending
  • Roll out graduallyRequired

    Roll out to a small cohort before wider usage.

    Pending
  • Set monitoring and fallback

    Define rollback path and monitor errors after adoption.

    Pending

Evidence readiness

Evidence readiness matrix · balanced

Missing required evidence: Metadata review. Risk score 31.

Risk 31

Source provenance

Present

Source repository/provenance is listed.

Required in this preset

Metadata review

Missing

Review metadata is missing.

Required in this preset

Safety notes

Present

Safety notes are present.

Required in this preset

Privacy notes

Present

Privacy notes are present.

Optional in this preset

Package integrity

Missing

Package integrity metadata is missing.

Optional in this preset

Install payload

Present

Install payload is available.

Required in this preset

Required gaps: Metadata review

Decision timeline

Decision timeline · balanced

Blocking gaps: Check metadata review status. Risk 28.

Risk 28

triage

Confirm source provenanceRequired

Source/provenance metadata is available.

Done

triage

Check metadata review statusRequired

Review metadata is missing.

Pending

verify

Review safety notesRequired

Safety notes are available.

Done

verify

Review privacy notes

Privacy notes are available.

Done

verify

Validate package integrity metadata

Package integrity metadata is missing.

Pending

rollout

Verify install payload and commandsRequired

Install payload is available.

Done

Blockers: Check metadata review status

Prerequisite readiness

Prerequisite readiness

4 prerequisites to line up before setup. Have accounts and credentials ready first. Includes a review or approval gate.

0/4 ready
Account & credentials2Configuration1Review & approval1

Safety & privacy surface

Safety & privacy surface

3 safety and 3 privacy notes across 4 risk areas. Review closely: credentials & tokens, permissions & scopes, network access.

4 areas
  • SafetyNetwork accessLocal stdio MCP servers execute commands with the user's privileges, so review the exact command, arguments, package runner, file paths, and network behavior before sharing a config.
  • SafetyPermissions & scopesRemote MCP servers can expose model-controlled tools for production systems; require least-privilege scopes, explicit approval for write tools, and a rollback path before team rollout.
  • SafetyExecution & processesDo not rely on server names alone for enforcement because names are user-assigned labels; use command or URL allowlist entries when policy must control what actually runs.
  • PrivacyCredentials & tokensMCP client configuration can reveal server URLs, internal hostnames, command paths, environment-variable names, header names, OAuth client IDs, and tool availability.
  • PrivacyCredentials & tokensDo not store API keys, bearer tokens, client secrets, tenant IDs, or personal credentials in shared `.mcp.json`, managed-mcp.json, PR bodies, issue comments, logs, or screenshots.
  • PrivacyCredentials & tokensTool arguments, tool results, resources, prompts, logs, traces, and OAuth metadata can expose private repositories, tickets, databases, user identities, and workspace data.

Safety notes

  • Local stdio MCP servers execute commands with the user's privileges, so review the exact command, arguments, package runner, file paths, and network behavior before sharing a config.
  • Remote MCP servers can expose model-controlled tools for production systems; require least-privilege scopes, explicit approval for write tools, and a rollback path before team rollout.
  • Do not rely on server names alone for enforcement because names are user-assigned labels; use command or URL allowlist entries when policy must control what actually runs.

Privacy notes

  • MCP client configuration can reveal server URLs, internal hostnames, command paths, environment-variable names, header names, OAuth client IDs, and tool availability.
  • Do not store API keys, bearer tokens, client secrets, tenant IDs, or personal credentials in shared `.mcp.json`, managed-mcp.json, PR bodies, issue comments, logs, or screenshots.
  • Tool arguments, tool results, resources, prompts, logs, traces, and OAuth metadata can expose private repositories, tickets, databases, user identities, and workspace data.

Prerequisites

  • A draft `.mcp.json`, `~/.claude.json` entry, plugin-provided MCP server, claude.ai connector plan, or managed-mcp.json deployment to review.
  • The server documentation, package or repository source, expected transport, command or URL, environment variables, headers, OAuth behavior, and tool list.
  • A test machine or disposable Claude Code profile where the configuration can be loaded with non-production data.
  • A named owner who can approve the rollout, publish the final configuration, and revoke credentials or block servers if the rollout fails.

Schema details

Install type
copy
Reading time
9 min
Difficulty score
66
Troubleshooting
Yes
Breaking changes
No
Full copyable content
## TL;DR

Treat MCP client configuration as an execution and data-access boundary, not a
convenience file. Before a team rollout, inventory every configured server,
confirm where the entry is stored, inspect exact commands or URLs, separate
secrets from shared files, test with non-production data, and decide whether
the organization needs `managed-mcp.json`, `allowedMcpServers`, or
`deniedMcpServers` before users connect the servers.

## Prerequisites & Requirements

- [ ] {"task": "Configuration draft", "description": "The `.mcp.json`, local/user entry, plugin MCP entry, claude.ai connector plan, or managed-mcp.json file is available for review"}
- [ ] {"task": "Server evidence", "description": "Docs, source, package name, remote URL, transport, command, env vars, headers, OAuth behavior, and declared tools are known"}
- [ ] {"task": "Test profile", "description": "A reviewer can load the configuration outside production data and revoke any temporary credentials afterward"}
- [ ] {"task": "Policy owner", "description": "Someone owns allowlist, denylist, rollout messaging, rollback, and post-rollout monitoring"}

## What You Are Auditing

### Storage scope

Claude Code can load MCP servers from local, project, user, plugin, claude.ai,
and managed configuration sources. The scope decides who sees the server and
which entry wins when multiple sources define the same server.

- **Local scope:** stored in `~/.claude.json` for the current project only.
  Use it for personal experiments and credentials that should not be shared.
- **Project scope:** stored in `.mcp.json` in the project root. Treat this as
  team-visible because it is designed to be committed and reviewed.
- **User scope:** stored in `~/.claude.json` for all of one user's projects.
  It is private to that user but can still affect every repository they open.
- **Plugin scope:** bundled by a Claude Code plugin. Review the plugin
  manifest and plugin-provided `.mcp.json` with the same care as manual config.
- **claude.ai connector scope:** available when the user's Claude Code
  authentication method loads Claude.ai connectors.
- **Managed scope:** deployed as `managed-mcp.json` or enforced with managed
  `allowedMcpServers` and `deniedMcpServers` settings.

### Capability surface

MCP tools are model-callable functions. A client may discover tools and the
model may invoke them based on the prompt and context, so the review must cover
tool names, descriptions, input schemas, side effects, and human-approval
expectations. For team use, classify every server by the most sensitive action
it can perform, not by the friendly name in the config.

## Audit Workflow

1. **List every source that can load MCP servers.** Run `claude mcp list`,
   inspect the draft `.mcp.json`, check user-level entries, note plugin-provided
   servers, and confirm whether claude.ai connectors or managed configuration
   apply on the target machines.

2. **Record the effective server identity.** For each server, capture the
   configured name, transport, command or URL, package name, source repository,
   documentation URL, expected owner, and whether it is local, project, user,
   plugin, connector, or managed.

3. **Review transport choice.** Prefer remote HTTP for hosted cloud services
   that support it. Treat SSE as legacy when an HTTP option exists. Use stdio
   only when the server needs local filesystem, local process, or private
   network access, and then review the command as local code execution.

4. **Inspect exact commands and arguments.** For stdio servers, read the full
   `command`, `args`, package runner flags, absolute paths, shell wrappers,
   working-directory assumptions, update behavior, and any network or file
   access implied by the server. Avoid one-liners that hide extra scripts.

5. **Check remote URLs and redirects.** For HTTP, SSE, or WebSocket entries,
   verify the hostname, scheme, path, tenant variable, and redirect behavior.
   Do not approve internal-only endpoints or staging URLs for broad rollout
   unless that is the explicit deployment target.

6. **Separate secrets from shared configuration.** Shared project files and
   managed files should contain placeholders, environment-variable references,
   or per-user OAuth flows, not real bearer tokens, API keys, client secrets, or
   tenant-specific credentials.

7. **Map tools to permissions.** Ask what each tool can read, write, delete,
   trigger, deploy, message, or export. Require human approval and narrower
   credentials for tools with side effects.

8. **Decide enforcement before rollout.** If the team may only use approved
   servers, deploy URL and command allowlists. If the team needs a fixed server
   set, deploy `managed-mcp.json`. If one server is known-bad, add a denylist
   entry and communicate the expected user-facing result.

9. **Load in a test profile.** Start Claude Code with non-production
   credentials, run `/mcp`, check connection status, authenticate remote
   servers, call low-risk read tools, and confirm write tools still require the
   expected human review path.

10. **Document rollback.** Record how to remove the entry, revoke OAuth grants,
    rotate API keys, clear local approval choices, block the server through
    policy, and tell users what changed.

## Configuration Checklist

| Check | What to inspect | Rollout decision |
| --- | --- | --- |
| Scope | local, project, user, plugin, claude.ai, or managed source | Share only project or managed entries that were reviewed for all users |
| Precedence | duplicate names, duplicate endpoints, plugin overlap | Confirm the intended entry is the one Claude Code loads |
| Transport | stdio, HTTP, SSE, or WebSocket | Prefer the least-privilege transport that fits the server |
| Stdio command | executable, args, package runner, paths, startup behavior | Approve only commands that are exact, explainable, and pinned where practical |
| Remote URL | scheme, host, path, tenant variables, redirects | Approve only expected endpoints and avoid broad wildcard trust |
| Secrets | env, headers, OAuth, client IDs, client secrets | Use per-user credentials or environment expansion; never commit secrets |
| Tools | names, descriptions, inputs, side effects, result size | Require approval for write, delete, deploy, send, and export tools |
| Data exposure | resources, prompts, logs, traces, caches, tool output | Match rollout to data classification and retention expectations |
| Policy | allowlist, denylist, managed-mcp.json, plugin-only mode | Enforce with URL or command matches when server identity matters |
| Rollback | remove, revoke, rotate, block, communicate | Do not launch without a tested rollback owner and path |

## Safer Config Patterns

### Project configuration with placeholders

Use project-scoped `.mcp.json` only for values that are safe to share. Keep
machine-specific paths and credentials behind environment variables.

```json
{
  "mcpServers": {
    "internal-docs": {
      "type": "http",
      "url": "${INTERNAL_DOCS_MCP_URL}/mcp",
      "headers": {
        "Authorization": "Bearer ${INTERNAL_DOCS_MCP_TOKEN}"
      },
      "timeout": 60000
    }
  }
}
```

Before committing this pattern, confirm every required variable is documented
privately for the team and that missing variables fail closed rather than
falling back to a public or production endpoint by accident.

### Stdio configuration with an explicit command

For local servers, make the command easy to inspect. Avoid shell indirection
unless the wrapper is reviewed and pinned in the repository.

```json
{
  "mcpServers": {
    "repo-index": {
      "type": "stdio",
      "command": "node",
      "args": ["./tools/mcp/repo-index-server.js"],
      "env": {
        "REPO_INDEX_ROOT": "${CLAUDE_PROJECT_DIR:-.}"
      }
    }
  }
}
```

Review whether the server can read outside the repository, follow symlinks,
write indexes, open network connections, or log file contents.

### Managed allowlist with URL and command identity

When policy must restrict what can run, prefer URL and command matches over
server names. A name is only the user's label; the URL or command is closer to
the actual server identity.

```json
{
  "allowManagedMcpServersOnly": true,
  "allowedMcpServers": [
    { "serverUrl": "https://mcp.example.com/*" },
    { "serverCommand": ["node", "./tools/mcp/repo-index-server.js"] }
  ],
  "deniedMcpServers": [
    { "serverUrl": "https://*.staging.example.com/*" }
  ]
}
```

Test the policy on a managed machine with `claude mcp list` and with a blocked
`claude mcp add` command before announcing the rollout.

## Approval Gates

### Block rollout

Block the rollout when any of these are true:

- The command runs an unreviewed shell script, floating package, or installer.
- A shared file contains real secrets or user-specific tokens.
- The server can mutate production systems without scoped credentials or human
  approval.
- The provider cannot explain logs, retention, or data handling for sensitive
  prompts and tool results.
- Policy depends on `serverName` allowlist entries even though users can choose
  the name.
- The team cannot revoke credentials or disable the server quickly.

### Roll out with limits

Use a limited rollout when the server is useful but still has blast-radius risk:

- Start with local or user scope instead of project scope.
- Use read-only credentials and non-production data.
- Disable `alwaysLoad` unless the tools must be available on every turn.
- Restrict the server through an allowlist before broad team use.
- Ask users to authenticate individually through OAuth rather than sharing one
  service account.

### Approve team rollout

Approve only when the review can answer:

- Who maintains the server and where the code or service is documented?
- Which users, repositories, accounts, and data classes can it reach?
- Which tools can write, delete, send, deploy, or export data?
- Where are credentials stored and how are they revoked?
- Which policy prevents unreviewed variants from loading?
- How will support recognize a blocked server, failed auth flow, or rollback?

## Reviewer Output

Write the review in a format that another maintainer can audit later:

```md
## MCP configuration audit

- Server name:
- Source scope:
- Transport:
- Command or URL:
- Source and docs:
- Tools reviewed:
- Credentials and storage:
- Data classes exposed:
- Side-effect tools:
- Policy controls:
- Test result:
- Rollback path:
- Decision:
```

Keep tokens, callback URLs with sensitive state, tenant IDs, private hostnames,
and logs out of public PRs and issues. Use redacted placeholders when evidence
needs to be shared.

## Troubleshooting

### A project server is pending approval

Project-scoped `.mcp.json` entries require user approval before Claude Code uses
them. Ask reviewers to start Claude Code interactively, review the pending
server, and approve only after checking the command or URL.

### The wrong server loads

Check duplicate names and duplicate endpoints across local, project, user,
plugin, and claude.ai connector sources. Claude Code uses a precedence order,
and fields are not merged across scopes, so the loaded entry may not be the one
you edited.

### A remote server fails authentication

Use `/mcp` to inspect auth state. If a static `Authorization` header is present
and the server rejects it, remove the header when the intended flow is OAuth.
For managed or project rollout, prefer per-user auth over shared tokens.

### A managed policy blocks a server silently

Some policy changes make an existing server disappear from `/mcp` or
`claude mcp list` without a detailed local explanation. Tell users which
server was blocked, why, and what replacement command or connector to use.

### Tool output is too large

Large tool results consume context and can expose more data than intended.
Tune result size at the server, use narrower queries, and avoid raising output
limits globally unless the rollout owner accepts the context and privacy cost.

## References

- Claude Code MCP reference: https://code.claude.com/docs/en/mcp
- Claude Code MCP quickstart: https://code.claude.com/docs/en/mcp-quickstart
- Managed MCP configuration: https://code.claude.com/docs/en/managed-mcp
- MCP tools specification: https://modelcontextprotocol.io/specification/2025-06-18/server/tools
- MCP security best practices: https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices
- Google helpful content guidance: https://developers.google.com/search/docs/fundamentals/creating-helpful-content

About this resource

TL;DR

Treat MCP client configuration as an execution and data-access boundary, not a convenience file. Before a team rollout, inventory every configured server, confirm where the entry is stored, inspect exact commands or URLs, separate secrets from shared files, test with non-production data, and decide whether the organization needs managed-mcp.json, allowedMcpServers, or deniedMcpServers before users connect the servers.

Prerequisites & Requirements

  • {"task": "Configuration draft", "description": "The .mcp.json, local/user entry, plugin MCP entry, claude.ai connector plan, or managed-mcp.json file is available for review"}
  • {"task": "Server evidence", "description": "Docs, source, package name, remote URL, transport, command, env vars, headers, OAuth behavior, and declared tools are known"}
  • {"task": "Test profile", "description": "A reviewer can load the configuration outside production data and revoke any temporary credentials afterward"}
  • {"task": "Policy owner", "description": "Someone owns allowlist, denylist, rollout messaging, rollback, and post-rollout monitoring"}

What You Are Auditing

Storage scope

Claude Code can load MCP servers from local, project, user, plugin, claude.ai, and managed configuration sources. The scope decides who sees the server and which entry wins when multiple sources define the same server.

  • Local scope: stored in ~/.claude.json for the current project only. Use it for personal experiments and credentials that should not be shared.
  • Project scope: stored in .mcp.json in the project root. Treat this as team-visible because it is designed to be committed and reviewed.
  • User scope: stored in ~/.claude.json for all of one user's projects. It is private to that user but can still affect every repository they open.
  • Plugin scope: bundled by a Claude Code plugin. Review the plugin manifest and plugin-provided .mcp.json with the same care as manual config.
  • claude.ai connector scope: available when the user's Claude Code authentication method loads Claude.ai connectors.
  • Managed scope: deployed as managed-mcp.json or enforced with managed allowedMcpServers and deniedMcpServers settings.

Capability surface

MCP tools are model-callable functions. A client may discover tools and the model may invoke them based on the prompt and context, so the review must cover tool names, descriptions, input schemas, side effects, and human-approval expectations. For team use, classify every server by the most sensitive action it can perform, not by the friendly name in the config.

Audit Workflow

  1. List every source that can load MCP servers. Run claude mcp list, inspect the draft .mcp.json, check user-level entries, note plugin-provided servers, and confirm whether claude.ai connectors or managed configuration apply on the target machines.

  2. Record the effective server identity. For each server, capture the configured name, transport, command or URL, package name, source repository, documentation URL, expected owner, and whether it is local, project, user, plugin, connector, or managed.

  3. Review transport choice. Prefer remote HTTP for hosted cloud services that support it. Treat SSE as legacy when an HTTP option exists. Use stdio only when the server needs local filesystem, local process, or private network access, and then review the command as local code execution.

  4. Inspect exact commands and arguments. For stdio servers, read the full command, args, package runner flags, absolute paths, shell wrappers, working-directory assumptions, update behavior, and any network or file access implied by the server. Avoid one-liners that hide extra scripts.

  5. Check remote URLs and redirects. For HTTP, SSE, or WebSocket entries, verify the hostname, scheme, path, tenant variable, and redirect behavior. Do not approve internal-only endpoints or staging URLs for broad rollout unless that is the explicit deployment target.

  6. Separate secrets from shared configuration. Shared project files and managed files should contain placeholders, environment-variable references, or per-user OAuth flows, not real bearer tokens, API keys, client secrets, or tenant-specific credentials.

  7. Map tools to permissions. Ask what each tool can read, write, delete, trigger, deploy, message, or export. Require human approval and narrower credentials for tools with side effects.

  8. Decide enforcement before rollout. If the team may only use approved servers, deploy URL and command allowlists. If the team needs a fixed server set, deploy managed-mcp.json. If one server is known-bad, add a denylist entry and communicate the expected user-facing result.

  9. Load in a test profile. Start Claude Code with non-production credentials, run /mcp, check connection status, authenticate remote servers, call low-risk read tools, and confirm write tools still require the expected human review path.

  10. Document rollback. Record how to remove the entry, revoke OAuth grants, rotate API keys, clear local approval choices, block the server through policy, and tell users what changed.

Configuration Checklist

Check What to inspect Rollout decision
Scope local, project, user, plugin, claude.ai, or managed source Share only project or managed entries that were reviewed for all users
Precedence duplicate names, duplicate endpoints, plugin overlap Confirm the intended entry is the one Claude Code loads
Transport stdio, HTTP, SSE, or WebSocket Prefer the least-privilege transport that fits the server
Stdio command executable, args, package runner, paths, startup behavior Approve only commands that are exact, explainable, and pinned where practical
Remote URL scheme, host, path, tenant variables, redirects Approve only expected endpoints and avoid broad wildcard trust
Secrets env, headers, OAuth, client IDs, client secrets Use per-user credentials or environment expansion; never commit secrets
Tools names, descriptions, inputs, side effects, result size Require approval for write, delete, deploy, send, and export tools
Data exposure resources, prompts, logs, traces, caches, tool output Match rollout to data classification and retention expectations
Policy allowlist, denylist, managed-mcp.json, plugin-only mode Enforce with URL or command matches when server identity matters
Rollback remove, revoke, rotate, block, communicate Do not launch without a tested rollback owner and path

Safer Config Patterns

Project configuration with placeholders

Use project-scoped .mcp.json only for values that are safe to share. Keep machine-specific paths and credentials behind environment variables.

{
  "mcpServers": {
    "internal-docs": {
      "type": "http",
      "url": "${INTERNAL_DOCS_MCP_URL}/mcp",
      "headers": {
        "Authorization": "Bearer ${INTERNAL_DOCS_MCP_TOKEN}"
      },
      "timeout": 60000
    }
  }
}

Before committing this pattern, confirm every required variable is documented privately for the team and that missing variables fail closed rather than falling back to a public or production endpoint by accident.

Stdio configuration with an explicit command

For local servers, make the command easy to inspect. Avoid shell indirection unless the wrapper is reviewed and pinned in the repository.

{
  "mcpServers": {
    "repo-index": {
      "type": "stdio",
      "command": "node",
      "args": ["./tools/mcp/repo-index-server.js"],
      "env": {
        "REPO_INDEX_ROOT": "${CLAUDE_PROJECT_DIR:-.}"
      }
    }
  }
}

Review whether the server can read outside the repository, follow symlinks, write indexes, open network connections, or log file contents.

Managed allowlist with URL and command identity

When policy must restrict what can run, prefer URL and command matches over server names. A name is only the user's label; the URL or command is closer to the actual server identity.

{
  "allowManagedMcpServersOnly": true,
  "allowedMcpServers": [
    { "serverUrl": "https://mcp.example.com/*" },
    { "serverCommand": ["node", "./tools/mcp/repo-index-server.js"] }
  ],
  "deniedMcpServers": [
    { "serverUrl": "https://*.staging.example.com/*" }
  ]
}

Test the policy on a managed machine with claude mcp list and with a blocked claude mcp add command before announcing the rollout.

Approval Gates

Block rollout

Block the rollout when any of these are true:

  • The command runs an unreviewed shell script, floating package, or installer.
  • A shared file contains real secrets or user-specific tokens.
  • The server can mutate production systems without scoped credentials or human approval.
  • The provider cannot explain logs, retention, or data handling for sensitive prompts and tool results.
  • Policy depends on serverName allowlist entries even though users can choose the name.
  • The team cannot revoke credentials or disable the server quickly.

Roll out with limits

Use a limited rollout when the server is useful but still has blast-radius risk:

  • Start with local or user scope instead of project scope.
  • Use read-only credentials and non-production data.
  • Disable alwaysLoad unless the tools must be available on every turn.
  • Restrict the server through an allowlist before broad team use.
  • Ask users to authenticate individually through OAuth rather than sharing one service account.

Approve team rollout

Approve only when the review can answer:

  • Who maintains the server and where the code or service is documented?
  • Which users, repositories, accounts, and data classes can it reach?
  • Which tools can write, delete, send, deploy, or export data?
  • Where are credentials stored and how are they revoked?
  • Which policy prevents unreviewed variants from loading?
  • How will support recognize a blocked server, failed auth flow, or rollback?

Reviewer Output

Write the review in a format that another maintainer can audit later:

## MCP configuration audit

- Server name:
- Source scope:
- Transport:
- Command or URL:
- Source and docs:
- Tools reviewed:
- Credentials and storage:
- Data classes exposed:
- Side-effect tools:
- Policy controls:
- Test result:
- Rollback path:
- Decision:

Keep tokens, callback URLs with sensitive state, tenant IDs, private hostnames, and logs out of public PRs and issues. Use redacted placeholders when evidence needs to be shared.

Troubleshooting

A project server is pending approval

Project-scoped .mcp.json entries require user approval before Claude Code uses them. Ask reviewers to start Claude Code interactively, review the pending server, and approve only after checking the command or URL.

The wrong server loads

Check duplicate names and duplicate endpoints across local, project, user, plugin, and claude.ai connector sources. Claude Code uses a precedence order, and fields are not merged across scopes, so the loaded entry may not be the one you edited.

A remote server fails authentication

Use /mcp to inspect auth state. If a static Authorization header is present and the server rejects it, remove the header when the intended flow is OAuth. For managed or project rollout, prefer per-user auth over shared tokens.

A managed policy blocks a server silently

Some policy changes make an existing server disappear from /mcp or claude mcp list without a detailed local explanation. Tell users which server was blocked, why, and what replacement command or connector to use.

Tool output is too large

Large tool results consume context and can expose more data than intended. Tune result size at the server, use narrower queries, and avoid raising output limits globally unless the rollout owner accepts the context and privacy cost.

References

Source citations

Add this badge to your README

Show that Auditing MCP Client Configuration Before Team Rollout is listed on HeyClaude. Paste this Markdown into your README — it renders the badge and links back to this page.

Listed on HeyClaude
[![Listed on HeyClaude](https://heyclau.de/badge/guides/auditing-mcp-client-configuration-before-team-rollout.svg)](https://heyclau.de/entry/guides/auditing-mcp-client-configuration-before-team-rollout)

How it compares

Auditing MCP Client Configuration Before Team Rollout side by side with 2 alternatives on trust, install, platform support, and disclosed safety notes — all from reviewed registry metadata.

2 trust signals differ across this comparison (Source provenance, Submitter).

Field

Source-backed checklist for reviewing Claude Code MCP client configuration before a team rollout, covering scopes, transports, commands, secrets, allowlists, denylists, approvals, and rollback.

Open dossier

Defend tool-connected agents against prompt injection using documented Claude Code security practices: MCP trust verification, approval gates, least-privilege tools, untrusted content handling, and human review before side-effect tool calls.

Open dossier

A practical pre-installation review workflow for Model Context Protocol servers. Inventory tools, resources, prompts, credentials, network reach, storage, and runtime permissions before connecting a server to Claude or another MCP client.

Open dossier
Next steps
Trust
Review statusNot reviewedNot reviewedNot reviewed
Package trustPackage not verifiedPackage not verifiedPackage not verified
Source provenanceDiffersSource-backedSubmission linkedSource submissionNo submission link
SubmitterDiffersYB0ykiannidevMkDev11
Install riskReview firstReview firstReview first
Notes Safety ✓ Privacy ✓ Safety ✓ Privacy ✓ Safety ✓ Privacy ✓
Brand
Categoryguidesguidesguides
SourceSource-backedExternalExternal
AuthorYB0ykiannidevMkDev11
Added2026-06-102026-06-162026-06-04
Platforms
Harness
Source repo
Safety notesLocal stdio MCP servers execute commands with the user's privileges, so review the exact command, arguments, package runner, file paths, and network behavior before sharing a config. Remote MCP servers can expose model-controlled tools for production systems; require least-privilege scopes, explicit approval for write tools, and a rollback path before team rollout. Do not rely on server names alone for enforcement because names are user-assigned labels; use command or URL allowlist entries when policy must control what actually runs.MCP servers that fetch external content can carry prompt injection—official security docs warn operators to verify trust before use. Project-scoped .mcp.json servers require trust verification and approval prompts in Claude Code before first use. Auto-approve or bypass permission modes increase injection blast radius—avoid for repos with untrusted inputs. Side-effect tools (write, bash, network) need explicit human gates when content origin is untrusted.An MCP server gives Claude Code model-callable tools that can run on your behalf; a stdio server runs as a local process with your environment access, so treat installing one as running third-party code. Anthropic reviews connectors against its listing criteria before adding them to the Anthropic Directory but does not security-audit or manage any MCP server, so trust verification is your responsibility (per code.claude.com/docs/en/security). Servers that fetch external content can expose you to prompt injection; Claude Code requires trust verification for new MCP servers and prompts for approval before using project-scoped servers from .mcp.json. Prefer least-privilege credentials, scoped directories, and explicit approval for side-effect tools.
Privacy notesMCP client configuration can reveal server URLs, internal hostnames, command paths, environment-variable names, header names, OAuth client IDs, and tool availability. Do not store API keys, bearer tokens, client secrets, tenant IDs, or personal credentials in shared `.mcp.json`, managed-mcp.json, PR bodies, issue comments, logs, or screenshots. Tool arguments, tool results, resources, prompts, logs, traces, and OAuth metadata can expose private repositories, tickets, databases, user identities, and workspace data.Injected prompts may exfiltrate data through tool arguments—scope OAuth tokens and filesystem paths narrowly. Logs of tool calls may contain injected instructions—restrict log sharing externally. Revoke MCP OAuth and remove servers promptly when injection is suspected.MCP servers can expose local files, resources, prompt templates, tool arguments, tool outputs, logs, and retrieved data to the connected client and model workflow. For HTTP/SSE transports, OAuth access tokens are stored in the system keychain (macOS) or a credentials file; use "Clear authentication" in the /mcp menu to revoke access. For stdio servers, credentials come from the environment you pass in. Restrict OAuth scopes with oauth.scopes in .mcp.json so a remote server only receives the access it needs, and revoke credentials and delete persisted state when uninstalling a server that had access to private repositories, databases, or files.
Prerequisites
  • A draft `.mcp.json`, `~/.claude.json` entry, plugin-provided MCP server, claude.ai connector plan, or managed-mcp.json deployment to review.
  • The server documentation, package or repository source, expected transport, command or URL, environment variables, headers, OAuth behavior, and tool list.
  • A test machine or disposable Claude Code profile where the configuration can be loaded with non-production data.
  • A named owner who can approve the rollout, publish the final configuration, and revoke credentials or block servers if the rollout fails.
  • Inventory of MCP servers, plugins, and tools connected to Claude Code.
  • Team policy for permission modes and auto-approve settings.
  • Ability to test workflows in an isolated profile before production use.
  • Maintainer or security reviewer for side-effect tool approvals.
  • The MCP server's documentation, package/repository source, config example, and declared tools/resources/prompts.
  • A list of credentials, files, network services, databases, browsers, or cloud APIs the server will access.
  • Permission to install the server in an isolated test profile before connecting it to production or personal data.
  • A rollback plan for removing the server and revoking tokens.
Install
Config
Citations
ClaimUnclaimedUnclaimedUnclaimed
Open 3 picks in the interactive comparison tool

Related guides

Signals

Loading live community signals…

More like this, weekly

A short, calm digest of reviewed Claude resources. Unsubscribe any time.