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, errorMCP工具
| 工具 | 说明 | 参数 |
|---|---|---|
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 configurationWikiParser类
- 构造函数 --验证文件/目录源,加载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}这创建了一个稳定的锚点,可用于目录或直接链接。锚点从显示的标题中删除,但注册为旧别名以供查找。
内容搜索
搜索匹配标题文本和部分内容。结果按优先顺序排列:
- 标题匹配 --标题文本中的精确或模糊匹配
- 内容匹配 --在节正文中找到关键字
这确保了最相关的部分首先出现。
安全
- 源验证(
.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.
