Wiki探索MCP服务器

一个通用的MCP服务器,用于将项目Wiki暴露给AI助手,支持在开发会话中进行上下文Wiki查找。

  • by jommar
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 jommar/mcp-wiki

使用说明

Wiki资源管理器MCP服务器

一个通用的MCP(模型上下文协议)服务器,将任何项目维基暴露给人工智能助手,在开发会话期间启用上下文维基查找。

特性

  • 懒加载 --索引标题一次,通过字节位置按需加载内容
  • 载入 --通过取消抖动来监视wiki文件或markdown目录的更改
  • 模糊搜索 --通过levenstein距离处理拼写错误和部分匹配
  • 内容搜索 --在部分内容中搜索,而不仅仅是标题
  • 定制锚 --使用 {#anchor} 稳定TOC链接标题中的语法
  • 目录模式 --使用文件前缀键对整个markdown目录树进行索引
  • 传统密钥支持 --仅标题键的向后兼容查找
  • 标题层次结构 --跟踪嵌套部分的完整面包屑路径
  • 批量提取 --在一次调用中检索多个部分(最多20个)
  • 聪明的建议 --当找不到部分时返回类似的键
  • 路径安全 --验证标记源和安全路径解析
  • 优雅关闭 --处理信号/信号,清理观察者
  • 结构化日志记录 --用于调试的可配置日志级别

设置

# 1. Install dependencies
npm install

# 2. Configure wiki path
cp .env.example .env

# 3. Run tests
npm test

.env

WIKI_PATH=path/to/your/wiki-source  # file (.md/.markdown) or directory
LOG_LEVEL=info  # debug, info, warn, error

MCP工具

工具 说明 参数
list_wiki 列出所有可用的wiki部分 无
browse_wiki 按主题/父级浏览部分 topic (字符串,可选)
search_wiki 按关键字搜索部分 query (字符串), fuzzy (布尔值)
get_wiki_section 获取单个部分的内容 key (字符串), offset (数字), limit (编号)
get_wiki_sections 一次获取多个部分 keys (字符串[],最多20个)

连接到AI助手

克劳德桌面版

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上, %APPDATA%\Claude\claude_desktop_config.json 在Windows上):

{
  "mcpServers": {
    "wiki-explorer": {
      "command": "node",
      "args": ["/path/to/wiki-explorer/index.js"],
      "env": {
        "WIKI_PATH": "/path/to/your/docs/wiki"
      }
      }
  }
}

光标

添加到光标MCP设置:

{
  "mcpServers": {
    "wiki-explorer": {
      "command": "node",
      "args": ["/path/to/wiki-explorer/index.js"],
      "env": {
        "WIKI_PATH": "/path/to/your/docs/wiki"
      }
      }
  }
}

VS代码(GitHub副本)

添加 .vscode/mcp.json:

{
  "servers": {
    "wiki-explorer": {
      "command": "node",
      "args": ["/path/to/wiki-explorer/index.js"],
      "env": {
        "WIKI_PATH": "/path/to/your/docs/wiki"
      }
      }
  }
}

跑步

# Start MCP server (stdio transport)
npm start

# Debug mode
LOG_LEVEL=debug npm start

建筑

index.js          → MCP server + tool registration + signal handlers
utils.js          → WikiParser class (indexing, search, content extraction)
logger.js         → Structured logging with configurable levels
test.js           → 67 assertions covering all functionality
.env              → WIKI_PATH, LOG_LEVEL configuration

WikiParser类

  • 构造函数 --验证文件/目录源,加载markdown文档,使用字节位置构建标题索引
  • search(query, { fuzzy, limit }) --按关键字查找部分
  • findSimilar(key) --通过Levenstein距离获取相似密钥
  • getSection(key) --检索单个部分的内容
  • getSections(keys) --批量检索多个部分
  • reload() --重新读取文件并重建索引
  • close() --停止文件监视器

密钥兼容性

  • 目录模式下的规范键以文件slug作为前缀(例如。 user-wiki-approval-workflow-deep-dive)
  • 中仍接受仅保留旧标题的密钥 getMeta/getSection 向后兼容
  • 模糊的遗留密钥需要后缀形式(-1, -2)确定性地解决
  • 搜索接受旧密钥查询,但返回规范密钥

自定义锚点

标题可以包含自定义锚点,使用 {#anchor-name} 标题文本末尾的语法:

## Backend Architecture {#portage-backend-architecture}

这创建了一个稳定的锚点,可用于目录或直接链接。锚点从显示的标题中删除,但注册为旧别名以供查找。

内容搜索

搜索匹配标题文本和部分内容。结果按优先顺序排列:

  1. 标题匹配 --标题文本中的精确或模糊匹配
  2. 内容匹配 --在节正文中找到关键字

这确保了最相关的部分首先出现。

安全

  • 源验证(.md/.markdown 文件或目录)
  • 通过以下方式解决安全路径问题 path.resolve +fs统计检查
  • 文件大小上限(默认50MB)
  • 密钥格式验证(小写字母数字+连字符)
  • 批量请求限制(最多20个密钥)

优雅地关闭

手柄 SIGINT, SIGTERM, uncaughtException,以及 unhandledRejection。清理文件查看器并干净退出。

测试

npm test

涵盖:初始化、路径验证、目录模式、搜索(标头+内容)、模糊搜索、findSimilar、meta、sections、批提取、边界、重载、文件观察器、密钥格式验证、自定义锚点、遗留密钥解析和清理。

CI/CD

GitHub Actions在Node 20和22上对每个推送/PR进行测试 main。参见 .github/workflows/ci.yml.