Skip to content

Latest commit

 

History

History
343 lines (235 loc) · 7.83 KB

File metadata and controls

343 lines (235 loc) · 7.83 KB

QMD MCP 兼容性分析

版本: 1.0.0 用途: 与原版 QMD (TypeScript) 的兼容性分析


概述

本文档分析原始 QMD (TypeScript/Bun) 的 MCP Server 实现,说明 qmd-python 如何保持兼容。

文档关系


原始 QMD MCP Server 分析

文件位置

  • 实现: D:\MoneyProjects\qmd\src\mcp.ts
  • 测试: D:\MoneyProjects\qmd\src\mcp.test.ts
  • 文档: D:\MoneyProjects\qmd\skills\qmd\references\mcp-setup.md

启动方式

qmd mcp

Transport: Stdio (通过 @modelcontextprotocol/sdk/server/stdio.js)

MCP SDK: @modelcontextprotocol/sdk/server/mcp.js

版本: MCP spec 2025-06-18


兼容性对比

核心接口对比

功能 原版 QMD (TypeScript) qmd-python (Python) 兼容性
MCP Protocol MCP 2025-06-18 MCP 2025-06-18 ✅ 100%
Transport Stdio only Stdio + HTTP ✅ 扩展
Tools 数量 6 个 6 个 ✅ 完全相同
Resources 1 个 1 个 ✅ 完全相同
Prompts 1 个 1 个 ✅ 完全相同
Tool 名称 search, vsearch, query, get, multi_get, status 完全相同 ✅ 完全相同
参数 Schema Zod (TypeScript) JSON Schema ✅ 等效
输出结构 content + structuredContent 完全相同 ✅ 完全相同

MCP Tools 兼容性

完整的 MCP Tools 接口定义请参考:mcp-tools.md

快速参考

Tool 参数 默认值 兼容性
search query, limit, minScore, collection limit=10, minScore=0
vsearch query, limit, minScore, collection limit=10, minScore=0.3
query query, limit, minScore, collection limit=10, minScore=0
get file, fromLine, maxLines, lineNumbers lineNumbers=false
multi_get pattern, maxLines, maxBytes, lineNumbers maxBytes=10240
status (无参数) -

MCP Resources 兼容性

完整的 Resource 定义请参考:mcp-tools.md

Resource 对比

属性 原版 QMD qmd-python 兼容性
URI 模板 qmd://{+path} qmd://{+path}
MIME 类型 text/markdown text/markdown
list undefined undefined
路径解析 {collection}/{path} {collection}/{path}
URI 编码 每段编码,保留斜杠 每段编码,保留斜杠

关键差异

1. Transport 扩展

原版 QMD: 仅支持 Stdio Transport

qmd-python: 同时支持 Stdio 和 HTTP Transport

影响:

  • ✅ 正向兼容:AI Agent 可以正常使用
  • ✅ 功能扩展:HTTP API 提供更多使用场景

2. 实现语言

原版 QMD: TypeScript + Bun + node-llama-cpp

qmd-python: Python + PyTorch + fastembed

影响:

  • ✅ 接口完全兼容
  • ✅ 行为保持一致
  • ⚠️ 底层模型实现不同(对用户透明)

3. 模型支持

原版 QMD:

  • Embedding: llama-cpp-python (GGUF)
  • 存在问题:Windows 稳定性

qmd-python:

  • Embedding: fastembed-gpu (ONNX + PyTorch)
  • 优势:Windows 稳定性好,GPU 加速

影响:

  • ✅ 更稳定
  • ✅ 更快(GPU 加速)
  • ✅ 接口兼容

兼容性检查清单

Phase 1: 核心 Tools (P0)

必须完全兼容

  • Tool: search

    • 参数名称和类型
    • 输出结构(content + structuredContent)
    • 结果字段(docid, file, title, score, context, snippet)
    • 默认值(limit=10, minScore=0)
  • Tool: vsearch

    • 参数名称和类型
    • 向量索引检查(不存在时返回 isError)
    • 默认值(limit=10, minScore=0.3)
  • Tool: query

    • 参数名称和类型
    • RRF 融合
    • 降级策略(无向量索引时仅 FTS)
  • Tool: get

    • 参数(file, fromLine, maxLines, lineNumbers)
    • 支持 file.md:120 语法
    • 输出 Resource 格式
    • 相似文件建议(可选)
  • Tool: multi_get

    • 参数(pattern, maxLines, maxBytes, lineNumbers)
    • Glob 模式支持
    • 超大文件跳过机制
  • Tool: status

    • 无参数
    • 输出结构(totalDocuments, needsEmbedding, hasVectorIndex, collections)

Phase 2: Resources (P1)

  • Resource: qmd://{+path}
    • list: undefined
    • MIME type: text/markdown
    • URI 编码规则
    • 路径解析逻辑

Phase 3: Prompts (P2)

  • Prompt: query
    • Markdown 格式指南
    • 6 个工具说明
    • 搜索策略建议

测试策略

单元测试

  1. 参数验证

    • 必需参数缺失
    • 参数类型错误
    • 默认值正确
  2. 输出格式验证

    • JSON Schema 匹配
    • structuredContent 存在
    • 字段完整性
  3. 边界情况

    • 空结果
    • 文档不存在
    • 向量索引缺失

集成测试

  1. 与原版 QMD 对比

    • 相同输入 → 相似输出
    • 差异容忍度:分数精度、排序微调
  2. Claude Desktop 集成

    • 手动配置 MCP Server
    • 测试所有 Tools
    • 验证 Resource 访问

迁移建议

从原版 QMD 迁移

配置变更:

原版(Claude Desktop 配置):

{
  "mcpServers": {
    "qmd": {
      "command": "qmd",
      "args": ["mcp"]
    }
  }
}

qmd-python(完全相同):

{
  "mcpServers": {
    "qmd": {
      "command": "qmd",
      "args": ["server", "--transport", "mcp"]
    }
  }
}

注意: 命令从 mcp 变为 server --transport mcp,但功能完全兼容。


数据迁移

数据库: 完全兼容,无需迁移

  • 位置:~/.qmd/qmd.db
  • 结构:100% 兼容

配置文件: 完全兼容

  • 位置:~/.qmd/index.yml
  • 格式:YAML(保持一致)

已知差异

1. Server 启动命令

原版 QMD qmd-python
qmd mcp qmd server --transport mcp

原因: qmd-python 支持多种 Transport,需要明确指定。

影响: 仅影响启动方式,运行时行为完全相同。


2. 模型加载

原版 QMD: 使用 GGUF 格式模型 qmd-python: 使用 ONNX + PyTorch 格式模型

影响:

  • ✅ 接口完全兼容
  • ✅ 行为保持一致
  • ⚠️ 模型格式不同(用户无感知)

3. HTTP Transport

原版 QMD: 不支持 qmd-python: 支持(扩展功能)

影响:

  • ✅ 正向兼容(不影响 MCP 使用)
  • ✅ 提供额外功能(HTTP API)

参考资源

官方文档

项目文档

原始实现

  • MCP Server: D:\MoneyProjects\qmd\src\mcp.ts (627 lines)
  • 测试文件: D:\MoneyProjects\qmd\src\mcp.test.ts
  • 配置文档: D:\MoneyProjects\qmd\skills\qmd\references\mcp-setup.md

结论

qmd-python 与原版 QMD (TypeScript) 保持 100% 接口兼容

  • ✅ 所有 MCP Tools 参数和输出格式完全一致
  • ✅ MCP Resource 和 Prompt 行为一致
  • ✅ 数据库和配置文件完全兼容
  • ✅ 迁移成本:零(直接替换即可)

扩展功能:

  • ✅ HTTP Transport(额外功能,不影响兼容性)
  • ✅ 更稳定的 Windows 支持
  • ✅ GPU 加速

最后更新: 2026-02-17 维护者: QMD-Python Team