mcpField
L
llm-wiki-mcp

llm-wiki-mcp

本地服务
github.com/flsteven87记忆与知识129 周前更新

关于 llm-wiki-mcp

llm-wiki-mcp 是面向 AI Agent 持久化 Markdown 知识库的本地文件系统 MCP 服务,提供受控的页面与日志操作,并附带用于构建和维护知识库的 Claude Code 技能。

主要功能

  1. 01提供读取、写入、日志和盘点工具
  2. 02原子写入页面并检查 etag 冲突
  3. 03仅追加的会话日志
  4. 04路径约束与 slug 校验
  5. 05附带四个 Claude Code 工作流技能

适用场景

  1. 01在持久化 Agent 知识库中保存主题笔记
  2. 02将操作记录到会话日志
  3. 03审查页面链接和提及
  4. 04使用 Claude Code 技能初始化、查询或检查知识库

MCP 相关

通过 stdio 向 MCP 客户端提供四种知识库工具,并以本地文件系统为后端。工具可读取和更新页面、追加日志条目及检查知识库目录。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"flsteven87-llm-wiki": {
"command": "uvx",
"args": [
"llm-wiki-mcp"
]
}
}
}
启动命令uvx llm-wiki-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypillm-wiki-mcp0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

llm-wiki-mcp

为 AI Agent 打造的持久化 Markdown 知识库,基于 Karpathy 的 LLM wiki gist。包含四个 MCP 工具(wiki_read、wiki_write_page、wiki_log_append、wiki_inventory)和四个 Claude Code 技能(wiki-init、wiki-ingest、wiki-query、wiki-lint)。采用 stdio 传输,使用本地文件系统。

该服务负责处理大模型总是容易出错的繁琐底层工作:原子写入、etag 冲突检查、只追加日志的完整性、路径包含性检查。技能为 Agent 提供可遵循的工作流。知识库架构存放在你自己的 wiki/CLAUDE.md 中,并随你的领域不断扩展。服务中没有 Layer 3 架构验证。

状态:alpha(v0.1.1)。仅支持本地后端。采用 MIT 许可证。

快速开始

需要 Python 3.11+ 和 uv。

为知识库文件夹选择一个绝对路径。如果 pages/ 和 log.md 不存在,服务会在首次运行时创建它们:

uvx llm-wiki-mcp --wiki-root /absolute/path/to/wiki

将其接入你的 MCP 客户端。

Claude Code:

claude mcp add llm-wiki -- uvx llm-wiki-mcp --wiki-root /absolute/path/to/wiki

Claude Desktop(macOS 上的 ~/Library/Application Support/Claude/claude_desktop_config.json)或 Cursor(~/.cursor/mcp.json):

{
  "mcpServers": {
    "llm-wiki": {
      "command": "uvx",
      "args": ["llm-wiki-mcp", "--wiki-root", "/absolute/path/to/wiki"]
    }
  }
}

重启客户端。此时应显示四个工具:wiki_read、wiki_write_page、wiki_log_append、wiki_inventory。

Claude Code 技能

Claude Code 用户可以将内置工作流技能安装为插件:

claude plugin marketplace add https://github.com/flsteven87/llm-wiki-mcp
claude plugin install llm-wiki-skills@llm-wiki-mcp

每次运行时,各技能都会读取 wiki/CLAUDE.md,获取当前架构,因此你可以演进架构,无需重新安装。可以向 Agent 提出以下问题:

技能可以询问什么是否需要 MCP 服务?
wiki-init“为 AI 安全研究在 ~/wikis/ai-safety 创建一个 LLM 知识库。”否
wiki-ingest“将 https://arxiv.org/abs/2310.12345 导入知识库。”是
wiki-query“知识库对 steering vectors 有什么说法?”是
wiki-lint“运行知识库健康检查。”是

wiki-init 是一次性脚手架工具;另外三个是 Karpathy 的三种操作。

其他 MCP 客户端(Claude Desktop、Cursor)可以使用这四个工具,但没有这些技能。Agent 只能根据工具描述自行推导工作流;对于一次性的读取和写入,这样做没问题,但往往会跳过技能明确要求的记录工作(日志条目、反向链接审计)。

四个工具

工具注解用途
wiki_read只读、幂等读取单个页面。返回正文、解析后的 frontmatter、出站链接和 etag。
wiki_write_page有破坏性、幂等以原子方式创建或更新页面,并使用 etag CAS。创建时传入 etag=null,更新时传入读取到的 etag。
wiki_log_append非幂等按照 Karpathy 的 ## [YYYY-MM-DD] op | Title 格式向 log.md 追加一条记录。
wiki_inventory只读、幂等快照整个图谱:页面、frontmatter、链接边、日志条目,以及用于反向链接审计的可选纯文本提及扫描。

index.md 和 raw/ 不会作为工具开放,这是有意为之。索引是由大模型整理的内容,通过宿主的 Read/Write 编辑。就服务而言,原始层不可变。

知识库布局

wiki-init 会搭建如下结构的项目:

your-project/
├── raw/                    Immutable source files (papers, articles, transcripts)
│   └── ...
└── wiki/                   ← --wiki-root points here
    ├── pages/              Markdown pages, one per topic
    ├── log.md              Append-only session log
    ├── index.md            LLM-curated browse page
    └── CLAUDE.md           Schema doc the LLM reads on every operation

--wiki-root 指向经过整理的 wiki/ 文件夹,而不是包含 raw/ 的父项目文件夹。首次安装时很容易弄错;下方的故障排除章节介绍了你会看到的错误。

设计边界

服务强制执行机制,而不限制内容格式:

  • 原子写入。 页面使用 tmp-file + fsync + rename。日志条目使用 O_APPEND 单次写入。
  • 乐观并发控制。 每个页面都有一个 etag(sha256(body) || mtime_ns)。更新时需提供读取到的 etag;如果不匹配,则会引发 WikiConflictError,Agent 会重新读取、合并并重试。
  • 路径限制。 Slug 会通过正则表达式验证。解析后的路径会与根目录的 realpath 核对,从而阻止 CVE-2025-53109 类型的符号链接逃逸问题。
  • 格式固定的日志行。 ## [YYYY-MM-DD] operation | Title。操作名称可以是任意字符串;只会拒绝那些会破坏行格式的字符。

服务不会验证 frontmatter 格式、页面分类或链接目标。这一层由 wiki/CLAUDE.md 架构文档负责,并随大模型的发展而扩展。Karpathy 的 gist 刻意不规定内容格式;在服务中内置架构会违背初衷。

Python API

如果你想用自己的存储后端(SQLite、Notion、GDrive、测试替身)封装 MCP 服务,请实现 WikiStorage Protocol,并将实例传给 build_server:

from llm_wiki_mcp import WikiStorage, PageRead, LogEntry
from llm_wiki_mcp.server import build_server

class MyStorage:  # satisfies the WikiStorage Protocol
    async def read_page(self, slug: str) -> PageRead: ...
    async def write_page(self, slug, body, expected_etag=None) -> str: ...
    async def list_pages(self) -> list[str]: ...
    async def append_log(self, entry: LogEntry) -> None: ...
    async def read_log(self) -> str: ...
    async def write_raw_file(self, name, data) -> None: ...  # usually raises

server = build_server(storage=MyStorage())
server.run()

build_server 是组合根。CLI main() 是一个轻量调用方,它根据 --wiki-root 构造 LocalFilesystemStorage 并将其传入。

随附的 Claude Code 技能以包数据的形式存放在 llm_wiki_mcp/skills/ 下;如果你想将它们接入非 Claude Code Agent,可通过 importlib.resources 加载。类型化领域错误(WikiConflictError、WikiNotFoundError、WikiPermissionError、WikiPathError、WikiSchemaViolationError)可从包根导入,以便在自己的边界处捕获。

故障排除

运行 uv tool install 后出现 llm-wiki-mcp: command not found。 uv 会将二进制文件放在 ~/.local/bin(Windows 上为 %USERPROFILE%\.local\bin)。将其添加到 PATH,或使用 uvx llm-wiki-mcp ... 调用,无需持久化 shim。

编辑客户端配置后未显示 wiki_* 工具。 重启 MCP 客户端。Claude Desktop、Claude Code 和 Cursor 只会在启动时重新读取 mcpServers。

出现 WikiPathError: path escapes wiki root。 你将 --wiki-root 指向了包含 raw/ 的项目文件夹,而不是其中经过整理的 wiki/ 文件夹。/Users/me/wikis/ai-safety/wiki 是正确的;/Users/me/wikis/ai-safety 则不正确。

Claude Code 未加载技能。 运行 claude plugin list。如果列表中没有 llm-wiki-skills,请重新运行 Claude Code 技能部分中的 marketplace 命令。

开发

git clone https://github.com/flsteven87/llm-wiki-mcp
cd llm-wiki-mcp
uv sync --extra dev
uv run pytest
uv run ruff check .
uv run pyright src/llm_wiki_mcp

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。