2026-03-01T09:54:59.921Z","uuid":"386f67f1-1e44-4800-b6f1-ab789509354b"} {"parentUuid":"631418b9-3759-48f0-a909-bc993ca1faec","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01KuQvPDaHbAs3ucauvsfhBL","type":"tool_result","content":"> ## Documentation Index\n> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# null\n\n# Claude Code Documentation Map\n\nThis is a comprehensive map of all Claude Code documentation pages with their headings, designed for easy navigation by LLMs.\n\n> **Note:** This file is auto-generated by GitHub Actions. Do not edit manually.\n> Last updated: 2026-02-27 17:59:09 UTC\n\n## Document Structure\n\nThis map uses a hierarchical structure:\n\n* **##** marks documentation groups (e.g., 'Getting started')\n* **###** marks individual documentation pages\n* **Nested bullets** show the heading structure within each page\n* Each page title links to the full documentation\n\n## Getting started\n\n### [overview](https://code.claude.com/docs/en/overview.md)\n\n* Get started\n* What you can do\n* Use Claude Code everywhere\n* Next steps\n\n### [quickstart](https://code.claude.com/docs/en/quickstart.md)\n\n* Before you begin\n* Step 1: Install Claude Code\n* Step 2: Log in to your account\n* Step 3: Start your first session\n* Step 4: Ask your first question\n* Step 5: Make your first code change\n* Step 6: Use Git with Claude Code\n* Step 7: Fix a bug or add a feature\n* Step 8: Test out other common workflows\n* Essential commands\n* Pro tips for beginners\n* What's next?\n* Getting help\n\n### [changelog](https://code.claude.com/docs/en/changelog.md)\n\n* (No headings found)\n\n## Core concepts\n\n### [how-claude-code-works](https://code.claude.com/docs/en/how-claude-code-works.md)\n\n* The agentic loop\n * Models\n * Tools\n* What Claude can access\n* Environments and interfaces\n * Execution environments\n * Interfaces\n* Work with sessions\n * Work across branches\n * Resume or fork sessions\n * The context window\n * When context fills up\n * Manage context with skills and subagents\n* Stay safe with checkpoints and permissions\n * Undo changes with checkpoints\n * Control what Claude can do\n* Work effectively with Claude Code\n * Ask Claude Code for help\n * It's a conversation\n * Interrupt and steer\n * Be specific upfront\n * Give Claude something to verify against\n * Explore before implementing\n * Delegate, don't dictate\n* What's next\n\n### [features-overview](https://code.claude.com/docs/en/features-overview.md)\n\n* Overview\n* Match features to your goal\n * Compare similar features\n * Understand how features layer\n * Combine features\n* Understand context costs\n * Context cost by feature\n * Understand how features load\n* Learn more\n\n### [common-workflows](https://code.claude.com/docs/en/common-workflows.md)\n\n* Understand new codebases\n * Get a quick codebase overview\n * Find relevant code\n* Fix bugs efficiently\n* Refactor code\n* Use specialized subagents\n* Use Plan Mode for safe code analysis\n * When to use Plan Mode\n * How to use Plan Mode\n * Example: Planning a complex refactor\n * Configure Plan Mode as default\n* Work with tests\n* Create pull requests\n* Handle documentation\n* Work with images\n* Reference files and directories\n* Use extended thinking (thinking mode)\n * Configure thinking mode\n * How extended thinking works\n* Resume previous conversations\n * Name your sessions\n * Use the session picker\n* Run parallel Claude Code sessions with Git worktrees\n * Subagent worktrees\n * Worktree cleanup\n * Manage worktrees manually\n * Non-git version control\n* Get notified when Claude needs your attention\n* Use Claude as a unix-style utility\n * Add Claude to your verification process\n * Pipe in, pipe out\n * Control output format\n* Ask Claude about its capabilities\n * Example questions\n* Next steps\n\n### [best-practices](https://code.claude.com/docs/en/best-practices.md)\n\n* Give Claude a way to verify its work\n* Explore first, then plan, then code\n* Provide specific context in your prompts\n * Provide rich content\n* Configure your environment\n * Write an effective CLAUDE.md\n * Configure permissions\n * Use CLI tools\n * Connect MCP servers\n * Set up hooks\n * Create skills\n * Create custom subagents\n * Install plugins\n* Communicate effectively\n * Ask codebase questions\n * Let Claude interview you\n* Manage your session\n * Course-correct early and often\n * Manage context aggressively\n * Use subagents for investigation\n * Rewind with checkpoints\n * Resume conversations\n* Automate and scale\n * Run non-interactive mode\n * Run multiple Claude sessions\n * Fan out across files\n * Safe autonomous mode\n* Avoid common failure patterns\n* Develop your intuition\n* Related resources\n\n### Platforms and integrations > Claude Code on desktop\n\n#### [desktop-quickstart](https://code.claude.com/docs/en/desktop-quickstart.md)\n\n* Install\n* Start your first session\n* Now what?\n* Coming from the CLI?\n* What's next\n\n#### [desktop](https://code.claude.com/docs/en/desktop.md)\n\n* Start a session\n* Work with code\n * Use the prompt box\n * Add files and context to prompts\n * Choose a permission mode\n * Preview your app\n * Review changes with diff view\n * Review your code\n * Monitor pull request status\n* Manage sessions\n * Work in parallel with sessions\n * Run long-running tasks remotely\n * Continue in another surface\n* Extend Claude Code\n * Connect external tools\n * Use skills\n * Install plugins\n * Configure preview servers\n * Auto-verify changes\n * Configuration fields\n * When to use `program` vs `runtimeExecutable`\n * Port conflicts\n * Examples\n* Environment configuration\n * Local sessions\n * Remote sessions\n * SSH sessions\n* Enterprise configuration\n * Admin console controls\n * Managed settings\n * Device management policies\n * Authentication and SSO\n * Data handling\n * Deployment\n* Coming from the CLI?\n * CLI flag equivalents\n * Shared configuration\n * Feature comparison\n * What's not available in Desktop\n* Troubleshooting\n * Check your version\n * 403 or authentication errors in the Code tab\n * Blank or stuck screen on launch\n * \"Failed to load session\"\n * Session not finding installed tools\n * Git and Git LFS errors\n * MCP servers not working on Windows\n * App won't quit\n * Windows-specific issues\n * Cowork tab unavailable on Intel Macs\n * \"Branch doesn't exist yet\" when opening in CLI\n * Still stuck?\n\n## Platforms and integrations\n\n### [remote-control](https://code.claude.com/docs/en/remote-control.md)\n\n* Requirements\n* Start a Remote Control session\n * Connect from another device\n * Enable Remote Control for all sessions\n* Connection and security\n* Remote Control vs Claude Code on the web\n* Limitations\n* Related resources\n\n### [claude-code-on-the-web](https://code.claude.com/docs/en/claude-code-on-the-web.md)\n\n* What is Claude Code on the web?\n* Who can use Claude Code on the web?\n* Getting started\n* How it works\n* Review changes with diff view\n* Moving tasks between web and terminal\n * From terminal to web\n * Tips for remote tasks\n * From web to terminal\n * Requirements for teleporting\n * Sharing sessions\n * Sharing from an Enterprise or Teams account\n * Sharing from a Max or Pro account\n* Cloud environment\n * Default image\n * Checking available tools\n * Language-specific setups\n * Databases\n * Environment configuration\n * Dependency management\n * Persist environment variables\n * Dependency management limitations\n* Network access and security\n * Network policy\n * GitHub proxy\n * Security proxy\n * Access levels\n * Default allowed domains\n * Anthropic Services\n * Version Control\n * Container Registries\n * Cloud Platforms\n * Package Managers - JavaScript/Node\n * Package Managers - Python\n * Package Managers - Ruby\n * Package Managers - Rust\n * Package Managers - Go\n * Package Managers - JVM\n * Package Managers - Other Languages\n * Linux Distributions\n * Development Tools & Platforms\n * Cloud Services & Monitoring\n * Content Delivery & Mirrors\n * Schema & Configuration\n * Model Context Protocol\n * Security best practices for customized network access\n* Security and isolation\n* Pricing and rate limits\n* Limitations\n* Best practices\n* Related resources\n\n### [chrome](https://code.claude.com/docs/en/chrome.md)\n\n* Capabilities\n* Prerequisites\n* Get started in the CLI\n * Enable Chrome by default\n * Manage site permissions\n* Example workflows\n * Test a local web application\n * Debug with console logs\n * Automate form filling\n * Draft content in Google Docs\n * Extract data from web pages\n * Run multi-site workflows\n * Record a demo GIF\n* Troubleshooting\n * Extension not detected\n * Browser not responding\n * Connection drops during long sessions\n * Windows-specific issues\n * Common error messages\n* See also\n\n### [vs-code](https://code.claude.com/docs/en/vs-code.md)\n\n* Prerequisites\n* Install the extension\n* Get started\n* Use the prompt box\n * Reference files and folders\n * Resume past conversations\n * Resume remote sessions from Claude.ai\n* Customize your workflow\n * Choose where Claude lives\n * Run multiple conversations\n * Switch to terminal mode\n* Manage plugins\n * Install plugins\n * Manage marketplaces\n* Automate browser tasks with Chrome\n* VS Code commands and shortcuts\n* Configure settings\n * Extension settings\n* VS Code extension vs. Claude Code CLI\n * Rewind with checkpoints\n * Run CLI in VS Code\n * Switch between extension and CLI\n * Include terminal output in prompts\n * Monitor background processes\n * Connect to external tools with MCP\n* Work with git\n * Create commits and pull requests\n * Use git worktrees for parallel tasks\n* Use third-party providers\n* Security and privacy\n* Fix common issues\n * Extension won't install\n * Spark icon not visible\n * Claude Code never responds\n* Uninstall the extension\n* Next steps\n\n### [jetbrains](https://code.claude.com/docs/en/jetbrains.md)\n\n* Supported IDEs\n* Features\n* Installation\n * Marketplace Installation\n* Usage\n * From Your IDE\n * From External Terminals\n* Configuration\n * Claude Code Settings\n * Plugin Settings\n * General Settings\n * ESC Key Configuration\n* Special Configurations\n * Remote Development\n * WSL Configuration\n* Troubleshooting\n * Plugin Not Working\n * IDE Not Detected\n * Command Not Found\n* Security Considerations\n\n### [github-actions](https://code.claude.com/docs/en/github-actions.md)\n\n* Why use Claude Code GitHub Actions?\n* What can Claude do?\n * Claude Code Action\n* Setup\n* Quick setup\n* Manual setup\n* Upgrading from Beta\n * Essential changes\n * Breaking Changes Reference\n * Before and After Example\n* Example use cases\n * Basic workflow\n * Using skills\n * Custom automation with prompts\n * Common use cases\n* Best practices\n * CLAUDE.md configuration\n * Security considerations\n * Optimizing performance\n * CI costs\n* Configuration examples\n* Using with AWS Bedrock & Google Vertex AI\n * Prerequisites\n * For Google Cloud Vertex AI:\n * For AWS Bedrock:\n* Troubleshooting\n * Claude not responding to @claude commands\n * CI not running on Claude's commits\n * Authentication errors\n* Advanced configuration\n * Action parameters\n * Pass CLI arguments\n * Alternative integration methods\n * Customizing Claude's behavior\n\n### [gitlab-ci-cd](https://code.claude.com/docs/en/gitlab-ci-cd.md)\n\n* Why use Claude Code with GitLab?\n* How it works\n* What can Claude do?\n* Setup\n * Quick setup\n * Manual setup (recommended for production)\n* Example use cases\n * Turn issues into MRs\n * Get implementation help\n * Fix bugs quickly\n* Using with AWS Bedrock & Google Vertex AI\n* Configuration examples\n * Basic .gitlab-ci.yml (Claude API)\n * AWS Bedrock job example (OIDC)\n * Google Vertex AI job example (Workload Identity Federation)\n* Best practices\n * CLAUDE.md configuration\n * Security considerations\n * Optimizing performance\n * CI costs\n* Security and governance\n* Troubleshooting\n * Claude not responding to @claude commands\n * Job can't write comments or open MRs\n * Authentication errors\n* Advanced configuration\n * Common parameters and variables\n * Customizing Claude's behavior\n\n### [slack](https://code.claude.com/docs/en/slack.md)\n\n* Use cases\n* Prerequisites\n* Setting up Claude Code in Slack\n* How it works\n * Automatic detection\n * Context gathering\n * Session flow\n* User interface elements\n * App Home\n * Message actions\n * Repository selection\n* Access and permissions\n * User-level access\n * Workspace-level access\n * Channel-based access control\n* What's accessible where\n* Best practices\n * Writing effective requests\n * When to use Slack vs. web\n* Troubleshooting\n * Sessions not starting\n * Repository not showing\n * Wrong repository selected\n * Authentication errors\n * Session expiration\n* Current limitations\n* Related resources\n\n## Build with Claude Code\n\n### [sub-agents](https://code.claude.com/docs/en/sub-agents.md)\n\n* Built-in subagents\n* Quickstart: create your first subagent\n* Configure subagents\n * Use the /agents command\n * Choose the subagent scope\n * Write subagent files\n * Supported frontmatter fields\n * Choose a model\n * Control subagent capabilities\n * Available tools\n * Restrict which subagents can be spawned\n * Permission modes\n * Preload skills into subagents\n * Enable persistent memory\n * Persistent memory tips\n * Conditional rules with hooks\n * Disable specific subagents\n * Define hooks for subagents\n * Hooks in subagent frontmatter\n * Project-level hooks for subagent events\n* Work with subagents\n * Understand automatic delegation\n * Run subagents in foreground or background\n * Common patterns\n * Isolate high-volume operations\n * Run parallel research\n * Chain subagents\n * Choose between subagents and main conversation\n * Manage subagent context\n * Resume subagents\n * Auto-compaction\n* Example subagents\n * Code reviewer\n * Debugger\n * Data scientist\n * Database query validator\n* Next steps\n\n### [agent-teams](https://code.claude.com/docs/en/agent-teams.md)\n\n* When to use agent teams\n * Compare with subagents\n* Enable agent teams\n* Start your first agent team\n* Control your agent team\n * Choose a display mode\n * Specify teammates and models\n * Require plan approval for teammates\n * Talk to teammates directly\n * Assign and claim tasks\n * Shut down teammates\n * Clean up the team\n * Enforce quality gates with hooks\n* How agent teams work\n * How Claude starts agent teams\n * Architecture\n * Permissions\n * Context and communication\n * Token usage\n* Use case examples\n * Run a parallel code review\n * Investigate with competing hypotheses\n* Best practices\n * Give teammates enough context\n * Choose an appropriate team size\n * Size tasks appropriately\n * Wait for teammates to finish\n * Start with research and review\n * Avoid file conflicts\n * Monitor and steer\n* Troubleshooting\n * Teammates not appearing\n * Too many permission prompts\n * Teammates stopping on errors\n * Lead shuts down before work is done\n * Orphaned tmux sessions\n* Limitations\n* Next steps\n\n### [plugins](https://code.claude.com/docs/en/plugins.md)\n\n* When to use plugins vs standalone configuration\n* Quickstart\n * Prerequisites\n * Create your first plugin\n* Hello Skill\n * Plugin structure overview\n * Develop more complex plugins\n * Add Skills to your plugin\n * Add LSP servers to your plugin\n * Ship default settings with your plugin\n * Organize complex plugins\n * Test your plugins locally\n * Debug plugin issues\n * Share your plugins\n * Submit your plugin to the official marketplace\n * Convert existing configurations to plugins\n * Migration steps\n * What changes when migrating\n * Next steps\n * For plugin users\n * For plugin developers\n\n### [discover-plugins](https://code.claude.com/docs/en/discover-plugins.md)\n\n* How marketplaces work\n* Official Anthropic marketplace\n * Code intelligence\n * What Claude gains from code intelligence plugins\n * External integrations\n * Development workflows\n * Output styles\n* Try it: add the demo marketplace\n* Add marketplaces\n * Add from GitHub\n * Add from other Git hosts\n * Add from local paths\n * Add from remote URLs\n* Install plugins\n* Manage installed plugins\n* Manage marketplaces\n * Use the interactive interface\n * Use CLI commands\n * Configure auto-updates\n* Configure team marketplaces\n* Troubleshooting\n * /plugin command not recognized\n * Common issues\n * Code intelligence issues\n* Next steps\n\n### [skills](https://code.claude.com/docs/en/skills.md)\n\n* Getting started\n * Create your first skill\n * Where skills live\n * Automatic discovery from nested directories\n * Skills from additional directories\n* Configure skills\n * Types of skill content\n * Frontmatter reference\n * Available string substitutions\n * Add supporting files\n * Control who invokes a skill\n * Restrict tool access\n * Pass arguments to skills\n* Advanced patterns\n * Inject dynamic context\n * Run skills in a subagent\n * Example: Research skill using Explore agent\n * Restrict Claude's skill access\n* Share skills\n * Generate visual output\n* Troubleshooting\n * Skill not triggering\n * Skill triggers too often\n * Claude doesn't see all my skills\n* Related resources\n\n### [output-styles](https://code.claude.com/docs/en/output-styles.md)\n\n* Built-in output styles\n* How output styles work\n* Change your output style\n* Create a custom output style\n * Frontmatter\n* Comparisons to related features\n * Output Styles vs. CLAUDE.md vs. --append-system-prompt\n * Output Styles vs. [Agents](/en/sub-agents)\n * Output Styles vs. [Skills](/en/skills)\n\n### [hooks-guide](https://code.claude.com/docs/en/hooks-guide.md)\n\n* Set up your first hook\n* What you can automate\n * Get notified when Claude needs input\n * Auto-format code after edits\n * Block edits to protected files\n * Re-inject context after compaction\n * Audit configuration changes\n* How hooks work\n * Read input and return output\n * Hook input\n * Hook output\n * Structured JSON output\n * Filter hooks with matchers\n * Configure hook location\n* Prompt-based hooks\n* Agent-based hooks\n* Limitations and troubleshooting\n * Limitations\n * Hook not firing\n * Hook error in output\n * `/hooks` shows no hooks configured\n * Stop hook runs forever\n * JSON validation failed\n * Debug techniques\n* Learn more\n\n### [headless](https://code.claude.com/docs/en/headless.md)\n\n* Basic usage\n* Examples\n * Get structured output\n * Stream responses\n * Auto-approve tools\n * Create a commit\n * Customize the system prompt\n * Continue conversations\n* Next steps\n\n### [mcp](https://code.claude.com/docs/en/mcp.md)\n\n* What you can do with MCP\n* Popular MCP servers\n* Installing MCP servers\n * Option 1: Add a remote HTTP server\n * Option 2: Add a remote SSE server\n * Option 3: Add a local stdio server\n * Managing your servers\n * Dynamic tool updates\n * Plugin-provided MCP servers\n* MCP installation scopes\n * Local scope\n * Project scope\n * User scope\n * Choosing the right scope\n * Scope hierarchy and precedence\n * Environment variable expansion in `.mcp.json`\n* Practical examples\n * Example: Monitor errors with Sentry\n * Example: Connect to GitHub for code reviews\n * Example: Query your PostgreSQL database\n* Authenticate with remote MCP servers\n * Use pre-configured OAuth credentials\n* Add MCP servers from JSON configuration\n* Import MCP servers from Claude Desktop\n* Use MCP servers from Claude.ai\n* Use Claude Code as an MCP server\n* MCP output limits and warnings\n* Use MCP resources\n * Reference MCP resources\n* Scale with MCP Tool Search\n * How it works\n * For MCP server authors\n * Configure tool search\n* Use MCP prompts as commands\n * Execute MCP prompts\n* Managed MCP configuration\n * Option 1: Exclusive control with managed-mcp.json\n * Option 2: Policy-based control with allowlists and denylists\n * Restriction options\n * Example configuration\n * How command-based restrictions work\n * How URL-based restrictions work\n * Allowlist behavior (`allowedMcpServers`)\n * Denylist behavior (`deniedMcpServers`)\n * Important notes\n\n### [troubleshooting](https://code.claude.com/docs/en/troubleshooting.md)\n\n* Troubleshoot installation issues\n* Debug installation problems\n * Check network connectivity\n * Verify your PATH\n * Check for conflicting installations\n * Check directory permissions\n * Verify the binary works\n* Common installation issues\n * Install script returns HTML instead of a shell script\n * `command not found: claude` after installation\n * `curl: (56) Failure writing output to destination`\n * TLS or SSL connection errors\n * `Failed to fetch version from storage.googleapis.com`\n * Windows: `irm` or `&&` not recognized\n * Install killed on low-memory Linux servers\n * Install hangs in Docker\n * Windows: Claude Desktop overrides `claude` CLI command\n * Windows: \"Claude Code on Windows requires git-bash\"\n * Linux: wrong binary variant installed (musl/glibc mismatch)\n * `Illegal instruction` on Linux\n * `dyld: cannot load` on macOS\n * Windows installation issues: errors in WSL\n * WSL2 sandbox setup\n * Permission errors during installation\n* Permissions and authentication\n * Repeated permission prompts\n * Authentication issues\n * OAuth error: Invalid code\n * 403 Forbidden after login\n * OAuth login fails in WSL2\n * \"Not logged in\" or token expired\n* Configuration file locations\n * Resetting configuration\n* Performance and stability\n * High CPU or memory usage\n * Command hangs or freezes\n * Search and discovery issues\n * Slow or incomplete search results on WSL\n* IDE integration issues\n * JetBrains IDE not detected on WSL2\n * WSL2 networking modes\n * Report Windows IDE integration issues\n * Escape key not working in JetBrains IDE terminals\n* Markdown formatting issues\n * Missing language tags in code blocks\n * Inconsistent spacing and formatting\n * Reduce markdown formatting issues\n* Get more help\n\n## Deployment\n\n### [third-party-integrations](https://code.claude.com/docs/en/third-party-integrations.md)\n\n* Compare deployment options\n* Configure proxies and gateways\n * Amazon Bedrock\n * Microsoft Foundry\n * Google Vertex AI\n* Best practices for organizations\n * Invest in documentation and memory\n * Simplify deployment\n * Start with guided usage\n * Pin model versions for cloud providers\n * Configure security policies\n * Leverage MCP for integrations\n* Next steps\n\n### [amazon-bedrock](https://code.claude.com/docs/en/amazon-bedrock.md)\n\n* Prerequisites\n* Setup\n * 1. Submit use case details\n * 2. Configure AWS credentials\n * Advanced credential configuration\n * Example configuration\n * Configuration settings explained\n * 3. Configure Claude Code\n * 4. Pin model versions\n* IAM configuration\n* AWS Guardrails\n* Troubleshooting\n* Additional resources\n\n### [google-vertex-ai](https://code.claude.com/docs/en/google-vertex-ai.md)\n\n* Prerequisites\n* Region Configuration\n* Setup\n * 1. Enable Vertex AI API\n * 2. Request model access\n * 3. Configure GCP credentials\n * 4. Configure Claude Code\n * 5. Pin model versions\n* IAM configuration\n* 1M token context window\n* Troubleshooting\n* Additional resources\n\n### [microsoft-foundry](https://code.claude.com/docs/en/microsoft-foundry.md)\n\n* Prerequisites\n* Setup\n * 1. Provision Microsoft Foundry resource\n * 2. Configure Azure credentials\n * 3. Configure Claude Code\n * 4. Pin model versions\n* Azure RBAC configuration\n* Troubleshooting\n* Additional resources\n\n### [network-config](https://code.claude.com/docs/en/network-config.md)\n\n* Proxy configuration\n * Environment variables\n * Basic authentication\n* Custom CA certificates\n* mTLS authentication\n* Network access requirements\n* Additional resources\n\n### [llm-gateway](https://code.claude.com/docs/en/llm-gateway.md)\n\n* Gateway requirements\n* Configuration\n * Model selection\n* LiteLLM configuration\n * Prerequisites\n * Basic LiteLLM setup\n * Authentication methods\n * Static API key\n * Dynamic API key with helper\n * Unified endpoint (recommended)\n * Provider-specific pass-through endpoints (alternative)\n * Claude API through LiteLLM\n * Amazon Bedrock through LiteLLM\n * Google Vertex AI through LiteLLM\n* Additional resources\n\n### [devcontainer](https://code.claude.com/docs/en/devcontainer.md)\n\n* Key features\n* Getting started in 4 steps\n* Configuration breakdown\n* Security features\n* Customization options\n* Example use cases\n * Secure client work\n * Team onboarding\n * Consistent CI/CD environments\n* Related resources\n\n## Administration\n\n### [setup](https://code.claude.com/docs/en/setup.md)\n\n* System requirements\n * Additional dependencies\n* Install Claude Code\n * Set up on Windows\n * Alpine Linux and musl-based distributions\n* Verify your installation\n* Authenticate\n* Update Claude Code\n * Auto-updates\n * Configure release channel\n * Disable auto-updates\n * Update manually\n* Advanced installation options\n * Install a specific version\n * Deprecated npm installation\n * Migrate from npm to native\n * Install with npm\n * Binary integrity and code signing\n* Uninstall Claude Code\n * Native installation\n * Homebrew installation\n * WinGet installation\n * npm\n * Remove configuration files\n\n### [authentication](https://code.claude.com/docs/en/authentication.md)\n\n* Log in to Claude Code\n* Set up team authentication\n * Claude for Teams or Enterprise\n * Claude Console authentication\n * Cloud provider authentication\n* Credential management\n\n### [security](https://code.claude.com/docs/en/security.md)\n\n* How we approach security\n * Security foundation\n * Permission-based architecture\n * Built-in protections\n * User responsibility\n* Protect against prompt injection\n * Core protections\n * Privacy safeguards\n * Additional safeguards\n* MCP security\n* IDE security\n* Cloud execution security\n* Security best practices\n * Working with sensitive code\n * Team security\n * Reporting security issues\n* Related resources\n\n### [server-managed-settings](https://code.claude.com/docs/en/server-managed-settings.md)\n\n* Requirements\n* Choose between server-managed and endpoint-managed settings\n* Configure server-managed settings\n * Verify settings delivery\n * Access control\n * Current limitations\n* Settings delivery\n * Settings precedence\n * Fetch and caching behavior\n * Security approval dialogs\n* Platform availability\n* Audit logging\n* Security considerations\n* See also\n\n### [data-usage](https://code.claude.com/docs/en/data-usage.md)\n\n* Data policies\n * Data training policy\n * Development Partner Program\n * Feedback using the `/bug` command\n * Session quality surveys\n * Data retention\n* Data access\n* Local Claude Code: Data flow and dependencies\n * Cloud execution: Data flow and dependencies\n* Telemetry services\n* Default behaviors by API provider\n\n### [zero-data-retention](https://code.claude.com/docs/en/zero-data-retention.md)\n\n* ZDR scope\n * What ZDR covers\n * What ZDR does not cover\n* Features disabled under ZDR\n* Data retention for policy violations\n* Request ZDR\n\n### [monitoring-usage](https://code.claude.com/docs/en/monitoring-usage.md)\n\n* Quick start\n* Administrator configuration\n* Configuration details\n * Common configuration variables\n * Metrics cardinality control\n * Dynamic headers\n * Settings configuration\n * Script requirements\n * Refresh behavior\n * Multi-team organization support\n * Example configurations\n* Available metrics and events\n * Standard attributes\n * Metrics\n * Metric details\n * Session counter\n * Lines of code counter\n * Pull request counter\n * Commit counter\n * Cost counter\n * Token counter\n * Code edit tool decision counter\n * Active time counter\n * Events\n * Event correlation attributes\n * User prompt event\n * Tool result event\n * API request event\n * API error event\n * Tool decision event\n* Interpret metrics and events data\n * Usage monitoring\n * Cost monitoring\n * Alerting and segmentation\n * Event analysis\n* Backend considerations\n * For metrics\n * For events/logs\n* Service information\n* ROI measurement resources\n* Security and privacy\n* Monitor Claude Code on Amazon Bedrock\n\n### [costs](https://code.claude.com/docs/en/costs.md)\n\n* Track your costs\n * Using the `/cost` command\n* Managing costs for teams\n * Rate limit recommendations\n * Agent team token costs\n* Reduce token usage\n * Manage context proactively\n * Choose the right model\n * Reduce MCP server overhead\n * Install code intelligence plugins for typed languages\n * Offload processing to hooks and skills\n * Move instructions from CLAUDE.md to skills\n * Adjust extended thinking\n * Delegate verbose operations to subagents\n * Manage agent team costs\n * Write specific prompts\n * Work efficiently on complex tasks\n* Background token usage\n* Understanding changes in Claude Code behavior\n\n### [analytics](https://code.claude.com/docs/en/analytics.md)\n\n* Access analytics for Teams and Enterprise\n * Enable contribution metrics\n * Review summary metrics\n * Explore the charts\n * Track adoption\n * Measure PRs per user\n * View pull requests breakdown\n * Find top contributors\n * PR attribution\n * Tagging criteria\n * Attribution process\n * Time window\n * Excluded files\n * Attribution notes\n * Get the most from analytics\n * Monitor adoption\n * Measure ROI\n * Identify power users\n * Access data programmatically\n* Access analytics for API customers\n * View team insights\n* Related resources\n\n### [plugin-marketplaces](https://code.claude.com/docs/en/plugin-marketplaces.md)\n\n* Overview\n* Walkthrough: create a local marketplace\n* Create the marketplace file\n* Marketplace schema\n * Required fields\n * Owner fields\n * Optional metadata\n* Plugin entries\n * Required fields\n * Optional plugin fields\n* Plugin sources\n * Relative paths\n * GitHub repositories\n * Git repositories\n * npm packages\n * Advanced plugin entries\n * Strict mode\n* Host and distribute marketplaces\n * Host on GitHub (recommended)\n * Host on other git services\n * Private repositories\n * Test locally before distribution\n * Require marketplaces for your team\n * Managed marketplace restrictions\n * Common configurations\n * How restrictions work\n * Version resolution and release channels\n * Set up release channels\n * Example\n * Assign channels to user groups\n* Validation and testing\n* Troubleshooting\n * Marketplace not loading\n * Marketplace validation errors\n * Plugin installation failures\n * Private repository authentication fails\n * Git operations time out\n * Plugins with relative paths fail in URL-based marketplaces\n * Files not found after installation\n* See also\n\n## Configuration\n\n### [settings](https://code.claude.com/docs/en/settings.md)\n\n* Configuration scopes\n * Available scopes\n * When to use each scope\n * How scopes interact\n * What uses scopes\n* Settings files\n * Available settings\n * Permission settings\n * Permission rule syntax\n * Sandbox settings\n * Attribution settings\n * File suggestion settings\n * Hook configuration\n * Settings precedence\n * Verify active settings\n * Key points about the configuration system\n * System prompt\n * Excluding sensitive files\n* Subagent configuration\n* Plugin configuration\n * Plugin settings\n * `enabledPlugins`\n * `extraKnownMarketplaces`\n * `strictKnownMarketplaces`\n * Managing plugins\n* Environment variables\n* Tools available to Claude\n * Bash tool behavior\n * Extending tools with hooks\n* See also\n\n### [permissions](https://code.claude.com/docs/en/permissions.md)\n\n* Permission system\n* Manage permissions\n* Permission modes\n* Permission rule syntax\n * Match all uses of a tool\n * Use specifiers for fine-grained control\n * Wildcard patterns\n* Tool-specific permission rules\n * Bash\n * Read and Edit\n * WebFetch\n * MCP\n * Task (subagents)\n* Extend permissions with hooks\n* Working directories\n* How permissions interact with sandboxing\n* Managed settings\n * Managed-only settings\n* Settings precedence\n* Example configurations\n* See also\n\n### [sandboxing](https://code.claude.com/docs/en/sandboxing.md)\n\n* Overview\n* Why sandboxing matters\n* How it works\n * Filesystem isolation\n * Network isolation\n * OS-level enforcement\n* Getting started\n * Prerequisites\n * Enable sandboxing\n * Sandbox modes\n * Configure sandboxing\n* Security benefits\n * Protection against prompt injection\n * Reduced attack surface\n * Transparent operation\n* Security Limitations\n* How sandboxing relates to permissions\n* Advanced usage\n * Custom proxy configuration\n * Integration with existing security tools\n* Best practices\n* Open source\n* Limitations\n* See also\n\n### [terminal-config](https://code.claude.com/docs/en/terminal-config.md)\n\n* Themes and appearance\n* Line breaks\n* Notification setup\n * Terminal notifications\n * Notification hooks\n* Handling large inputs\n* Vim Mode\n\n### [model-config](https://code.claude.com/docs/en/model-config.md)\n\n* Available models\n * Model aliases\n * Setting your model\n* Restrict model selection\n * Default model behavior\n * Control the model users run on\n * Merge behavior\n* Special model behavior\n * `default` model setting\n * `opusplan` model setting\n * Adjust effort level\n * Extended context\n* Checking your current model\n* Environment variables\n * Pin models for third-party deployments\n * Prompt caching configuration\n\n### [fast-mode](https://code.claude.com/docs/en/fast-mode.md)\n\n* Toggle fast mode\n* Understand the cost tradeoff\n* Decide when to use fast mode\n * Fast mode vs effort level\n* Requirements\n * Enable fast mode for your organization\n * Require per-session opt-in\n* Handle rate limits\n* Research preview\n* See also\n\n### [memory](https://code.claude.com/docs/en/memory.md)\n\n* Determine memory type\n* Auto memory\n * What Claude remembers\n * Where auto memory is stored\n * How it works\n * Manage auto memory\n* CLAUDE.md imports\n* How Claude looks up memories\n * Load memory from additional directories\n* Directly edit memories with `/memory`\n* Set up project memory\n* Modular rules with `.claude/rules/`\n * Basic structure\n * Path-specific rules\n * Glob patterns\n * Subdirectories\n * Symlinks\n * User-level rules\n* Organization-level memory management\n* Memory best practices\n\n### [statusline](https://code.claude.com/docs/en/statusline.md)\n\n* Set up a status line\n * Use the /statusline command\n * Manually configure a status line\n * Disable the status line\n* Build a status line step by step\n* How status lines work\n* Available data\n * Context window fields\n* Examples\n * Context window usage\n * Git status with colors\n * Cost and duration tracking\n * Display multiple lines\n * Clickable links\n * Cache expensive operations\n* Tips\n* Troubleshooting\n\n### [keybindings](https://code.claude.com/docs/en/keybindings.md)\n\n* Configuration file\n* Contexts\n* Available actions\n * App actions\n * History actions\n * Chat actions\n * Autocomplete actions\n * Confirmation actions\n * Permission actions\n * Transcript actions\n * History search actions\n * Task actions\n * Theme actions\n * Help actions\n * Tabs actions\n * Attachments actions\n * Footer actions\n * Message selector actions\n * Diff actions\n * Model picker actions\n * Select actions\n * Plugin actions\n * Settings actions\n* Keystroke syntax\n * Modifiers\n * Uppercase letters\n * Chords\n * Special keys\n* Unbind default shortcuts\n* Reserved shortcuts\n* Terminal conflicts\n* Vim mode interaction\n* Validation\n\n## Reference\n\n### [cli-reference](https://code.claude.com/docs/en/cli-reference.md)\n\n* CLI commands\n* CLI flags\n * Agents flag format\n * System prompt flags\n* See also\n\n### [interactive-mode](https://code.claude.com/docs/en/interactive-mode.md)\n\n* Keyboard shortcuts\n * General controls\n * Text editing\n * Theme and display\n * Multiline input\n * Quick commands\n* Built-in commands\n * MCP prompts\n* Vim editor mode\n * Mode switching\n * Navigation (NORMAL mode)\n * Editing (NORMAL mode)\n * Text objects (NORMAL mode)\n* Command history\n * Reverse search with Ctrl+R\n* Background bash commands\n * How backgrounding works\n * Bash mode with `!` prefix\n* Prompt suggestions\n* Task list\n* PR review status\n* See also\n\n### [checkpointing](https://code.claude.com/docs/en/checkpointing.md)\n\n* How checkpoints work\n * Automatic tracking\n * Rewind and summarize\n * Restore vs. summarize\n* Common use cases\n* Limitations\n * Bash command changes not tracked\n * External changes not tracked\n * Not a replacement for version control\n* See also\n\n### [hooks](https://code.claude.com/docs/en/hooks.md)\n\n* Hook lifecycle\n * How a hook resolves\n* Configuration\n * Hook locations\n * Matcher patterns\n * Match MCP tools\n * Hook handler fields\n * Common fields\n * Command hook fields\n * HTTP hook fields\n * Prompt and agent hook fields\n * Reference scripts by path\n * Hooks in skills and agents\n * The `/hooks` menu\n * Disable or remove hooks\n* Hook input and output\n * Common input fields\n * Exit code output\n * Exit code 2 behavior per event\n * HTTP response handling\n * JSON output\n * Decision control\n* Hook events\n * SessionStart\n * SessionStart input\n * SessionStart decision control\n * Persist environment variables\n * UserPromptSubmit\n * UserPromptSubmit input\n * UserPromptSubmit decision control\n * PreToolUse\n * PreToolUse input\n * Bash\n * Write\n * Edit\n * Read\n * Glob\n * Grep\n * WebFetch\n * WebSearch\n * Task\n * PreToolUse decision control\n * PermissionRequest\n * PermissionRequest input\n * PermissionRequest decision control\n * PostToolUse\n * PostToolUse input\n * PostToolUse decision control\n * PostToolUseFailure\n * PostToolUseFailure input\n * PostToolUseFailure decision control\n * Notification\n * Notification input\n * SubagentStart\n * SubagentStart input\n * SubagentStop\n * SubagentStop input\n * Stop\n * Stop input\n * Stop decision control\n * TeammateIdle\n * TeammateIdle input\n * TeammateIdle decision control\n * TaskCompleted\n * TaskCompleted input\n * TaskCompleted decision control\n * ConfigChange\n * ConfigChange input\n * ConfigChange decision control\n * WorktreeCreate\n * WorktreeCreate input\n * WorktreeCreate output\n * WorktreeRemove\n * WorktreeRemove input\n * PreCompact\n * PreCompact input\n * SessionEnd\n * SessionEnd input\n* Prompt-based hooks\n * How prompt-based hooks work\n * Prompt hook configuration\n * Response schema\n * Example: Multi-criteria Stop hook\n* Agent-based hooks\n * How agent hooks work\n * Agent hook configuration\n* Run hooks in the background\n * Configure an async hook\n * How async hooks execute\n * Example: run tests after file changes\n * Limitations\n* Security considerations\n * Disclaimer\n * Security best practices\n* Debug hooks\n\n### [plugins-reference](https://code.claude.com/docs/en/plugins-reference.md)\n\n* Plugin components reference\n * Skills\n * Agents\n * Hooks\n * MCP servers\n * LSP servers\n* Plugin installation scopes\n* Plugin manifest schema\n * Complete schema\n * Required fields\n * Metadata fields\n * Component path fields\n * Path behavior rules\n * Environment variables\n* Plugin caching and file resolution\n * Path traversal limitations\n * Working with external dependencies\n* Plugin directory structure\n * Standard plugin layout\n * File locations reference\n* CLI commands reference\n * plugin install\n * plugin uninstall\n * plugin enable\n * plugin disable\n * plugin update\n* Debugging and development tools\n * Debugging commands\n * Common issues\n * Example error messages\n * Hook troubleshooting\n * MCP server troubleshooting\n * Directory structure mistakes\n* Distribution and versioning reference\n * Version management\n* See also\n\n## Resources\n\n### [legal-and-compliance](https://code.claude.com/docs/en/legal-and-compliance.md)\n\n* Legal agreements\n * License\n * Commercial agreements\n* Compliance\n * Healthcare compliance (BAA)\n* Usage policy\n * Acceptable use\n * Authentication and credential use\n* Security and trust\n * Trust and safety\n * Security vulnerability reporting\n"}]},"uuid":"d9851e2b-0c4c-4b12-9044-9fd545f11c1b","timestamp":"2026-03-01T09:54:59.919Z","sourceToolAssistantUUID":"631418b9-3759-48f0-a909-bc993ca1faec"} {"parentUuid":"d9851e2b-0c4c-4b12-9044-9fd545f11c1b","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","message":{"model":"claude-haiku-4-5-20251001","id":"msg_017DtaH892ZSDgPUTKeJjSJ7","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me fetch the MCP documentation page with the specific details about stdio server configuration:"}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":10809,"cache_read_input_tokens":10506,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":10809},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"}},"requestId":"req_011CYcA9niLQU1DYfEVnmq8c","type":"assistant","uuid":"211b48e3-ec58-4377-baa8-cfcc2903dc18","timestamp":"2026-03-01T09:55:01.482Z"} {"parentUuid":"211b48e3-ec58-4377-baa8-cfcc2903dc18","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","message":{"model":"claude-haiku-4-5-20251001","id":"msg_017DtaH892ZSDgPUTKeJjSJ7","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_012VBoMWvno63XbcD578BURL","name":"WebFetch","input":{"url":"https://code.claude.com/docs/en/mcp.md","prompt":"stdio MCP server configuration, .mcp.json file location, user scope, exact format"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":10809,"cache_read_input_tokens":10506,"output_tokens":122,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":10809,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"}},"requestId":"req_011CYcA9niLQU1DYfEVnmq8c","type":"assistant","uuid":"b578b9be-1cfd-4742-b1b7-e1ed6b07a73e","timestamp":"2026-03-01T09:55:02.023Z"} {"parentUuid":"b578b9be-1cfd-4742-b1b7-e1ed6b07a73e","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:WebFetch","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_012VBoMWvno63XbcD578BURL","parentToolUseID":"toolu_012VBoMWvno63XbcD578BURL","uuid":"afa97ac8-bd4a-4ed3-9794-b0f771017ffa","timestamp":"2026-03-01T09:55:02.025Z"} {"parentUuid":"afa97ac8-bd4a-4ed3-9794-b0f771017ffa","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:WebFetch","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse.py"},"parentToolUseID":"toolu_012VBoMWvno63XbcD578BURL","toolUseID":"toolu_012VBoMWvno63XbcD578BURL","timestamp":"2026-03-01T09:55:02.389Z","uuid":"ff4ab822-8839-4968-8a4c-1e08ed842840"} {"parentUuid":"b578b9be-1cfd-4742-b1b7-e1ed6b07a73e","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_012VBoMWvno63XbcD578BURL","type":"tool_result","content":"> ## Documentation Index\n> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Connect Claude Code to tools via MCP\n\n> Learn how to connect Claude Code to your tools with the Model Context Protocol.\n\nexport const MCPServersTable = ({platform = \"all\"}) => {\n const ifYouAreAnAiAgentReadingThisYouShouldInsteadFetch = 'https://api.anthropic.com/mcp-registry/docs';\n const [servers, setServers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n useEffect(() => {\n const fetchServers = async () => {\n try {\n setLoading(true);\n const allServers = [];\n let cursor = null;\n do {\n const url = new URL('https://api.anthropic.com/mcp-registry/v0/servers');\n url.searchParams.set('version', 'latest');\n url.searchParams.set('visibility', 'commercial');\n url.searchParams.set('limit', '100');\n if (cursor) {\n url.searchParams.set('cursor', cursor);\n }\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch MCP registry: ${response.status}`);\n }\n const data = await response.json();\n allServers.push(...data.servers);\n cursor = data.metadata?.nextCursor || null;\n } while (cursor);\n const transformedServers = allServers.map(item => {\n const server = item.server;\n const meta = item._meta?.['com.anthropic.api/mcp-registry'] || ({});\n const worksWith = meta.worksWith || [];\n const availability = {\n claudeCode: worksWith.includes('claude-code'),\n mcpConnector: worksWith.includes('claude-api'),\n claudeDesktop: worksWith.includes('claude-desktop')\n };\n const remotes = server.remotes || [];\n const httpRemote = remotes.find(r => r.type === 'streamable-http');\n const sseRemote = remotes.find(r => r.type === 'sse');\n const preferredRemote = httpRemote || sseRemote;\n const remoteUrl = preferredRemote?.url || meta.url;\n const remoteType = preferredRemote?.type;\n const isTemplatedUrl = remoteUrl?.includes('{');\n let setupUrl;\n if (isTemplatedUrl && meta.requiredFields) {\n const urlField = meta.requiredFields.find(f => f.field === 'url');\n setupUrl = urlField?.sourceUrl || meta.documentation;\n }\n const urls = {};\n if (!isTemplatedUrl) {\n if (remoteType === 'streamable-http') {\n urls.http = remoteUrl;\n } else if (remoteType === 'sse') {\n urls.sse = remoteUrl;\n }\n }\n let envVars = [];\n if (server.packages && server.packages.length > 0) {\n const npmPackage = server.packages.find(p => p.registryType === 'npm');\n if (npmPackage) {\n urls.stdio = `npx -y ${npmPackage.identifier}`;\n if (npmPackage.environmentVariables) {\n envVars = npmPackage.environmentVariables;\n }\n }\n }\n return {\n name: meta.displayName || server.title || server.name,\n description: meta.oneLiner || server.description,\n documentation: meta.documentation,\n urls: urls,\n envVars: envVars,\n availability: availability,\n customCommands: meta.claudeCodeCopyText ? {\n claudeCode: meta.claudeCodeCopyText\n } : undefined,\n setupUrl: setupUrl\n };\n });\n setServers(transformedServers);\n setError(null);\n } catch (err) {\n setError(err.message);\n console.error('Error fetching MCP registry:', err);\n } finally {\n setLoading(false);\n }\n };\n fetchServers();\n }, []);\n const generateClaudeCodeCommand = server => {\n if (server.customCommands && server.customCommands.claudeCode) {\n return server.customCommands.claudeCode;\n }\n const serverSlug = server.name.toLowerCase().replace(/[^a-z0-9]/g, '-');\n if (server.urls.http) {\n return `claude mcp add ${serverSlug} --transport http ${server.urls.http}`;\n }\n if (server.urls.sse) {\n return `claude mcp add ${serverSlug} --transport sse ${server.urls.sse}`;\n }\n if (server.urls.stdio) {\n const envFlags = server.envVars && server.envVars.length > 0 ? server.envVars.map(v => `--env ${v.name}=YOUR_${v.name}`).join(' ') : '';\n const baseCommand = `claude mcp add ${serverSlug} --transport stdio`;\n return envFlags ? `${baseCommand} ${envFlags} -- ${server.urls.stdio}` : `${baseCommand} -- ${server.urls.stdio}`;\n }\n return null;\n };\n if (loading) {\n return
Loading MCP servers...
;\n }\n if (error) {\n return
Error loading MCP servers: {error}
;\n }\n const filteredServers = servers.filter(server => {\n if (platform === \"claudeCode\") {\n return server.availability.claudeCode;\n } else if (platform === \"mcpConnector\") {\n return server.availability.mcpConnector;\n } else if (platform === \"claudeDesktop\") {\n return server.availability.claudeDesktop;\n } else if (platform === \"all\") {\n return true;\n } else {\n throw new Error(`Unknown platform: ${platform}`);\n }\n });\n return <>\n \n\n
\n {filteredServers.map(server => {\n const claudeCodeCommand = generateClaudeCodeCommand(server);\n const mcpUrl = server.urls.http || server.urls.sse;\n const commandToShow = platform === \"claudeCode\" ? claudeCodeCommand : mcpUrl;\n return
\n
\n {server.documentation ? \n {server.name}\n : {server.name}}\n
\n\n

\n {server.description}\n

\n\n {server.setupUrl &&

\n Requires user-specific URL.{' '}\n \n Get your URL here\n .\n

}\n\n {commandToShow && !server.setupUrl && <>\n

\n {platform === \"claudeCode\" ? \"Command\" : \"URL\"}\n

\n
\n \n {commandToShow}\n \n
\n }\n
;\n })}\n
\n ;\n};\n\nClaude Code can connect to hundreds of external tools and data sources through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction), an open source standard for AI-tool integrations. MCP servers give Claude Code access to your tools, databases, and APIs.\n\n## What you can do with MCP\n\nWith MCP servers connected, you can ask Claude Code to:\n\n* **Implement features from issue trackers**: \"Add the feature described in JIRA issue ENG-4521 and create a PR on GitHub.\"\n* **Analyze monitoring data**: \"Check Sentry and Statsig to check the usage of the feature described in ENG-4521.\"\n* **Query databases**: \"Find emails of 10 random users who used feature ENG-4521, based on our PostgreSQL database.\"\n* **Integrate designs**: \"Update our standard email template based on the new Figma designs that were posted in Slack\"\n* **Automate workflows**: \"Create Gmail drafts inviting these 10 users to a feedback session about the new feature.\"\n\n## Popular MCP servers\n\nHere are some commonly used MCP servers you can connect to Claude Code:\n\n\n Use third party MCP servers at your own risk - Anthropic has not verified\n the correctness or security of all these servers.\n Make sure you trust MCP servers you are installing.\n Be especially careful when using MCP servers that could fetch untrusted\n content, as these can expose you to prompt injection risk.\n\n\n\n\n\n **Need a specific integration?** [Find hundreds more MCP servers on GitHub](https://github.com/modelcontextprotocol/servers), or build your own using the [MCP SDK](https://modelcontextprotocol.io/quickstart/server).\n\n\n## Installing MCP servers\n\nMCP servers can be configured in three different ways depending on your needs:\n\n### Option 1: Add a remote HTTP server\n\nHTTP servers are the recommended option for connecting to remote MCP servers. This is the most widely supported transport for cloud-based services.\n\n```bash theme={null}\n# Basic syntax\nclaude mcp add --transport http \n\n# Real example: Connect to Notion\nclaude mcp add --transport http notion https://mcp.notion.com/mcp\n\n# Example with Bearer token\nclaude mcp add --transport http secure-api https://api.example.com/mcp \\\n --header \"Authorization: Bearer your-token\"\n```\n\n### Option 2: Add a remote SSE server\n\n\n The SSE (Server-Sent Events) transport is deprecated. Use HTTP servers instead, where available.\n\n\n```bash theme={null}\n# Basic syntax\nclaude mcp add --transport sse \n\n# Real example: Connect to Asana\nclaude mcp add --transport sse asana https://mcp.asana.com/sse\n\n# Example with authentication header\nclaude mcp add --transport sse private-api https://api.company.com/sse \\\n --header \"X-API-Key: your-key-here\"\n```\n\n### Option 3: Add a local stdio server\n\nStdio servers run as local processes on your machine. They're ideal for tools that need direct system access or custom scripts.\n\n```bash theme={null}\n# Basic syntax\nclaude mcp add [options] -- [args...]\n\n# Real example: Add Airtable server\nclaude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \\\n -- npx -y airtable-mcp-server\n```\n\n\n **Important: Option ordering**\n\n All options (`--transport`, `--env`, `--scope`, `--header`) must come **before** the server name. The `--` (double dash) then separates the server name from the command and arguments that get passed to the MCP server.\n\n For example:\n\n * `claude mcp add --transport stdio myserver -- npx server` → runs `npx server`\n * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → runs `python server.py --port 8080` with `KEY=value` in environment\n\n This prevents conflicts between Claude's flags and the server's flags.\n\n\n### Managing your servers\n\nOnce configured, you can manage your MCP servers with these commands:\n\n```bash theme={null}\n# List all configured servers\nclaude mcp list\n\n# Get details for a specific server\nclaude mcp get github\n\n# Remove a server\nclaude mcp remove github\n\n# (within Claude Code) Check server status\n/mcp\n```\n\n### Dynamic tool updates\n\nClaude Code supports MCP `list_changed` notifications, allowing MCP servers to dynamically update their available tools, prompts, and resources without requiring you to disconnect and reconnect. When an MCP server sends a `list_changed` notification, Claude Code automatically refreshes the available capabilities from that server.\n\n\n Tips:\n\n * Use the `--scope` flag to specify where the configuration is stored:\n * `local` (default): Available only to you in the current project (was called `project` in older versions)\n * `project`: Shared with everyone in the project via `.mcp.json` file\n * `user`: Available to you across all projects (was called `global` in older versions)\n * Set environment variables with `--env` flags (for example, `--env KEY=value`)\n * Configure MCP server startup timeout using the MCP\\_TIMEOUT environment variable (for example, `MCP_TIMEOUT=10000 claude` sets a 10-second timeout)\n * Claude Code will display a warning when MCP tool output exceeds 10,000 tokens. To increase this limit, set the `MAX_MCP_OUTPUT_TOKENS` environment variable (for example, `MAX_MCP_OUTPUT_TOKENS=50000`)\n * Use `/mcp` to authenticate with remote servers that require OAuth 2.0 authentication\n\n\n\n **Windows Users**: On native Windows (not WSL), local MCP servers that use `npx` require the `cmd /c` wrapper to ensure proper execution.\n\n ```bash theme={null}\n # This creates command=\"cmd\" which Windows can execute\n claude mcp add --transport stdio my-server -- cmd /c npx -y @some/package\n ```\n\n Without the `cmd /c` wrapper, you'll encounter \"Connection closed\" errors because Windows cannot directly execute `npx`. (See the note above for an explanation of the `--` parameter.)\n\n\n### Plugin-provided MCP servers\n\n[Plugins](/en/plugins) can bundle MCP servers, automatically providing tools and integrations when the plugin is enabled. Plugin MCP servers work identically to user-configured servers.\n\n**How plugin MCP servers work**:\n\n* Plugins define MCP servers in `.mcp.json` at the plugin root or inline in `plugin.json`\n* When a plugin is enabled, its MCP servers start automatically\n* Plugin MCP tools appear alongside manually configured MCP tools\n* Plugin servers are managed through plugin installation (not `/mcp` commands)\n\n**Example plugin MCP configuration**:\n\nIn `.mcp.json` at plugin root:\n\n```json theme={null}\n{\n \"database-tools\": {\n \"command\": \"${CLAUDE_PLUGIN_ROOT}/servers/db-server\",\n \"args\": [\"--config\", \"${CLAUDE_PLUGIN_ROOT}/config.json\"],\n \"env\": {\n \"DB_URL\": \"${DB_URL}\"\n }\n }\n}\n```\n\nOr inline in `plugin.json`:\n\n```json theme={null}\n{\n \"name\": \"my-plugin\",\n \"mcpServers\": {\n \"plugin-api\": {\n \"command\": \"${CLAUDE_PLUGIN_ROOT}/servers/api-server\",\n \"args\": [\"--port\", \"8080\"]\n }\n }\n}\n```\n\n**Plugin MCP features**:\n\n* **Automatic lifecycle**: Servers start when plugin enables, but you must restart Claude Code to apply MCP server changes (enabling or disabling)\n* **Environment variables**: Use `${CLAUDE_PLUGIN_ROOT}` for plugin-relative paths\n* **User environment access**: Access to same environment variables as manually configured servers\n* **Multiple transport types**: Support stdio, SSE, and HTTP transports (transport support may vary by server)\n\n**Viewing plugin MCP servers**:\n\n```bash theme={null}\n# Within Claude Code, see all MCP servers including plugin ones\n/mcp\n```\n\nPlugin servers appear in the list with indicators showing they come from plugins.\n\n**Benefits of plugin MCP servers**:\n\n* **Bundled distribution**: Tools and servers packaged together\n* **Automatic setup**: No manual MCP configuration needed\n* **Team consistency**: Everyone gets the same tools when plugin is installed\n\nSee the [plugin components reference](/en/plugins-reference#mcp-servers) for details on bundling MCP servers with plugins.\n\n## MCP installation scopes\n\nMCP servers can be configured at three different scope levels, each serving distinct purposes for managing server accessibility and sharing. Understanding these scopes helps you determine the best way to configure servers for your specific needs.\n\n### Local scope\n\nLocal-scoped servers represent the default configuration level and are stored in `~/.claude.json` under your project's path. These servers remain private to you and are only accessible when working within the current project directory. This scope is ideal for personal development servers, experimental configurations, or servers containing sensitive credentials that shouldn't be shared.\n\n\n The term \"local scope\" for MCP servers differs from general local settings. MCP local-scoped servers are stored in `~/.claude.json` (your home directory), while general local settings use `.claude/settings.local.json` (in the project directory). See [Settings](/en/settings#settings-files) for details on settings file locations.\n\n\n```bash theme={null}\n# Add a local-scoped server (default)\nclaude mcp add --transport http stripe https://mcp.stripe.com\n\n# Explicitly specify local scope\nclaude mcp add --transport http stripe --scope local https://mcp.stripe.com\n```\n\n### Project scope\n\nProject-scoped servers enable team collaboration by storing configurations in a `.mcp.json` file at your project's root directory. This file is designed to be checked into version control, ensuring all team members have access to the same MCP tools and services. When you add a project-scoped server, Claude Code automatically creates or updates this file with the appropriate configuration structure.\n\n```bash theme={null}\n# Add a project-scoped server\nclaude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp\n```\n\nThe resulting `.mcp.json` file follows a standardized format:\n\n```json theme={null}\n{\n \"mcpServers\": {\n \"shared-server\": {\n \"command\": \"/path/to/server\",\n \"args\": [],\n \"env\": {}\n }\n }\n}\n```\n\nFor security reasons, Claude Code prompts for approval before using project-scoped servers from `.mcp.json` files. If you need to reset these approval choices, use the `claude mcp reset-project-choices` command.\n\n### User scope\n\nUser-scoped servers are stored in `~/.claude.json` and provide cross-project accessibility, making them available across all projects on your machine while remaining private to your user account. This scope works well for personal utility servers, development tools, or services you frequently use across different projects.\n\n```bash theme={null}\n# Add a user server\nclaude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic\n```\n\n### Choosing the right scope\n\nSelect your scope based on:\n\n* **Local scope**: Personal servers, experimental configurations, or sensitive credentials specific to one project\n* **Project scope**: Team-shared servers, project-specific tools, or services required for collaboration\n* **User scope**: Personal utilities needed across multiple projects, development tools, or frequently used services\n\n\n **Where are MCP servers stored?**\n\n * **User and local scope**: `~/.claude.json` (in the `mcpServers` field or under project paths)\n * **Project scope**: `.mcp.json` in your project root (checked into source control)\n * **Managed**: `managed-mcp.json` in system directories (see [Managed MCP configuration](#managed-mcp-configuration))\n\n\n### Scope hierarchy and precedence\n\nMCP server configurations follow a clear precedence hierarchy. When servers with the same name exist at multiple scopes, the system resolves conflicts by prioritizing local-scoped servers first, followed by project-scoped servers, and finally user-scoped servers. This design ensures that personal configurations can override shared ones when needed.\n\n### Environment variable expansion in `.mcp.json`\n\nClaude Code supports environment variable expansion in `.mcp.json` files, allowing teams to share configurations while maintaining flexibility for machine-specific paths and sensitive values like API keys.\n\n**Supported syntax:**\n\n* `${VAR}` - Expands to the value of environment variable `VAR`\n* `${VAR:-default}` - Expands to `VAR` if set, otherwise uses `default`\n\n**Expansion locations:**\nEnvironment variables can be expanded in:\n\n* `command` - The server executable path\n* `args` - Command-line arguments\n* `env` - Environment variables passed to the server\n* `url` - For HTTP server types\n* `headers` - For HTTP server authentication\n\n**Example with variable expansion:**\n\n```json theme={null}\n{\n \"mcpServers\": {\n \"api-server\": {\n \"type\": \"http\",\n \"url\": \"${API_BASE_URL:-https://api.example.com}/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer ${API_KEY}\"\n }\n }\n }\n}\n```\n\nIf a required environment variable is not set and has no default value, Claude Code will fail to parse the config.\n\n## Practical examples\n\n{/* ### Example: Automate browser testing with Playwright\n\n ```bash\n # 1. Add the Playwright MCP server\n claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest\n\n # 2. Write and run browser tests\n > \"Test if the login flow works with test@example.com\"\n > \"Take a screenshot of the checkout page on mobile\"\n > \"Verify that the search feature returns results\"\n ``` */}\n\n### Example: Monitor errors with Sentry\n\n```bash theme={null}\n# 1. Add the Sentry MCP server\nclaude mcp add --transport http sentry https://mcp.sentry.dev/mcp\n\n# 2. Use /mcp to authenticate with your Sentry account\n> /mcp\n\n# 3. Debug production issues\n> \"What are the most common errors in the last 24 hours?\"\n> \"Show me the stack trace for error ID abc123\"\n> \"Which deployment introduced these new errors?\"\n```\n\n### Example: Connect to GitHub for code reviews\n\n```bash theme={null}\n# 1. Add the GitHub MCP server\nclaude mcp add --transport http github https://api.githubcopilot.com/mcp/\n\n# 2. In Claude Code, authenticate if needed\n> /mcp\n# Select \"Authenticate\" for GitHub\n\n# 3. Now you can ask Claude to work with GitHub\n> \"Review PR #456 and suggest improvements\"\n> \"Create a new issue for the bug we just found\"\n> \"Show me all open PRs assigned to me\"\n```\n\n### Example: Query your PostgreSQL database\n\n```bash theme={null}\n# 1. Add the database server with your connection string\nclaude mcp add --transport stdio db -- npx -y @bytebase/dbhub \\\n --dsn \"postgresql://readonly:pass@prod.db.com:5432/analytics\"\n\n# 2. Query your database naturally\n> \"What's our total revenue this month?\"\n> \"Show me the schema for the orders table\"\n> \"Find customers who haven't made a purchase in 90 days\"\n```\n\n## Authenticate with remote MCP servers\n\nMany cloud-based MCP servers require authentication. Claude Code supports OAuth 2.0 for secure connections.\n\n\n \n For example:\n\n ```bash theme={null}\n claude mcp add --transport http sentry https://mcp.sentry.dev/mcp\n ```\n \n\n \n In Claude code, use the command:\n\n ```\n > /mcp\n ```\n\n Then follow the steps in your browser to login.\n \n\n\n\n Tips:\n\n * Authentication tokens are stored securely and refreshed automatically\n * Use \"Clear authentication\" in the `/mcp` menu to revoke access\n * If your browser doesn't open automatically, copy the provided URL and open it manually\n * If the browser redirect fails with a connection error after authenticating, paste the full callback URL from your browser's address bar into the URL prompt that appears in Claude Code\n * OAuth authentication works with HTTP servers\n\n\n### Use pre-configured OAuth credentials\n\nSome MCP servers don't support automatic OAuth setup. If you see an error like \"Incompatible auth server: does not support dynamic client registration,\" the server requires pre-configured credentials. Register an OAuth app through the server's developer portal first, then provide the credentials when adding the server.\n\n\n \n Create an app through the server's developer portal and note your client ID and client secret.\n\n Many servers also require a redirect URI. If so, choose a port and register a redirect URI in the format `http://localhost:PORT/callback`. Use that same port with `--callback-port` in the next step.\n \n\n \n Choose one of the following methods. The port used for `--callback-port` can be any available port. It just needs to match the redirect URI you registered in the previous step.\n\n \n \n Use `--client-id` to pass your app's client ID. The `--client-secret` flag prompts for the secret with masked input:\n\n ```bash theme={null}\n claude mcp add --transport http \\\n --client-id your-client-id --client-secret --callback-port 8080 \\\n my-server https://mcp.example.com/mcp\n ```\n \n\n \n Include the `oauth` object in the JSON config and pass `--client-secret` as a separate flag:\n\n ```bash theme={null}\n claude mcp add-json my-server \\\n '{\"type\":\"http\",\"url\":\"https://mcp.example.com/mcp\",\"oauth\":{\"clientId\":\"your-client-id\",\"callbackPort\":8080}}' \\\n --client-secret\n ```\n \n\n \n Set the secret via environment variable to skip the interactive prompt:\n\n ```bash theme={null}\n MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \\\n --client-id your-client-id --client-secret --callback-port 8080 \\\n my-server https://mcp.example.com/mcp\n ```\n \n \n \n\n \n Run `/mcp` in Claude Code and follow the browser login flow.\n \n\n\n\n Tips:\n\n * The client secret is stored securely in your system keychain (macOS) or a credentials file, not in your config\n * If the server uses a public OAuth client with no secret, use only `--client-id` without `--client-secret`\n * These flags only apply to HTTP and SSE transports. They have no effect on stdio servers\n * Use `claude mcp get ` to verify that OAuth credentials are configured for a server\n\n\n## Add MCP servers from JSON configuration\n\nIf you have a JSON configuration for an MCP server, you can add it directly:\n\n\n \n ```bash theme={null}\n # Basic syntax\n claude mcp add-json ''\n\n # Example: Adding an HTTP server with JSON configuration\n claude mcp add-json weather-api '{\"type\":\"http\",\"url\":\"https://api.weather.com/mcp\",\"headers\":{\"Authorization\":\"Bearer token\"}}'\n\n # Example: Adding a stdio server with JSON configuration\n claude mcp add-json local-weather '{\"type\":\"stdio\",\"command\":\"/path/to/weather-cli\",\"args\":[\"--api-key\",\"abc123\"],\"env\":{\"CACHE_DIR\":\"/tmp\"}}'\n\n # Example: Adding an HTTP server with pre-configured OAuth credentials\n claude mcp add-json my-server '{\"type\":\"http\",\"url\":\"https://mcp.example.com/mcp\",\"oauth\":{\"clientId\":\"your-client-id\",\"callbackPort\":8080}}' --client-secret\n ```\n \n\n \n ```bash theme={null}\n claude mcp get weather-api\n ```\n \n\n\n\n Tips:\n\n * Make sure the JSON is properly escaped in your shell\n * The JSON must conform to the MCP server configuration schema\n * You can use `--scope user` to add the server to your user configuration instead of the project-specific one\n\n\n## Import MCP servers from Claude Desktop\n\nIf you've already configured MCP servers in Claude Desktop, you can import them:\n\n\n \n ```bash theme={null}\n # Basic syntax \n claude mcp add-from-claude-desktop \n ```\n \n\n \n After running the command, you'll see an interactive dialog that allows you to select which servers you want to import.\n \n\n \n ```bash theme={null}\n claude mcp list \n ```\n \n\n\n\n Tips:\n\n * This feature only works on macOS and Windows Subsystem for Linux (WSL)\n * It reads the Claude Desktop configuration file from its standard location on those platforms\n * Use the `--scope user` flag to add servers to your user configuration\n * Imported servers will have the same names as in Claude Desktop\n * If servers with the same names already exist, they will get a numerical suffix (for example, `server_1`)\n\n\n## Use MCP servers from Claude.ai\n\nIf you've logged into Claude Code with a [Claude.ai](https://claude.ai) account, MCP servers you've added in Claude.ai are automatically available in Claude Code:\n\n\n \n Add servers at [claude.ai/settings/connectors](https://claude.ai/settings/connectors). On Team and Enterprise plans, only admins can add servers.\n \n\n \n Complete any required authentication steps in Claude.ai.\n \n\n \n In Claude Code, use the command:\n\n ```\n # Within Claude Code, see all MCP servers including Claude.ai ones\n > /mcp\n ```\n\n Claude.ai servers appear in the list with indicators showing they come from Claude.ai.\n \n\n\nTo disable claude.ai MCP servers in Claude Code, set the `ENABLE_CLAUDEAI_MCP_SERVERS` environment variable to `false`:\n\n```bash theme={null}\nENABLE_CLAUDEAI_MCP_SERVERS=false claude\n```\n\n## Use Claude Code as an MCP server\n\nYou can use Claude Code itself as an MCP server that other applications can connect to:\n\n```bash theme={null}\n# Start Claude as a stdio MCP server\nclaude mcp serve\n```\n\nYou can use this in Claude Desktop by adding this configuration to claude\\_desktop\\_config.json:\n\n```json theme={null}\n{\n \"mcpServers\": {\n \"claude-code\": {\n \"type\": \"stdio\",\n \"command\": \"claude\",\n \"args\": [\"mcp\", \"serve\"],\n \"env\": {}\n }\n }\n}\n```\n\n\n **Configuring the executable path**: The `command` field must reference the Claude Code executable. If the `claude` command is not in your system's PATH, you'll need to specify the full path to the executable.\n\n To find the full path:\n\n ```bash theme={null}\n which claude\n ```\n\n Then use the full path in your configuration:\n\n ```json theme={null}\n {\n \"mcpServers\": {\n \"claude-code\": {\n \"type\": \"stdio\",\n \"command\": \"/full/path/to/claude\",\n \"args\": [\"mcp\", \"serve\"],\n \"env\": {}\n }\n }\n }\n ```\n\n Without the correct executable path, you'll encounter errors like `spawn claude ENOENT`.\n\n\n\n Tips:\n\n * The server provides access to Claude's tools like View, Edit, LS, etc.\n * In Claude Desktop, try asking Claude to read files in a directory, make edits, and more.\n * Note that this MCP server is only exposing Claude Code's tools to your MCP client, so your own client is responsible for implementing user confirmation for individual tool calls.\n\n\n## MCP output limits and warnings\n\nWhen MCP tools produce large outputs, Claude Code helps manage the token usage to prevent overwhelming your conversation context:\n\n* **Output warning threshold**: Claude Code displays a warning when any MCP tool output exceeds 10,000 tokens\n* **Configurable limit**: You can adjust the maximum allowed MCP output tokens using the `MAX_MCP_OUTPUT_TOKENS` environment variable\n* **Default limit**: The default maximum is 25,000 tokens\n\nTo increase the limit for tools that produce large outputs:\n\n```bash theme={null}\n# Set a higher limit for MCP tool outputs\nexport MAX_MCP_OUTPUT_TOKENS=50000\nclaude\n```\n\nThis is particularly useful when working with MCP servers that:\n\n* Query large datasets or databases\n* Generate detailed reports or documentation\n* Process extensive log files or debugging information\n\n\n If you frequently encounter output warnings with specific MCP servers, consider increasing the limit or configuring the server to paginate or filter its responses.\n\n\n## Use MCP resources\n\nMCP servers can expose resources that you can reference using @ mentions, similar to how you reference files.\n\n### Reference MCP resources\n\n\n \n Type `@` in your prompt to see available resources from all connected MCP servers. Resources appear alongside files in the autocomplete menu.\n \n\n \n Use the format `@server:protocol://resource/path` to reference a resource:\n\n ```\n > Can you analyze @github:issue://123 and suggest a fix?\n ```\n\n ```\n > Please review the API documentation at @docs:file://api/authentication\n ```\n \n\n \n You can reference multiple resources in a single prompt:\n\n ```\n > Compare @postgres:schema://users with @docs:file://database/user-model\n ```\n \n\n\n\n Tips:\n\n * Resources are automatically fetched and included as attachments when referenced\n * Resource paths are fuzzy-searchable in the @ mention autocomplete\n * Claude Code automatically provides tools to list and read MCP resources when servers support them\n * Resources can contain any type of content that the MCP server provides (text, JSON, structured data, etc.)\n\n\n## Scale with MCP Tool Search\n\nWhen you have many MCP servers configured, tool definitions can consume a significant portion of your context window. MCP Tool Search solves this by dynamically loading tools on-demand instead of preloading all of them.\n\n### How it works\n\nClaude Code automatically enables Tool Search when your MCP tool descriptions would consume more than 10% of the context window. You can [adjust this threshold](#configure-tool-search) or disable tool search entirely. When triggered:\n\n1. MCP tools are deferred rather than loaded into context upfront\n2. Claude uses a search tool to discover relevant MCP tools when needed\n3. Only the tools Claude actually needs are loaded into context\n4. MCP tools continue to work exactly as before from your perspective\n\n### For MCP server authors\n\nIf you're building an MCP server, the server instructions field becomes more useful with Tool Search enabled. Server instructions help Claude understand when to search for your tools, similar to how [skills](/en/skills) work.\n\nAdd clear, descriptive server instructions that explain:\n\n* What category of tasks your tools handle\n* When Claude should search for your tools\n* Key capabilities your server provides\n\n### Configure tool search\n\nTool search runs in auto mode by default, meaning it activates only when your MCP tool definitions exceed the context threshold. If you have few tools, they load normally without tool search. This feature requires models that support `tool_reference` blocks: Sonnet 4 and later, or Opus 4 and later. Haiku models do not support tool search.\n\nControl tool search behavior with the `ENABLE_TOOL_SEARCH` environment variable:\n\n| Value | Behavior |\n| :--------- | :--------------------------------------------------------------------------------- |\n| `auto` | Activates when MCP tools exceed 10% of context (default) |\n| `auto:` | Activates at custom threshold, where `` is a percentage (e.g., `auto:5` for 5%) |\n| `true` | Always enabled |\n| `false` | Disabled, all MCP tools loaded upfront |\n\n```bash theme={null}\n# Use a custom 5% threshold\nENABLE_TOOL_SEARCH=auto:5 claude\n\n# Disable tool search entirely\nENABLE_TOOL_SEARCH=false claude\n```\n\nOr set the value in your [settings.json `env` field](/en/settings#available-settings).\n\nYou can also disable the MCPSearch tool specifically using the `disallowedTools` setting:\n\n```json theme={null}\n{\n \"permissions\": {\n \"deny\": [\"MCPSearch\"]\n }\n}\n```\n\n## Use MCP prompts as commands\n\nMCP servers can expose prompts that become available as commands in Claude Code.\n\n### Execute MCP prompts\n\n\n \n Type `/` to see all available commands, including those from MCP servers. MCP prompts appear with the format `/mcp__servername__promptname`.\n \n\n \n ```\n > /mcp__github__list_prs\n ```\n \n\n \n Many prompts accept arguments. Pass them space-separated after the command:\n\n ```\n > /mcp__github__pr_review 456\n ```\n\n ```\n > /mcp__jira__create_issue \"Bug in login flow\" high\n ```\n \n\n\n\n Tips:\n\n * MCP prompts are dynamically discovered from connected servers\n * Arguments are parsed based on the prompt's defined parameters\n * Prompt results are injected directly into the conversation\n * Server and prompt names are normalized (spaces become underscores)\n\n\n## Managed MCP configuration\n\nFor organizations that need centralized control over MCP servers, Claude Code supports two configuration options:\n\n1. **Exclusive control with `managed-mcp.json`**: Deploy a fixed set of MCP servers that users cannot modify or extend\n2. **Policy-based control with allowlists/denylists**: Allow users to add their own servers, but restrict which ones are permitted\n\nThese options allow IT administrators to:\n\n* **Control which MCP servers employees can access**: Deploy a standardized set of approved MCP servers across the organization\n* **Prevent unauthorized MCP servers**: Restrict users from adding unapproved MCP servers\n* **Disable MCP entirely**: Remove MCP functionality completely if needed\n\n### Option 1: Exclusive control with managed-mcp.json\n\nWhen you deploy a `managed-mcp.json` file, it takes **exclusive control** over all MCP servers. Users cannot add, modify, or use any MCP servers other than those defined in this file. This is the simplest approach for organizations that want complete control.\n\nSystem administrators deploy the configuration file to a system-wide directory:\n\n* macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json`\n* Linux and WSL: `/etc/claude-code/managed-mcp.json`\n* Windows: `C:\\Program Files\\ClaudeCode\\managed-mcp.json`\n\n\n These are system-wide paths (not user home directories like `~/Library/...`) that require administrator privileges. They are designed to be deployed by IT administrators.\n\n\nThe `managed-mcp.json` file uses the same format as a standard `.mcp.json` file:\n\n```json theme={null}\n{\n \"mcpServers\": {\n \"github\": {\n \"type\": \"http\",\n \"url\": \"https://api.githubcopilot.com/mcp/\"\n },\n \"sentry\": {\n \"type\": \"http\",\n \"url\": \"https://mcp.sentry.dev/mcp\"\n },\n \"company-internal\": {\n \"type\": \"stdio\",\n \"command\": \"/usr/local/bin/company-mcp-server\",\n \"args\": [\"--config\", \"/etc/company/mcp-config.json\"],\n \"env\": {\n \"COMPANY_API_URL\": \"https://internal.company.com\"\n }\n }\n }\n}\n```\n\n### Option 2: Policy-based control with allowlists and denylists\n\nInstead of taking exclusive control, administrators can allow users to configure their own MCP servers while enforcing restrictions on which servers are permitted. This approach uses `allowedMcpServers` and `deniedMcpServers` in the [managed settings file](/en/settings#settings-files).\n\n\n **Choosing between options**: Use Option 1 (`managed-mcp.json`) when you want to deploy a fixed set of servers with no user customization. Use Option 2 (allowlists/denylists) when you want to allow users to add their own servers within policy constraints.\n\n\n#### Restriction options\n\nEach entry in the allowlist or denylist can restrict servers in three ways:\n\n1. **By server name** (`serverName`): Matches the configured name of the server\n2. **By command** (`serverCommand`): Matches the exact command and arguments used to start stdio servers\n3. **By URL pattern** (`serverUrl`): Matches remote server URLs with wildcard support\n\n**Important**: Each entry must have exactly one of `serverName`, `serverCommand`, or `serverUrl`.\n\n#### Example configuration\n\n```json theme={null}\n{\n \"allowedMcpServers\": [\n // Allow by server name\n { \"serverName\": \"github\" },\n { \"serverName\": \"sentry\" },\n\n // Allow by exact command (for stdio servers)\n { \"serverCommand\": [\"npx\", \"-y\", \"@modelcontextprotocol/server-filesystem\"] },\n { \"serverCommand\": [\"python\", \"/usr/local/bin/approved-server.py\"] },\n\n // Allow by URL pattern (for remote servers)\n { \"serverUrl\": \"https://mcp.company.com/*\" },\n { \"serverUrl\": \"https://*.internal.corp/*\" }\n ],\n \"deniedMcpServers\": [\n // Block by server name\n { \"serverName\": \"dangerous-server\" },\n\n // Block by exact command (for stdio servers)\n { \"serverCommand\": [\"npx\", \"-y\", \"unapproved-package\"] },\n\n // Block by URL pattern (for remote servers)\n { \"serverUrl\": \"https://*.untrusted.com/*\" }\n ]\n}\n```\n\n#### How command-based restrictions work\n\n**Exact matching**:\n\n* Command arrays must match **exactly** - both the command and all arguments in the correct order\n* Example: `[\"npx\", \"-y\", \"server\"]` will NOT match `[\"npx\", \"server\"]` or `[\"npx\", \"-y\", \"server\", \"--flag\"]`\n\n**Stdio server behavior**:\n\n* When the allowlist contains **any** `serverCommand` entries, stdio servers **must** match one of those commands\n* Stdio servers cannot pass by name alone when command restrictions are present\n* This ensures administrators can enforce which commands are allowed to run\n\n**Non-stdio server behavior**:\n\n* Remote servers (HTTP, SSE, WebSocket) use URL-based matching when `serverUrl` entries exist in the allowlist\n* If no URL entries exist, remote servers fall back to name-based matching\n* Command restrictions do not apply to remote servers\n\n#### How URL-based restrictions work\n\nURL patterns support wildcards using `*` to match any sequence of characters. This is useful for allowing entire domains or subdomains.\n\n**Wildcard examples**:\n\n* `https://mcp.company.com/*` - Allow all paths on a specific domain\n* `https://*.example.com/*` - Allow any subdomain of example.com\n* `http://localhost:*/*` - Allow any port on localhost\n\n**Remote server behavior**:\n\n* When the allowlist contains **any** `serverUrl` entries, remote servers **must** match one of those URL patterns\n* Remote servers cannot pass by name alone when URL restrictions are present\n* This ensures administrators can enforce which remote endpoints are allowed\n\n\n ```json theme={null}\n {\n \"allowedMcpServers\": [\n { \"serverUrl\": \"https://mcp.company.com/*\" },\n { \"serverUrl\": \"https://*.internal.corp/*\" }\n ]\n }\n ```\n\n **Result**:\n\n * HTTP server at `https://mcp.company.com/api`: ✅ Allowed (matches URL pattern)\n * HTTP server at `https://api.internal.corp/mcp`: ✅ Allowed (matches wildcard subdomain)\n * HTTP server at `https://external.com/mcp`: ❌ Blocked (doesn't match any URL pattern)\n * Stdio server with any command: ❌ Blocked (no name or command entries to match)\n\n\n\n ```json theme={null}\n {\n \"allowedMcpServers\": [\n { \"serverCommand\": [\"npx\", \"-y\", \"approved-package\"] }\n ]\n }\n ```\n\n **Result**:\n\n * Stdio server with `[\"npx\", \"-y\", \"approved-package\"]`: ✅ Allowed (matches command)\n * Stdio server with `[\"node\", \"server.js\"]`: ❌ Blocked (doesn't match command)\n * HTTP server named \"my-api\": ❌ Blocked (no name entries to match)\n\n\n\n ```json theme={null}\n {\n \"allowedMcpServers\": [\n { \"serverName\": \"github\" },\n { \"serverCommand\": [\"npx\", \"-y\", \"approved-package\"] }\n ]\n }\n ```\n\n **Result**:\n\n * Stdio server named \"local-tool\" with `[\"npx\", \"-y\", \"approved-package\"]`: ✅ Allowed (matches command)\n * Stdio server named \"local-tool\" with `[\"node\", \"server.js\"]`: ❌ Blocked (command entries exist but doesn't match)\n * Stdio server named \"github\" with `[\"node\", \"server.js\"]`: ❌ Blocked (stdio servers must match commands when command entries exist)\n * HTTP server named \"github\": ✅ Allowed (matches name)\n * HTTP server named \"other-api\": ❌ Blocked (name doesn't match)\n\n\n\n ```json theme={null}\n {\n \"allowedMcpServers\": [\n { \"serverName\": \"github\" },\n { \"serverName\": \"internal-tool\" }\n ]\n }\n ```\n\n **Result**:\n\n * Stdio server named \"github\" with any command: ✅ Allowed (no command restrictions)\n * Stdio server named \"internal-tool\" with any command: ✅ Allowed (no command restrictions)\n * HTTP server named \"github\": ✅ Allowed (matches name)\n * Any server named \"other\": ❌ Blocked (name doesn't match)\n\n\n#### Allowlist behavior (`allowedMcpServers`)\n\n* `undefined` (default): No restrictions - users can configure any MCP server\n* Empty array `[]`: Complete lockdown - users cannot configure any MCP servers\n* List of entries: Users can only configure servers that match by name, command, or URL pattern\n\n#### Denylist behavior (`deniedMcpServers`)\n\n* `undefined` (default): No servers are blocked\n* Empty array `[]`: No servers are blocked\n* List of entries: Specified servers are explicitly blocked across all scopes\n\n#### Important notes\n\n* **Option 1 and Option 2 can be combined**: If `managed-mcp.json` exists, it has exclusive control and users cannot add servers. Allowlists/denylists still apply to the managed servers themselves.\n* **Denylist takes absolute precedence**: If a server matches a denylist entry (by name, command, or URL), it will be blocked even if it's on the allowlist\n* Name-based, command-based, and URL-based restrictions work together: a server passes if it matches **either** a name entry, a command entry, or a URL pattern (unless blocked by denylist)\n\n\n **When using `managed-mcp.json`**: Users cannot add MCP servers through `claude mcp add` or configuration files. The `allowedMcpServers` and `deniedMcpServers` settings still apply to filter which managed servers are actually loaded.\n\n"}]},"uuid":"bb492966-2916-4750-94a5-dc2ec19a4d94","timestamp":"2026-03-01T09:55:02.387Z","sourceToolAssistantUUID":"b578b9be-1cfd-4742-b1b7-e1ed6b07a73e"} {"parentUuid":"bb492966-2916-4750-94a5-dc2ec19a4d94","isSidechain":true,"userType":"external","cwd":"/home/josie/development/forks/linux","sessionId":"0264110d-7530-4e6f-9308-60ad7d2c7434","version":"2.1.63","gitBranch":"master","agentId":"ac465362a50f05939","slug":"quiet-shimmying-bunny","message":{"model":"claude-haiku-4-5-20251001","id":"msg_01APic9juQgzWWeaUonKBZ8S","type":"message","role":"assistant","content":[{"type":"text","text":"Based on the Claude Code MCP documentation, here's the exact format and location for a user-level (global) stdio MCP server:\n\n## File Location for User-Level MCP Server\n\nUser-level (global) MCP server configurations are stored in:\n\n```\n~/.claude.json\n```\n\nThis file contains all user-scoped MCP servers that are accessible across all your projects.\n\n## Exact Format for Stdio Server\n\nHere's the exact JSON format for your kernel-mail MCP server in `~/.claude.json`:\n\n```json\n{\n \"mcpServers\": {\n \"kernel-mail-mcp\": {\n \"type\": \"stdio\",\n \"command\": \"uv\",\n \"args\": [\"run\", \"python\", \"-m\", \"kernel_mail_mcp\"],\n \"env\": {}\n }\n }\n}\n```\n\n## How to Add It\n\nUse the Claude Code CLI command:\n\n```bash\nclaude mcp add --transport stdio --scope user kernel-mail-mcp -- \\\n uv run python -m kernel_mail_mcp\n```\n\nThis will automatically create or update `~/.claude.json` with the correct format.\n\n## Key Details\n\n- **`type: \"stdio\"`** - Specifies this is a local process server\n- **`command`** - The executable to run (`uv`)\n- **`args`** - Arguments passed to the command\n- **`env`** - Environment variables (empty object `{}` if none needed)\n- **`--scope user`** - Makes the server available across all projects (stored in `~/.claude.json`)\n\n## Verify the Server\n\nAfter adding, verify it's configured correctly:\n\n```bash\nclaude mcp list # List all servers\nclaude mcp get kernel-mail-mcp # Get details for your server\n```\n\nWithin Claude Code, use `/mcp` to see all available MCP tools from your server."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":6,"cache_creation_input_tokens":12588,"cache_read_input_tokens":21315,"output_tokens":441,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":12588,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"}},"requestId":"req_011CYcA9yi8CVhbUnP68vbZr","type":"assistant","uuid":"d6989b21-e96e-487f-a25a-739f2ce1086a","timestamp":"2026-03-01T09:55:08.472Z"}