关于 ExpertPack MCP
ExpertPack MCP 将 ExpertPack 知识包作为可查询的知识服务提供给兼容 MCP 的 Agent,结合混合检索、图扩展与来源溯源信息。
主要功能
- 01词法与向量混合检索
- 02按意图调整检索权重
- 03基于图的结果扩展
- 04来源溯源与内容重构
- 05多知识包路由与索引
适用场景
- 01为 Agent 检索领域知识
- 02查看结果对应的来源片段
- 03浏览知识包主题与图链接
MCP 相关
向 MCP 客户端提供搜索、读取、主题浏览和图遍历工具,以及知识包资源。支持 Streamable HTTP 和 stdio 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx ep-mcpGEMINI_API_KEY密钥Gemini API key for embeddings (or set AZURE_OPENAI_API_KEY when using Azure OpenAI)AZURE_OPENAI_API_KEY密钥Azure OpenAI key, if the config uses the Azure embedding provider本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ep-mcp
通过模型上下文协议提供专家知识即服务。
一个 MCP 服务,可将任意 ExpertPack 转换为实时、可查询的知识服务。任何兼容 MCP 的 Agent(Claude Desktop、Cursor、Windsurf、Claude.ai、自定义宿主)都能连接并通过标准化工具获取高质量、来源信息丰富的领域专业知识。
🌐 expertpack.ai · 📦 ExpertPack 框架 · 📖 架构
在针对生产环境 v4.1 原子概念包(658 个分块)的 22 个问题基准测试中,检索命中率为 97.6%,完全未命中数为 0。同一知识包和评估集在此前 v4.0 基线中的结果为 65.1%。
功能
- 感知架构的混合检索:BM25 + 向量搜索(sqlite-vec)、元数据加权、MMR 重排、自适应阈值过滤、长度惩罚
requires:扩展(schema v4.1 atomic-conceptual):当某个 top-K 原子条目的 frontmatter 声明requires: [B, C]时,系统会自动将引用的原子条目追加到结果中,作为标记为requires_expanded=True的额外SearchResult。扩展具有方向性(A→B 不代表 B→A),最多传递 2 跳,最多包含 3 个原子条目且累计不超过 3,500 个 token,并在max_results切片之后追加,因此绝不会挤占 top-K 结果。- 感知意图的路由:自动对查询进行分类(ENTITY/HOW/WHY/WHEN/GENERAL),并按查询调整向量/BM25 融合权重——无需 LLM
- 查询嵌入缓存:基于 SQLite 的缓存,以
(model, dimension, sha256(query))为键——热查询延迟从约 4 秒(实时 Gemini API)降至约 1 毫秒 - 深度图遍历:可选地通过知识图谱边执行多跳 BFS 扩展,并为每跳应用分数衰减以防止偏移
- 预留槽位图合并:可配置最终 top-K 中受保护的预留槽位,用于图扩展邻居,因此即使核心结果占据主导,相关文件也能显示出来
- BM25 回退模式:嵌入提供方不可用时,会优雅地降级为纯词法搜索(覆盖率 + 密度 + 路径 + 长度评分),而不是直接报错
- 交叉编码器重排器:可选的第二阶段精确度重排器(默认禁用,启用时热延迟约为 70 毫秒)
- 优先追溯来源:每个结果都包含
id、content_hash、verified_at、source_file - 重构模式(RFC-003):选择启用
reconstruct=true/reconstruct: true后,结果会附带fragment_id、line_range、original_markdown、跨度级content_hash、excerpt、stale和字节偏移量,使 Agent 能准确证明答案所依据的源文本 - EP 原生分块:文件作为原子检索单元处理(只有内容过长时才在
##/###处分割)。拆分后的分块保留原始跨度作为content/span_hash,携带计算得出的line_range,并记录heading_path(0.7.0+) - 标题路径(0.7.0+):每个命中结果都带有
heading_path(例如["Routing", "Setup", "Ports"]),因此 H3 命中结果会保留其 H2 父级;ep_read(path, section=..., neighbors=true)只读取该章节及其前后相邻章节 - 时效性(0.7.0+,ExpertPack Core 4.2):命中结果和
ep_read会附带verified_age_days、age_stale(verified_at早于文件的refresh或清单中的freshness.refresh_cycle)、expired和expires_at(可变内容的 TTL)。stale保持原有含义——索引漂移(文件自建立索引后发生变化,仅适用于重构模式)。可选通过retrieval.freshness_penalty下调排名(默认值为0.0= 关闭) - 通过 MCP 提供 Skills(0.7.0+,可选启用):在某个包的
manifest.yaml中设置mcp.skills.enabled: true,即可声明io.modelcontextprotocol/skills扩展(SEP-2640)。每个包对应一个位于skill://{slug}/SKILL.md的技能(自动生成),每个非on_demand文件均通过skill://{slug}/{path}原样提供;skills/list/skills/get会发布包含 SHA-256 摘要、大小、ttlMs和cacheScope的清单。目前宿主支持仍有限,因此ep_*工具仍是主要使用方式 - 感知 frontmatter:提取嵌入内容中的元数据,并提取
type、tags、requires等字段用于加权/扩展/筛选 - 增量索引:基于内容哈希检测过时内容——仅对发生变化的文件重新生成嵌入
- 多包支持:在
/packs/{slug}/mcp根据路径路由 - 感知图谱的检索:可选在检索后通过
_graph.yaml邻接关系进行扩展;当图谱导出提供了本体/实体节点时,也会包含已接受的节点 context_prefix(RFC-004):在索引时将侧边文件中的情境说明字符串添加到嵌入和 BM25 检索文本前;返回文本/重构文本仍为原始原子条目正文- 层级 / 导航筛选器:
retrieval_strategy: navigation、_index.md、source-coverage.md和context.on_demand文件会从 RAG 池中排除(仍可通过ep_read/ 资源读取) - 工具:
ep_search— 主要的混合检索工具ep_read— 按路径或来源 ID 加载整个原子条目(消费循环第 2 步)ep_list_topics— 浏览包结构和可用内容类型ep_graph_traverse- 多包 stdio 支持:所有工具都接受
pack参数,以便在配置了多个包时进行路由。单包配置中pack为可选项(默认使用唯一配置的包)。
- 资源:
ep://{slug}/manifestep://{slug}/authorityep://{slug}/filesep://{slug}/file/{+path}(包含 frontmatter 的原始内容)skill://{slug}/SKILL.md、skill://{slug}/{+path}(仅当mcp.skills.enabled: true时)
- 传输方式:Streamable HTTP(主要方式,适用于云端)、stdio(本地开发)
- stdio 多包支持(0.6.0+):使用
--transport stdio且配置了多个包时,所有工具都接受可选的pack参数(slug 字符串),用于指定要查询的包。单包配置中pack为可选项,默认使用唯一配置的包。这样,MCP 宿主(Cursor、Claude Desktop)可以通过单个 stdio 进程使用多个包,无需每个包启动一个进程。
- stdio 多包支持(0.6.0+):使用
- HTTP 端点:
GET /search(供非 MCP HTTP 客户端使用) - 黄金检索评估(0.7.0+):
tests/eval/— YAML 查询集(按最佳结果优先的expected、must_not、category),按包和类别计算 recall@1/3/5、MRR 以及must_not违规次数。默认运行时跳过;使用EP_EVAL_TODAY=2026-10-20和可选的EP_EVAL_MIN="recall@5=0.9,mrr=0.7"运行pytest tests/eval -m golden --golden <dir> --packs-root <dir>,或运行python tests/eval/golden_eval.py --golden <dir> --today 2026-10-20 - 身份验证:API 密钥(第 1 阶段),设计上支持 OAuth 2.1(第 2 阶段)
快速开始
安装
git clone https://github.com/brianhearn/ep-mcp.git
cd ep-mcp
pip install -e .[dev]
配置
创建 config.yaml,至少包含:
server:
host: "127.0.0.1"
port: 8000
log_level: "info"
# Required for public Host headers (SDK v2 DNS-rebinding protection).
# See DEPLOYMENT.md — omit and Streamable HTTP returns 421.
mcp_allowed_hosts:
- "localhost"
- "localhost:*"
- "127.0.0.1"
- "127.0.0.1:*"
packs:
- slug: "my-pack"
path: "/path/to/your/expertpack"
api_keys:
- "your-secret-key-here"
embedding:
provider: "gemini" # "gemini" (default) or "azure-openai"
model: "gemini-embedding-001"
完整配置参考——包括嵌入提供方、检索调优(mmr_lambda、min_score、default_max_results、图扩展、重排器、requires: 扩展等)、生产环境 systemd 配置和部署注意事项——请参阅 DEPLOYMENT.md。
运行
ep-mcp serve --config config.yaml
服务启动时会构建/更新 SQLite 索引(FTS5 + sqlite-vec)。0.5.0 需要重建现有索引(index_features=context_prefix_v1+nav_filter_v1);启动时会自动完成,也可以先删除 <pack>/.ep-mcp/。
GET /search HTTP 端点可通过以下地址访问:
GET /search?q=<query>&pack=<slug>&n=10
添加 &reconstruct=true,即可包含原始 Markdown 片段和来源信息块,以供核验。
请求头为 Authorization: Bearer <key>。
环境变量
只需配置所用嵌入提供方的密钥。
| 变量 | 必需 | 说明 |
|---|---|---|
GEMINI_API_KEY | 如果 embedding.provider: gemini | Gemini 嵌入 API 密钥 |
AZURE_OPENAI_ENDPOINT | 如果 embedding.provider: azure-openai | Azure OpenAI 资源端点 |
AZURE_OPENAI_API_KEY | 如果 embedding.provider: azure-openai | Azure OpenAI API 密钥 |
EP_MCP_KEY_{SLUG} | 可选 | 每个知识包的 API 密钥覆盖项(slug 转为大写,连字符替换为下划线) |
EP_MCP_REMOTE_HOST | 可选 | scripts/deploy.sh 的部署目标 |
EP_MCP_REMOTE_SRC | 可选 | deploy.sh 的远程源路径 |
EP_MCP_REMOTE_SITE_PKG | 可选 | deploy.sh 的远程 site-packages 路径 |
技术栈
- 语言:Python 3.12+
- MCP 框架:官方
mcpSDK v2(MCPServer,规范 2026-07-28,与 2025 年客户端双时代兼容) - 存储:SQLite,搭配 FTS5 + sqlite-vec
- 嵌入:Gemini(默认),可配置 Azure OpenAI / OpenAI 提供方
- Web:Starlette + Uvicorn(用于 Streamable HTTP)
- CLI:Click
确切依赖项请参阅 pyproject.toml。
项目结构
详细的模块划分、检索流程、索引策略和设计决策,请参阅 ARCHITECTURE.md。
相关项目
- expertpack.ai — 框架网站、社区知识包和文档
- ExpertPack — 架构框架、验证工具、Obsidian 兼容性和社区知识包
- ExpertPacks — 已发布的知识包(私有)
- EasyTerritory MCP(未来)— 构建于此代码库和
ezt-designer知识包之上的领域专用层
许可证
Apache 2.0 © 2026 Brian Hearn
作者
Brian Hearn — 3 天内构建完成(2026 年 4 月 10–11 日)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。