← Back to list

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…

Akshat Nerella · 2026-06-17 20:59 · 0 claps · 3.0 min read
#mcp-server #claude-code #ai #claude #ai-coding
Open on Medium ↗
Wiki topics: LLM · Large Language Models AGT · AI Agents AI · AI · General 💻 · Programming

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.json under the project entry.
  • project — loads for anyone who checks out the repo. Stored in .mcp.json at 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:

  1. Start a new Claude Code session.
  2. Run /context again.
  3. 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 list shows what's enabled; disable what you don't use with claude plugin disable name@marketplace (reversible, no uninstall).
  • Check settings.json for SessionStart hooks. 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, or user.
  • Keep only the servers you use everywhere at global scope; move the rest to project scope.
  • Check with claude mcp list and /context, change with claude 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