MCP 服务原理
/mcp 是一个真实的 Model Context Protocol 端点,不是简单的 JSON 接口。它实现了 MCP Streamable HTTP 传输的”无状态 + JSON 响应”子集。
src/lib/mcp.ts 中的 createReadWikiMcpServer(request) 在每个请求里完成:
- 调
getDocs()拉取所有 Markdown 文档 - 通过请求头解析公网 origin(兼容反向代理的
x-forwarded-*) - 注册:
- Resource:
documentation-index、documentation-full,以及每篇文档一个 - Tool:
search_docs(query, lang?, limit?),做关键词打分搜索 - Prompt:
answer_with_readwiki(question, lang?, maxResources?),让模型基于检索结果作答
- Resource:
src/pages/mcp.ts 用 WebStandardStreamableHTTPServerTransport,配置:
sessionIdGenerator: undefined—— 不维护会话enableJsonResponse: true—— 用普通 JSON 而非 SSE 流
每个 POST 都建一次 McpServer + transport,用完即关。优点是简单、零状态;代价是高 QPS 下重复注册资源的开销。
任何支持 MCP Streamable HTTP 的客户端都可以直接连:
{ "mcpServers": { "readwiki": { "url": "https://read.wiki/mcp" } }}不支持 MCP 但能抓 URL 的客户端,请回退到 /llms.txt。