情境化mcp
与项目无关的MCP服务器,用于角色加载、文档搜索、代码搜索和缓存测试执行。提供编码代理 按需、分级访问 在会话开始时,无需预先加载整个上下文窗口。
代币节省
| 度量 | 基线 | 结果 |
|---|---|---|
| 有效性与grep | 代理使用 grep -C 10 查找相关线路 | 节省58.8% |
| 有效性与文件 | 代理在找到整个文件后读取它们 | 节省了75.7% |
| 质量(hit@5) | 结果集包含预期的文件或部分 | 89% |
在26个文件上测量,v0.4.02026-04-06。跑 bun benchmark.js --update-readme 再生。
看 docs/benchmarks.md 方法论。
______________________________________________________________________
推荐的工作流程
get_status--检查哪些功能可用,以及角色是否已经处于活动状态。list_personas→load_persona--为您的任务选择并安排合适的专家。search_docs--在打开完整文件之前拉取目标文档部分。search_code--在读取完整文件之前找到相关的代码块。- 使用
get_doc/get_code_file只有当你需要完整的内容时。
______________________________________________________________________
配置
已配置 专门地 通过环境变量——没有配置文件或CLI参数。
在中设置变量 env 你的块 .mcp.json (或等效的主机配置)。\ 省略变量 禁用相应功能 并完全移除其工具。
所有环境变量
| 变量 | 类型 | 默认值 | 描述 |
|---|---|---|---|
CONTEXTSERVER_REPOROOT | string | 服务器目录 | 测试命令和相对路径解析的基本目录。设置为 "." 使用MCP主机的工作目录。 |
CONTEXTSERVER_DOCSLOCATIONS | JSON数组 | -- | 包含以下内容的目录 .md 文档文件。 |
CONTEXTSERVER_PERSONASLOCATIONS | JSON数组 | -- | 包含以下内容的目录 .md 代理角色文件。 |
CONTEXTSERVER_CODELOCATIONS | JSON数组 | -- | 用于代码搜索的索引目录。多个条目被合并到一个可搜索的索引中。 |
CONTEXTSERVER_WATCHLOCATIONS | JSON数组 | 自动导出 | 要注意热重新加载的目录。默认为所有已配置内容位置的联合。 |
CONTEXTSERVER_BLOCK_SIZE | 整数(≥5) | 30 | 每个代码块的最大行数。功能增加;减少扫描速度。 |
CONTEXTSERVER_CODE_EXTENSIONS | JSON数组 | [".js",".ts",".jsx",".tsx",".json",".md"] | 索引的文件扩展名。例如 [".py",".go"] 对于Python/Go项目。前导点是可选的。 |
CONTEXTSERVER_URLS | JSON数组 | -- | 要获取、剥离、拆分为部分并包含在其中的外部URL search_docs 结果。 |
CONTEXTSERVER_URL_TTL | 整数(秒) | 3600 | 在重新获取之前缓存获取的URL内容需要多长时间。 |
CONTEXTSERVER_TEST | JSON对象 | -- | 测试运行器配置(见下文)。 |
CONTEXTSERVER_TEST 对象字段
| 关键字 | 类型 | 默认值 | 描述 |
|---|---|---|---|
commands | string\[\] | [] | 要运行的Shell命令,例如。 ["bun test", "bun run typecheck"]每个都是按顺序执行的。 |
hashLocations | string\[\] | [] | 对其文件进行哈希处理以检测更改的目录。如果哈希与缓存匹配,则跳过测试。 |
hashExtensions | string\[\] | [".js",".ts",".jsx",".tsx",".json",".md"] | 计算哈希时要包含的文件扩展名。 |
cacheFile | 字符串 | .cache/test_cache.json | 写入结果缓存的路径(相对于 REPOROOT). |
timeout | 整数(ms) | 30000 | 每个命令超时(毫秒)。超过此值的命令将被终止并标记为失败。 |
示例 .mcp.json --单一回购
{
"mcpServers": {
"contextful-mcp": {
"type": "stdio",
"command": "/path/to/contextful-mcp.exe",
"env": {
"CONTEXTSERVER_REPOROOT": ".",
"CONTEXTSERVER_DOCSLOCATIONS": "[\"./docs\"]",
"CONTEXTSERVER_PERSONASLOCATIONS": "[\"./agent_personas\"]",
"CONTEXTSERVER_CODELOCATIONS": "[\"./src\"]",
"CONTEXTSERVER_TEST": "{\"hashLocations\":[\"./src\",\"./tests\"],\"commands\":[\"bun test\"],\"hashExtensions\":[\".js\",\".ts\"]}"
}
}
}
}示例——多个文档和代码目录
在JSON数组中提供多条路径。所有这些都被合并到一个可搜索的索引中。
"CONTEXTSERVER_DOCSLOCATIONS": "[\"./docs\", \"./packages/core/docs\", \"./packages/api/docs\"]",
"CONTEXTSERVER_CODELOCATIONS": "[\"./src\", \"./packages/core/src\", \"./packages/api/src\"]"示例——多仓库(为两个单独的项目建立索引)
使用绝对路径同时对来自多个存储库的源进行索引。\ 这 directory= 过滤入 search_code 让代理将查询范围限定到特定的仓库。
"CONTEXTSERVER_REPOROOT": "/home/user/projects/backend",
"CONTEXTSERVER_CODELOCATIONS": "[\"/home/user/projects/backend/src\", \"/home/user/projects/frontend/src\"]",
"CONTEXTSERVER_DOCSLOCATIONS": "[\"/home/user/projects/backend/docs\", \"/home/user/projects/frontend/docs\"]"提示: 使用search_code(query, directory="backend/")或search_code(query, directory="frontend/")限制结果。
示例-索引外部URL(例如API参考文档)
提取的页面被剥离HTML,分割成多个部分,并在 search_docs 结果。
"CONTEXTSERVER_URLS": "[\"https://developers.cloudflare.com/workers/runtime-apis/\", \"https://bun.sh/docs/bundler\"]",
"CONTEXTSERVER_URL_TTL": "3600"示例——Python/Go项目
"CONTEXTSERVER_CODE_EXTENSIONS": "[\".py\", \".pyi\"]",
"CONTEXTSERVER_BLOCK_SIZE": "50"______________________________________________________________________
工具参考
工具是有条件注册的——只有那些配置了功能组的工具才会出现在代理的工具列表中。
始终可用
| 工具 | 参数 | 说明 |
|---|---|---|
get_status | -- | 索引统计信息(文件计数、块计数、节计数),启用了哪些功能,以及当前活动的角色。在加载角色之前检查此项——它可能已经处于活动状态。 |
get_usage | -- | 使用指南:所有可用工具、推荐的工作流程和特定功能的提示。新加入服务器时,请先调用此命令。 |
get_metrics | -- | 运行时性能指标:每个工具调用计数、平均延迟、索引重建计数、测试缓存命中率。 |
report_bad_result | tool, query, reason, expected? | 报告无效或错误的搜索结果。将结构化反馈记录到stderr,以帮助识别随时间推移的排名差距。 |
Persona工具-需要 CONTEXTSERVER_PERSONASLOCATIONS
| 工具 | 参数 | 说明 |
|---|---|---|
list_personas | -- | 列出所有角色名称及其单行目的。先称之为选择合适的角色。 |
load_persona | name, full?, field? | 加载一个命名角色。默认情况下返回一张紧凑型卡。通过 full=true 对于完整的系统提示。通过 field= (例如。 "tools", "background", "use_cases",或任何 ## heading)检索单个属性而不加载所有内容。 |
create_persona | name, description, prompt_body, use_cases?, tools?, background?, overwrite? | 编写一个新的结构化角色 .md 文件并立即索引 |
文档工具——需要 CONTEXTSERVER_DOCSLOCATIONS (或 CONTEXTSERVER_URLS)
| 工具 | 参数 | 说明 |
|---|---|---|
list_docs | -- | 列出所有索引文档文件及其标题。 |
search_docs | query, limit? (默认值为5,最大值为10) | 在所有文档文件中进行分级部分搜索 和 任何索引的URL。返回包含源、标题和评分层(强/部分/弱)的部分。章节的长度上限约为600个字符;使用 get_doc 如果结果被截断。 |
get_doc | name, section? | 文档文件的完整内容。通过 section= 只返回一个已命名的 ## 标题(不区分大小写的子字符串匹配)。更喜欢 search_docs 用于有针对性的查询。 |
analyze_doc | name | 审核文档的节结构以确定搜索质量:标记过长、过短或结构错误的节,以便进行排名检索。 |
代码搜索工具--必需 CONTEXTSERVER_CODELOCATIONS
| 工具 | 参数 | 说明 |
|---|---|---|
search_code | query, is_regex?, language?, directory?, limit? (默认值5,最大值20) | 在所有索引的源文件中对代码块进行排序搜索。 language 按扩展名过滤(例如。 "ts"); directory 按路径子字符串过滤(例如。 "src/api/").使用 is_regex=true 对于正则表达式模式。返回带有文件路径和行号的得分块。 |
get_code_file | path | 索引源文件的完整内容。使用来自的路径 search_code 结果。 |
测试工具——需要 CONTEXTSERVER_TEST
| 工具 | 参数 | 说明 |
|---|---|---|
check_tests | — | 从这里开始。 运行测试(如果没有更改,则返回缓存结果)并返回紧凑的通过/失败。失败时,列出每个失败的测试及其文件路径和行号,以便您可以直接找到问题所在。更新缓存。 |
get_test_results | -- | 返回完整的测试输出(所有stdout+stderr)。仅在以下时间后致电 check_tests 报告失败,您需要完整的错误上下文。 |
______________________________________________________________________
备注
- 锁定文件(例如。
bun.lock,package-lock.json)和压缩文件(.min.js)自动从代码索引中排除。 - 多个目录中重复的角色或文档名称会向stderr发出警告;最后加载的文件获胜。
- Hot reload监视配置的位置以进行更改,并重建索引(取消2秒)。
CONTEXTSERVER_WATCHLOCATIONS默认为所有内容位置的联合,因此很少需要显式设置。 - 数组env变量中的所有路径都可以是绝对路径,也可以是相对于
CONTEXTSERVER_REPOROOT. CONTEXTSERVER_URLS内容在启动时和每次热重新加载时(在TTL内)获取。在获取失败时,将保留之前缓存的内容。
