Skip to main content
Glama
rcjavier

cursor-mcp-token-facade

by rcjavier

cursor-mcp-token-facade

MIT · Cursor-facing MCP facade that keeps token spend low by exposing 5 host tools while proxying an unlimited number of child MCP servers behind a staged catalog.

This is the public, generalized package. It ships typical open examples (filesystem, memory, fetch, …). It does not include private house wiring.

Cursor host (always 5)
  search_tools · invoke_tool · mcp_status · search_resources · read_resource
        │
        ▼
  staged catalog: mode=names (default) | mode=schema | limit
        │
   ┌────┴────┬──────────┬─────────┐
 filesystem memory  fetch*   github*   (* enabled:false until needed)

License (why MIT)

License

Fit for this project

MIT (chosen)

Default for small Node/MCP utilities. Max adoption, trivial for Cursor users to vendor or fork. Matches @modelcontextprotocol/sdk ecosystem norms.

Apache-2.0

Better if you need an explicit patent grant for corporate legal. Use if your org requires it; functionally similar for this size of tool.

GPL / AGPL

Poor fit — scares adoption for editor tooling people copy into private configs.

Recommendation: ship MIT. Keep proprietary child configs (paths, secrets, moat servers) in a private repo; publish only the frozen facade + generic examples.


Related MCP server: MCP-Lens

Why tokens drop (typical model)

Assumptions: ~40 child tools with mid-size JSON schemas; Cursor injects ListTools every turn; agent searches before invoke.

Path

Fat (all schemas on host)

Facade + staged catalog

Δ

Host ListTools / turn

~1 000–3 000+ tok

~100–400 tok (5 slim tools)

often −60% to −90%

Discover 3 tools

full schemas dumped

mode=names ~0.3–0.4× schema mode

~−60% on search

Idle heavy servers

still listed / sometimes spawned

enabled: false → 0 process, 0 schemas

idle tax → 0

Exact savings depend on your children. Rule: never put full child schemas on the host; use search_tools → mode=schema only for the tool you are about to call.


Quick start (behind Cursor)

git clone https://github.com/rcjavier/cursor-mcp-token-facade.git
cd cursor-mcp-token-facade
npm install
mkdir -p "${WORKSPACE_ROOT:-$HOME/workspace}/sandbox"   # filesystem child root
cp examples/profiles/token-light.child-servers.json child-servers.json
# or: cp child-servers.json.example child-servers.json
chmod +x start.sh

Wire one absolute path into the project .cursor/mcp.json:

{
  "mcpServers": {
    "cursor-mcp-token-facade": {
      "command": "/ABSOLUTE/PATH/cursor-mcp-token-facade/start.sh",
      "args": []
    }
  }
}

Disable duplicate marketplace MCP plugins for the same servers you put behind the facade (otherwise Cursor still dumps their tools onto the host).

Reload Cursor MCP.

Agent loop

1. search_tools  { "query": "file", "mode": "names", "limit": 10 }
2. search_tools  { "query": "filesystem__read_file", "mode": "schema", "limit": 1 }
3. invoke_tool   { "tool_name": "filesystem__read_file", "payload": { ... } }

Built-ins always available: echo, calc, plus mcp_status.


Child config (typical examples)

Child

Default

How

filesystem

ON

npx -y @modelcontextprotocol/server-filesystem ${WORKSPACE_ROOT}/sandbox

memory

ON

npx -y @modelcontextprotocol/server-memory

everything

OFF

Official demo kitchen-sink server

fetch

OFF

HTTP fetch MCP

github

OFF

HTTP + Authorization: Bearer ${GITHUB_PAT}

Flip with "enabled": false and reload. Schema: child-servers.schema.json. Live file child-servers.json is gitignored — never commit secrets.

Env expansion: ${WORKSPACE_ROOT}, ${HOME}, ${GITHUB_PAT}, …


Develop

npm test          # staged catalog + token-light profile contracts
npm start         # stdio (what Cursor uses)
MCP_FACADE_MODE=http npm run start:daemon   # optional localhost JSON door :8766

What this is / is not

Is

Is not

Frozen token-law facade + generic examples

Your private stack / moat MCP wiring

Drop-in Cursor stdio server

A replacement for Cursor’s plugin OAuth UX

Safe to open-source under MIT

A dump of machine-specific child-servers.json

Private, opinionated instances should stay private. Publish the pattern; keep the moat local.

Available Tools

5 tools
invoke_toolA

Invoke a built-in or child tool by exact name (serverName__toolName). Discover names via search_tools; child roster via mcp_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadYesJSON arguments for the target tool
tool_nameYesExact name from search_tools (e.g. 'echo' or 'filesystem__read_file')

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose the addressing scheme and the discovery path. However, it says nothing about the invocation mechanics that matter here: that the payload is forwarded verbatim, that the target tool's errors/behavior are surfaced, or that this proxy can trigger destructive operations on the target. The disclosure is useful but thin for a generic dispatch tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the discovery dependency. No filler, and the most important information (exact name format) comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic dispatch tool with no annotations and no output schema, the definition covers purpose and name acquisition but omits how results come back and how target failures propagate. It is callable, but an agent lacks the runtime expectations this kind of tool warrants.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented in the schema, including the exact-name format and payload semantics. The description's naming-format clause largely restates the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Invoke') and resource ('built-in or child tool by exact name'), and the '(serverName__toolName)' clause pins down the addressing model. It is clearly separable from its siblings: search_tools discovers names and mcp_status enumerates children, while this one executes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes the agent to the right prerequisite tools ('Discover names via search_tools; child roster via mcp_status'), which tells the agent what to do first. It stops short of stating exclusions or when a direct/sibling call is preferable, so it gives clear context but not full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_statusA

Live status of every child MCP server: name, type, enabled, connected, tool/resource counts, tool names, errors. Use this for roster — not search_tools/invoke_tool descriptions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does reasonably well: 'Live status' signals a dynamic read, and the enumerated fields include 'errors', telling the agent it can surface per-server failures. It does not say whether the call is read-only, whether it probes servers actively, or what happens when a child server is unreachable beyond the 'errors' field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the resource and its return contents, then the routing guidance. The field enumeration is dense but each item earns its place by telling the agent what it gets back in the absence of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description compensates by listing the returned fields, and with zero parameters there is nothing else to cover on the input side. Minor gaps remain: no note on permissions, latency, or whether 'Live' means an active probe of each child server.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to document; the 4 baseline applies. The description correctly avoids inventing filtering options that the empty schema does not support.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('Live status of every child MCP server') and enumerates the exact fields returned (name, type, enabled, connected, tool/resource counts, tool names, errors). It also distinguishes itself from the sibling tools by name, so an agent can tell it apart from search_tools/invoke_tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes usage ('Use this for roster') and names the tools it is not for (search_tools/invoke_tool descriptions). The exclusion is a little terse — it doesn't spell out the selecting condition beyond 'roster' — but the when/when-not framing is clear enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_resourceA

Read one MCP resource by URI from the owning child server.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesExact URI from search_resources

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a non-mutating single-resource fetch and clarifies routing to the owning child server, but says nothing about error behavior when the URI is unknown, permission requirements, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with a clear verb-resource-scope structure and zero filler; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description is adequate on mechanics but does not state what a successful read yields or how failures surface, leaving the agent to infer the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the 'uri' parameter and its provenance are already documented in the schema; the description adds only the 'owning child server' routing nuance and no format details. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (one MCP resource) plus the key scoping detail that it is addressed by URI from the owning child server. It is clearly distinct from search_resources, though it does not name the sibling explicitly in the description itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the schema notes the URI must come from search_resources, which suggests a search-then-read workflow, but the description gives no explicit when-to-use, prerequisites, or when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_resourcesB

Search MCP resources across connected children. Call mcp_status for roster.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch keyword

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it discloses nothing about read-only behavior, result limits, pagination, or what happens when no children match. It adds only the roster pointer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and the prerequisite hint trailing. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter search tool this is close to adequate, but with no annotations and no output schema, the description leaves the agent guessing about result shape and whether results span all children or must be scoped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single query parameter, so the baseline is 3. The description adds no query syntax, matching semantics, or formatting beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (MCP resources) plus scope (across connected children), which distinguishes it from siblings like search_tools and read_resource. It does not explicitly name a sibling it is not, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The pointer to mcp_status for the roster implies a discovery prerequisite but does not state when to use this tool versus search_tools or read_resource. Usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_toolsA

Search child MCP tools by keyword. Default mode=names (name/description/category only). Use mode=schema for one tool (or tight query) to fetch inputSchema. Optional limit caps hits. Call mcp_status for child server roster.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNonames (default) = compact; schema = include inputSchema
limitNoMax hits (default 20)
queryYesKeyword (e.g. 'file', 'memory', 'github', 'fetch')

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose mode semantics, that names mode returns name/description/category only, and that limit caps hits, but says nothing about read-only nature, whether the search spans all child servers, or truncation/ordering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, zero waste, with the core purpose front-loaded and the default mode stated immediately after. Every sentence adds actionable detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description responsibly describes what each mode returns. It covers mode selection, result shape, and the roster alternative, leaving only search scope and truncation unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: names mode returns 'name/description/category only' (more than the schema's 'compact') and clarifies limit 'caps hits'. Mode and limit behavior are therefore understood without inspecting the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search child MCP tools by keyword'), which clearly separates it from invoke_tool and the resource-oriented siblings. It never explicitly contrasts itself with search_resources, so sibling differentiation is implied by the word 'tools' rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance: default to mode=names, switch to mode=schema for a single tool or tight query, and call mcp_status for the roster. It provides an alternative (mcp_status) but no explicit when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedinvoke_tool
    • First observedmcp_status
    • First observedread_resource
    • First observedsearch_resources
    • First observedsearch_tools

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct facet of the facade: search_tools (tool discovery), invoke_tool (execution), mcp_status (child server roster), search_resources and read_resource (resource discovery and access). Descriptions actively cross-reference each other to steer agents away from misselection, e.g. 'Use this for roster — not search_tools/invoke_tool descriptions.'

Naming Consistency4/5

Four of five names follow a clean verb_noun snake_case pattern (search_tools, invoke_tool, search_resources, read_resource). mcp_status breaks the pattern as a noun phrase, though it is still readable and unambiguous.

Tool Count5/5

Five tools is well-suited to a thin facade layer: discovery, invocation, status, and resource read/write-lite operations. Nothing feels redundant or padded, and no core proxy role is left without a tool.

Completeness4/5

The set covers tool discovery/invocation, server status, and resource search/read, giving a workable lifecycle for proxying child MCP servers. However, MCP prompts (search_prompts/get_prompt) are absent, and there is no bulk schema listing for tools, which could force repeated single-tool fetches.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides per-Subagent MCP controls to any coding agent or client across all your MCPs and prevents context window waste. Loads only 3 tools instead of all your MCP Server's tool definitions. Agents discover tools on-demand, only when needed and only the servers and tools they are allowed.
    4
    36 PyPI
    41
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Acts as a proxy/router for multiple downstream MCP servers, exposing only meta-tools to the host to reduce token usage, enabling efficient search and invocation of tools from a fleet of servers.
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to use many MCP servers without context bloat by exposing meta-tools (search, load, call, run_code) that reduce token usage via progressive disclosure and result trimming.
    12 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables agents to search a lightweight catalog, inspect permissions, lazily start trusted MCP servers, and call child tools without keeping all schemas in context. It also loads approved skills on demand and routes third-party additions through a human approval queue.
    1
    1
    MIT