Skip to main content
Glama
README.md6.27 kB
# ShowDoc MCP 服务接口文档 ## 项目说明 本项目旨在开发一个适用于 Cursor 的 ShowDoc MCP 服务,使用 Python 实现。 ### 项目背景 当前存在以下痛点: - 服务器将接口文档发布在网页中 - 客户端开发者需要手动查看 API 地址定义、请求参数、返回格式等信息 - 步骤重复繁琐,严重影响开发效率 ### 解决方案 通过为 MCP 服务提供 ShowDoc 服务器接口地址(URL)和用户认证信息(Cookie 或密码),实现: - 按指定层级自动获取所有接口数据 - 将数据封装为标准化格式(类似 Android 实体类及 Retrofit Service 配置) - 支持自动验证码登录(当提供密码时) ## 接口调用流程 ### 步骤 1: 访问主页面 **接口地址**: `https://doc.cqfengli.com/web/` **说明**: 这是访问 ShowDoc 的初始步骤,通过 GET 请求获取主页面 HTML,页面中包含服务器配置信息(如 API 基础路径、静态资源路径等),为后续 API 调用做准备。 **详细请求示例**: [接口示例 1](api_example_01.txt) --- ### 步骤 2: 获取文档目录结构 **接口地址**: `https://doc.cqfengli.com/server/index.php?s=/api/item/info` **说明**: 通过 POST 请求获取指定文档项目的完整目录树结构,包括所有分类(category)和页面(page)的层级关系、ID 等信息。此步骤用于了解文档的整体结构,便于后续遍历所有页面。 **详细请求示例**: [接口示例 2](api_example_02.txt) --- ### 步骤 3: 获取 AI 知识库配置(可选) **接口地址**: `https://doc.cqfengli.com/server/index.php?s=/api/item/getAiKnowledgeBaseConfig` **说明**: 获取文档项目的 AI 知识库相关配置信息,可能与 ShowDoc 的 AI 功能相关。此步骤为可选步骤,不影响接口文档的获取。 **详细请求示例**: [接口示例 3](api_example_03.txt) --- ### 步骤 4: 获取页面详细信息 **接口地址**: `https://doc.cqfengli.com/server/index.php?s=/api/page/info` **说明**: 根据页面 ID(page_id)获取指定页面的完整详细信息,包括 API 接口定义、请求方法、请求参数、请求头、响应格式等。这是获取接口文档的核心步骤,返回的 `page_content` 字段包含完整的接口定义(需进行 HTML 实体解码和 JSON 解析)。 **详细请求示例**: [接口示例 4](api_example_04.txt) --- ## 数据处理注意事项 ### HTML 实体编码处理 在步骤 4 返回的数据中,`page_content` 字段是一个经过 HTML 实体编码的 JSON 字符串。`"` 是 HTML 实体编码,代表双引号 `"`。 **编码原因**: 由于 `page_content` 字段的值本身就是一个嵌套的 JSON 字符串,为了在 JSON 响应中避免双引号冲突,ShowDoc 对内部 JSON 进行了 HTML 实体转义。 **解码步骤**: 1. 使用 HTML 实体解码,将 `"` 转换为 `"` 2. 将解码后的字符串解析为 JSON 对象 示例(Python): import json import html # 假设从接口获取的原始数据 raw_data = { "error_code": 0, "data": { "page_content": "{"page_title":"\u83b7\u53d6\u62cd\u7167\u6559\u7a0b",...}" } } # 1. 获取 page_content 字符串 encoded_content = raw_data["data"]["page_content"] # 2. HTML实体解码 decoded_content = html.unescape(encoded_content) # 3. 解析为 JSON 对象 page_content = json.loads(decoded_content) print(page_content["page_title"]) # 输出:获取拍照教程 --- ## 自动登录流程 当项目设置了访问密码时,可以使用密码自动登录,无需手动获取 Cookie。 ### 认证方式 支持两种认证方式(二选一): 1. **Cookie 认证**:手动在浏览器中登录后,复制 Cookie 字符串(推荐用于已登录场景) 2. **密码认证**:提供项目访问密码,系统将自动进行验证码识别和登录 ### 自动密码登录流程 如果提供了 `password` 参数且未提供 `cookie`,系统将自动执行以下步骤: 1. **创建验证码会话** - 接口:`POST /api/common/createCaptcha` - 返回:`captcha_id`(验证码会话 ID) 2. **获取验证码图片** - 接口:`GET /api/common/showCaptcha?captcha_id={captcha_id}&{timestamp}` - 返回:验证码图片(PNG/JPEG 格式) 3. **识别验证码** - 使用 ddddocr 进行验证码识别 - 支持自动重试(默认最多 5 次) 4. **提交密码和验证码** - 接口:`POST /api/item/pwd` - 参数:`item_id`, `password`, `captcha`, `captcha_id` - 成功:服务器返回 `error_code=0` 并设置 Cookie(`PHPSESSID` 等) 5. **使用 Cookie 继续后续请求** - 登录成功后,自动从 session 中提取 Cookie - 后续所有 API 请求都会自动携带该 Cookie ### 错误处理 - **验证码识别失败**:自动刷新验证码并重试(最多 5 次) - **验证码错误**(error_code=10206):自动刷新验证码并重试 - **密码错误**(error_code=10303 等):立即抛出 `ShowDocAuthError`,不重试 - **达到最大重试次数**:抛出 `ShowDocAuthError`,提示人工介入 ### 依赖要求 自动登录功能需要以下 Python 包: - `opencv-python>=4.8.0`:图像处理 - `numpy>=1.24.0`:数组操作 - `ddddocr>=1.4.0`:验证码识别 ddddocr 是纯 Python 实现,无需额外安装 OCR 程序,安装依赖后即可使用。 ### 使用示例 ```python from core import ShowDocClient # 方式 1:使用密码自动登录(推荐,默认密码 123456) client = ShowDocClient( base_url="https://doc.cqfengli.com/web/#/90/", password="123456" # 默认密码,可省略 ) # 方式 2:使用 Cookie(传统方式) client = ShowDocClient( base_url="https://doc.cqfengli.com/web/#/90/", cookie="PHPSESSID=xxx; think_language=zh-CN" ) # 后续使用方式相同 api_tree = client.get_all_apis(node_name="订单") ``` ### 注意事项 - 验证码识别成功率取决于验证码复杂度,简单验证码(如纯数字+字母,无严重扭曲)识别率较高 - 如果验证码识别持续失败,建议使用 Cookie 方式作为备选方案 - 密码登录成功后,Cookie 会保存在 session 中,可以复用进行后续请求

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yfcyfc123234/showdoc_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server