Stop wasting tokens on MCPs: Global Scope vs Project Scope
If you use Claude Code with a few MCP servers, you’re probably paying for all of them in every project, even the ones you don’t touch. This…

Stop wasting tokens on MCPs: Global Scope vs Project Scope
If you use Claude Code with a few MCP servers, you’re probably paying for all of them in every project, even the ones you don’t touch. This is a short guide to checking your setup and fixing it.
Why MCP servers cost tokens
When you connect an MCP server, Claude Code loads all of its tool definitions into the context at session start. That includes every tool name, description, and parameter schema. These definitions stay loaded for the whole session and are sent with every request.
One server might be a dozen tools. Ten servers can be 100+ tools and tens of thousands of tokens, loaded before you type anything.
Prompt caching helps but doesn’t make it free. The cached tools are still read on every turn, and the cache expires after a few minutes of inactivity, so the next message pays to write it again. A bigger tool list also makes the model slower and less accurate at picking the right tool.
The fix is not to delete servers you need. It’s to load each one only where you use it. That’s what scope controls.
The three scopes
- local — loads for you, in this project only (the default). Stored in
~/.claude.jsonunder the project entry. - project — loads for anyone who checks out the repo. Stored in
.mcp.jsonat the repo root (committed). - user — loads for you, in every project. Stored in
~/.claude.json, top-level.
Most people add everything at user scope because it's always available. The downside is that it's always loaded. You pay for your Splunk tools while editing a frontend repo that never uses Splunk.
Rule of thumb: keep a server global only if you use it in almost every project. Everything else belongs to a project.
Check what you have
List your servers and their scopes:
claude mcp list
Get details on one:
claude mcp get jira
Inside a session, see what’s connected and check token usage:
/mcp
/context
/context shows where your context window is going, including a line for MCP tools. Note that number before you change anything.
Decide what to keep global
Go through claude mcp list and sort each server:
- Use it everywhere → keep global (
user) - Use it in specific repos → move to
project - Don’t use it → remove it
Also check for duplicates: the same server added twice, or two servers pointing at the same endpoint. Remove the extras.
Change the scope
Re-scoping is remove, then re-add at the right scope.
Remove from global:
claude mcp remove splunk --scope user
Re-add at project scope (shared with the team through a committed .mcp.json):
claude mcp add --transport http --scope project splunk "https://your-splunk-host/mcp"
For a local command instead of a URL:
claude mcp add --scope project my-tool -- /path/to/server --flag value
To keep it private to you in one project, use local (this is also the default if you leave out --scope):
claude mcp add --transport http --scope local internal-api "https://internal/mcp"
To remove a server for good, just don’t re-add it:
claude mcp remove old-duplicate --scope user
A project-scoped server lands in .mcp.json at the repo root:
{
"mcpServers": {
"splunk": {
"type": "http",
"url": "https://your-splunk-host/mcp"
}
}
}
Commit that file and anyone who opens the repo gets the server, only in that repo.
Verify
Scope changes take effect at session start, not mid-session. So:
- Start a new Claude Code session.
- Run
/contextagain. - Compare the MCP-tools number to before.
If you moved servers out of global, that number drops in every project that doesn’t re-add them.
A few related notes
- Plugins also add to context.
claude plugin listshows what's enabled; disable what you don't use withclaude plugin disable name@marketplace(reversible, no uninstall). - Check
settings.jsonforSessionStarthooks. A hook that prints a large file into context runs on every session. Trim it to what you need. - Picking the right model and context-window size for the task is the other half of cost control, separate from MCP scope.
Summary
- Connected MCP servers load their full tool list into context every session, used or not.
- Use scope to control where they load:
local,project, oruser. - Keep only the servers you use everywhere at global scope; move the rest to project scope.
- Check with
claude mcp listand/context, change withclaude mcp remove/add --scope, verify in a new session.
메타데이터
- post_id
- d10ad6a16191
- slug
- stop-wasting-tokens-on-mcps-global-scope-vs-project-scope-d10ad6a16191
- url
- https://medium.com/@akshatnerella/stop-wasting-tokens-on-mcps-global-scope-vs-project-scope-d10ad6a16191
- canonical_url
- https://medium.com/@akshatnerella/stop-wasting-tokens-on-mcps-global-scope-vs-project-scope-d10ad6a16191
- author_url
- https://medium.com/@akshatnerella
- status
- ok
- fetched_at
- 2026-06-20 20:29:01