跳转到内容

MCP 服务原理

/mcp 是一个真实的 Model Context Protocol 端点,不是简单的 JSON 接口。它实现了 MCP Streamable HTTP 传输的”无状态 + JSON 响应”子集。

src/lib/mcp.ts 中的 createReadWikiMcpServer(request) 在每个请求里完成:

  1. getDocs() 拉取所有 Markdown 文档
  2. 通过请求头解析公网 origin(兼容反向代理的 x-forwarded-*
  3. 注册:
    • Resourcedocumentation-indexdocumentation-full,以及每篇文档一个
    • Toolsearch_docs(query, lang?, limit?),做关键词打分搜索
    • Promptanswer_with_readwiki(question, lang?, maxResources?),让模型基于检索结果作答

src/pages/mcp.tsWebStandardStreamableHTTPServerTransport,配置:

  • sessionIdGenerator: undefined —— 不维护会话
  • enableJsonResponse: true —— 用普通 JSON 而非 SSE 流

每个 POST 都建一次 McpServer + transport,用完即关。优点是简单、零状态;代价是高 QPS 下重复注册资源的开销。

任何支持 MCP Streamable HTTP 的客户端都可以直接连:

{
"mcpServers": {
"readwiki": {
"url": "https://read.wiki/mcp"
}
}
}

不支持 MCP 但能抓 URL 的客户端,请回退到 /llms.txt