Skip to main content
Glama
crzyc0d3r

mcp-context-engineering

by crzyc0d3r

mcp-context-engineering

一个小巧、可运行的项目,演示 MCP 服务器的上下文工程:让 Model Context Protocol 服务器在模型上下文窗口中占用的空间保持很小,从而使代理更便宜、更准确。

问题

当 MCP 客户端(Claude Desktop、Cursor、SDK 应用)连接到 MCP 服务器时,它会把 每一个 对外发布的工具定义——名称、描述和完整的输入 schema——拉入模型的上下文。一个拥有 30-60+ 个工具的服务器,在代理做任何事之前,就可能在这些定义上消耗超过 10k 个 token。这会导致两个问题:

  • 浪费 token。 你为代理永远不会调用的工具定义付费。

  • 降低准确性。 模型会被无关工具分散注意力,更可能选错工具或凭空捏造参数。

两种技术

这个项目在一个包含 33 个模拟 "web-data" 工具的目录上实现了修复方案的两半部分(这些工具包括 Amazon、LinkedIn、TikTok、GitHub、Zillow、浏览器自动化、批量抓取等),并按逻辑分组组织。

  1. 限定你对外发布的工具范围。 只加载代理所需的能力——要么按整个 GROUPS=social),要么 手动挑选 单个工具(TOOLS=web_data_amazon_product,...)。只有这些定义会进入上下文。

  2. 优化这些工具返回的输出。 在抓取页面进入上下文之前,去除浪费 token 的 Markdown(粗体/斜体、图片语法、标题标记、代码围栏、链接 URL),保留模型实际会读到的每一个词。

实测影响(来自随附的离线报告)

完整目录 = 33 个工具 ≈ 4,556 个 token 的定义(如果未做范围限定就加载)。

配置

工具

定义 token 数

相比全部节省

默认(仅基础工具)

3

506

89%

GROUPS=ecommerce

9

1,318

71%

GROUPS=social

11

1,566

66%

GROUPS=social,business

14

1,973

57%

TOOLS= amazon,ebay,google_shopping

3

416

91%

GROUPS=research + 1 个自定义工具

6

917

80%

PRO_MODE=true(加载全部)

33

4,556

0%

对抓取页面执行 strip-markdown:243 → 149 个 token(减少约 39%)。

这些数字使用内置的启发式 token 估算器;如果安装了 tiktoken,可向报告传入 --tiktoken 以获得精确计数。关键在于 比例,它们是稳定的。

一句话总结这个模式

限定你加载的工具,精简它们返回的输出,让 MCP 服务器处理困难的部分。

代码地图

mcp-context-engineering/
├── src/mcp_context_engineering/
│   ├── __init__.py          # Public API re-exports + version.
│   ├── tool_groups.py       # Source of truth for groups: BASE_TOOLS + 8 logical
│   │                        #   groups (ecommerce, social, business, research,
│   │                        #   finance, app_stores, browser, advanced_scraping)
│   │                        #   and helpers (all_tool_names, total_tool_count).
│   ├── tool_catalog.py      # Full catalog of 33 ToolSpecs: name, description,
│   │                        #   JSON input schema, and an OFFLINE mock handler
│   │                        #   each. Also MARKDOWN_TOOLS (which outputs to strip)
│   │                        #   and a SAMPLE_MARKDOWN_PAGE for the demo.
│   ├── context_config.py    # The scoping brain. Reads PRO_MODE / GROUPS / TOOLS,
│   │                        #   resolves the exact tool set (resolve_context),
│   │                        #   and defines named PRESETS.
│   ├── strip_markdown.py    # Dependency-free output optimiser: strips Markdown
│   │                        #   formatting, keeps words + code, links optional.
│   ├── token_utils.py       # Lightweight offline token estimator + tool-def
│   │                        #   token counting (tiktoken optional).
│   └── server.py            # The MCP server (official SDK low-level Server,
│   │                        #   stdio). Advertises only scoped tools; strips
│   │                        #   Markdown output. build_server() for tests.
├── scripts/
│   ├── run_server.py        # Launch the server over stdio (what a client runs).
│   └── token_report.py      # Offline demo: prints the savings tables above.
├── examples/
│   ├── claude_desktop_social_agent.json   # config: one group
│   ├── claude_desktop_price_monitor.json  # config: hand-picked tools
│   └── claude_desktop_pro_mode.json       # config: everything (baseline)
├── tests/
│   └── test_context_engineering.py        # 23 offline tests (unittest)
├── requirements.txt         # Just the official `mcp` SDK (tiktoken optional).
├── .env.example             # All config vars, documented.
└── .gitignore

各部分如何配合

tool_groups.py 定义哪些工具 名称 属于哪个组。tool_catalog.py 为每个名称提供完整的定义(描述 + schema)和一个模拟处理器。context_config.py 读取环境变量并决定要暴露的确切名称子集。server.pycontext_config 请求该子集,仅通过 tools/list 发布这些定义,并且——当 MARKDOWN_TOOLS 工具被调用时——在返回结果之前,将其输出经过 strip_markdown.py 处理。token_utils.py 为离线的 token_report.py 提供支持,后者在不接触网络的情况下量化这两项收益。

数据流

flowchart TD
    subgraph Config["Configuration (env vars)"]
        E["PRO_MODE / GROUPS / TOOLS<br/>STRIP_MARKDOWN"]
    end

    E --> RC["context_config.resolve_context()"]
    TG["tool_groups.py<br/>(group -> tool names)"] --> RC
    RC -->|"scoped list of tool names"| SRV["server.py (MCP Server)"]
    TC["tool_catalog.py<br/>(name -> description, schema, handler)"] --> SRV

    subgraph MCP["MCP session (stdio)"]
        CLIENT["MCP client / LLM agent"]
        SRV
    end

    SRV -->|"tools/list: ONLY scoped definitions"| CLIENT
    CLIENT -->|"tools/call(name, args)"| SRV
    SRV -->|"handler() output"| STRIP["strip_markdown.py<br/>(markdown tools only)"]
    STRIP -->|"trimmed text"| CLIENT

    RC -.offline.-> REPORT["scripts/token_report.py"]
    TC -.offline.-> REPORT
    TU["token_utils.py"] -.-> REPORT
    REPORT -.-> OUT["savings tables"]

快速开始

# 1. (optional) create a virtualenv
python -m venv .venv && source .venv/bin/activate    # Windows: .venv\Scripts\activate

# 2. install the one dependency
pip install -r requirements.txt

# 3. see the token savings - fully offline, no key, no network
python scripts/token_report.py
python scripts/token_report.py --json      # machine-readable

# 4. run the tests
python -m unittest discover -s tests -v

运行 MCP 服务器

该服务器通过 stdio 使用 MCP 协议通信,并且完全通过环境变量进行配置:

# default: just the small base tool set
python scripts/run_server.py

# a focused social-media agent
GROUPS=social python scripts/run_server.py

# hand-pick exactly the tools a price monitor needs
TOOLS=web_data_amazon_product,web_data_ebay_product,web_data_google_shopping \
    python scripts/run_server.py

# the un-scoped baseline (loads everything)
PRO_MODE=true python scripts/run_server.py

# disable output trimming
STRIP_MARKDOWN=false GROUPS=social python scripts/run_server.py

有效的组 ID:ecommercesocialbusinessresearchfinanceapp_storesbrowseradvanced_scraping。有关变量的完整列表,请参阅 .env.example

接入 MCP 客户端

examples/ 中的某个文件复制到你的客户端服务器配置中(对于 Claude Desktop,即 claude_desktop_config.json),将 /ABSOLUTE/PATH 替换为你代码检出目录的路径,然后重启客户端。这三个示例分别展示了限定的组、手动挑选的集合,以及加载全部内容的基线配置。

关于工具的说明

本项目中的每个工具处理器都返回 预设的离线示例数据。任何地方都没有 API 密钥,也没有网络访问——目标是演示上下文工程模式,而不是抓取真实网站。要让它变成真实实现,请将 tool_catalog.py 中的处理器替换为对实际 web-data 后端的调用,并从环境变量中读取其凭据(占位符 WEB_DATA_API_KEY 已在 .env.example 中说明)。

基于 / 灵感来源

许可证

MIT(如果存在 LICENSE 文件请参阅,否则请将示例代码视为 MIT 许可)。

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Free public MCP for AI agents — 193 tools, 44 workflows. No API key.

  • Deterministic AI agent microtools, no accounts/API keys. fetch_extract: 98% token cut. 38 tools.

  • See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/crzyc0d3r/mcp-context-engineering'

If you have feedback or need assistance with the MCP directory API, please join our Discord server