MCP 服务器
每个 Jamdesk 站点都内置 MCP 服务器。Claude、Cursor 等 AI 助手可直接搜索和读取您的文档。
每个 Jamdesk 站点都内置了 MCP(Model Context Protocol,模型上下文协议)服务器。llms.txt 为 AI 工具提供文档的静态快照,而 MCP 允许它们搜索和查询文档,从而无需通读全部内容即可找到具体答案。
什么是 MCP?
Model Context Protocol 是一种用于将 AI 工具连接到外部数据源的开放标准。您的 Jamdesk 文档提供两个 MCP 工具:
| 工具 | 用途 |
|---|---|
searchDocs | 按关键词搜索文档,返回排序后的结果 |
getPage | 以完整 Markdown 格式获取页面 |
端点 URL
您的 MCP 端点是文档 URL 加上 /_mcp。如果您已启用自定义域名,请使用该域名:
| 设置 | 端点 |
|---|---|
自定义域名 docs.acme.com | https://docs.acme.com/_mcp |
| 无自定义域名 | https://my-project.jamdesk.app/_mcp |
连接了自定义域名时,请使用该域名的端点。这样 AI 工具看到的每个 URL 都会保留您的品牌标识。如果您之后通过仅自定义域名隐藏 .jamdesk.app 子域名,该端点也仍可正常使用。
快速设置
将您的文档添加为 MCP 服务器:
claude mcp add --transport http my-docs https://docs.acme.com/_mcp将 docs.acme.com 替换为您的文档域名。如果尚未连接自定义域名,请使用 my-project.jamdesk.app。
当您询问项目相关问题时,Claude 现在可以搜索并读取您的文档。
可用工具
searchDocs
搜索您的文档并获取排序后的结果。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query | string | 是 | 搜索词(例如 "authentication"、"getting started") |
limit | number | 否 | 最大结果数(默认:10,最大:50) |
type | string | 否 | 按内容类型筛选:all、api、guide、quickstart、help、component |
请求示例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "searchDocs",
"arguments": {
"query": "authentication",
"limit": 5
}
}
}
响应示例:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{
"type": "text",
"text": "{\"query\":\"authentication\",\"total\":1,\"results\":[{\"title\":\"Authentication\",\"description\":\"How to authenticate API requests\",\"url\":\"/docs/api/authentication\",\"type\":\"api\",\"score\":0.95}]}"
}]
}
}
getPage
以 Markdown 格式获取文档页面。表格、列表和代码块会完整返回,而非简短摘录。将 searchDocs 返回的 url 作为 url 传入,或将页面路径作为 slug 传入。超过 80,000 个字符的页面会在该长度处被截断,并附带指向该页面 .md URL 的链接以获取其余内容。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | string | url 或 slug 二选一 | searchDocs 结果中的 url(例如 /docs/api/authentication)。完整页面 URL 和 .md 链接同样有效。 |
slug | string | url 或 slug 二选一 | 不含 /docs 前缀的页面路径(例如 api/authentication) |
只需发送其中一个。如果同时发送两者,将使用 slug。
请求示例:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "getPage",
"arguments": {
"url": "/docs/api/authentication"
}
}
}
响应示例:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{
"type": "text",
"text": "{\"title\":\"Authentication\",\"description\":\"How to authenticate\",\"content\":\"## Overview\\n\\nUse API keys to authenticate...\",\"url\":\"/docs/api/authentication\"}"
}]
}
}
测试端点
使用 curl 测试您的 MCP 端点:
# List available tools
curl -X POST https://docs.acme.com/_mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Search for content
curl -X POST https://docs.acme.com/_mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"searchDocs","arguments":{"query":"getting started"}}}'
受登录保护的网站
如果您的站点使用密码或 JWT 身份验证,MCP 服务器需要项目 API 密钥。请在 Project Settings > API Keys 中创建密钥,并将其作为请求头发送:
claude mcp add --transport http my-docs https://docs.example.com/_mcp \
--header "Authorization: Bearer jd_live_..."
密钥允许 MCP 客户端搜索和读取站点中可搜索的页面,即站点搜索所覆盖的同一批页面。受分组限制的页面无论是否有密钥都无法通过 MCP 访问。隐藏页面和设置了 search: false 的页面不会被包含,除非您已将其设为可搜索。请像对待密码一样保管该密钥;如果泄露,请在控制面板中撤销。
同一密钥也可用于打开 .md 页面 URL、llms.txt 和 llms-full.txt。参见 llms.txt 和 Markdown 源文件。该密钥无法打开 HTML 页面或 AI 聊天,这些仍需登录。
不提供密钥时,服务器会返回 401 以及一个说明如何添加密钥的 JSON 响应体。来自其他项目的密钥会被拒绝。错误代码如下:
| 状态码 | error | 含义 |
|---|---|---|
| 401 | auth_required | 未发送密钥。 |
| 401 | invalid_api_key | 该密钥对此站点无效。 |
| 503 | auth_unavailable | 无法验证该密钥。请在 Retry-After 响应头指定的秒数后重试。 |
工作原理
MCP 端点使用与文档一同构建的搜索索引:
- **BM25 排序:**按相关性对结果排序
- **模糊匹配:**容忍 1 个字符的拼写错误
- **字段加权:**标题和章节标题比正文权重更高
- **类型筛选:**按内容类型(API、指南等)筛选结果
每次部署时都会重建索引。
速率限制
未使用 API 密钥的请求,每个 IP 地址限制约为每分钟 60 次。这对于一个人的 AI 助手来说已经足够。同一共享 IP 后的所有用户(例如办公网络或您自己的后端)共用这一配额。
携带项目 API 密钥的请求不受按 IP 的限制,而是按密钥享有每分钟 120 次的配额,适用于任何站点。请按照需要登录的站点的方式,将密钥添加到您的 MCP 客户端配置中。
在需要登录的站点上,使用密钥发出的 .md 页面请求,以及 llms.txt 或 llms-full.txt 请求,也会计入该密钥的配额。Search API 拥有独立的限制,即每个密钥每分钟 60 次。
超出限制的请求会收到 429 响应,并附带 Retry-After: 60。
故障排除
验证端点 URL 是否正确且可访问:
curl https://docs.acme.com/_mcp您应当看到包含服务器信息的 JSON 响应。如果没有,请检查您的文档是否至少构建过一次。
Jamdesk 在构建时生成搜索索引。请从 Jamdesk 控制面板触发重新构建,以索引新内容。
请传入 searchDocs 结果中的 url,以避免 slug 不匹配。如果您传入 slug,请确保它与页面路径完全一致,且不含 .mdx 扩展名。位于 api/authentication.mdx 的页面,其 slug 为 api/authentication。
该站点使用密码或 JWT 身份验证,请求需要项目 API 密钥。请在请求中添加 Authorization: Bearer 请求头,并使用来自 Project Settings > API Keys 的密钥。参见需要登录的站点。
