65 lines
2.5 KiB
Markdown
65 lines
2.5 KiB
Markdown
# Apifox MCP 服务上下文
|
|
|
|
## 项目概述
|
|
本项目是一个针对 **Apifox** 的 **Model Context Protocol (MCP) 服务器**。它充当大型语言模型 (LLM)(如 Claude 或 Gemini)与 Apifox API 文档之间的桥梁。它允许 AI 助手直接从 Apifox 项目中检索强类型的 API 定义 (Schema),从而生成准确的 API 请求代码。
|
|
|
|
## 架构
|
|
- **`index.js`**: 主入口点。它设置 MCP 服务器,注册工具,并处理传输(Stdio 或 HTTP/SSE)。
|
|
- **`apifox.js`**: 包含 `ApifoxService` 类。它封装了与 Apifox API 交互的逻辑,处理身份验证、缓存,并递归解析 JSON Schema 引用 (`$ref`) 以提供自包含的 API 定义。
|
|
|
|
## 构建与运行
|
|
|
|
### 前置要求
|
|
- Node.js (v18+)
|
|
- Apifox 账号及项目
|
|
|
|
### 环境变量
|
|
需要以下环境变量:
|
|
- `APIFOX_PROJECT_ID`: 目标 Apifox 项目 ID (数字)。
|
|
- `APIFOX_TOKEN`: Apifox 个人访问令牌 (Bearer Token)。
|
|
|
|
### 命令
|
|
- **安装依赖**:
|
|
```bash
|
|
npm install
|
|
```
|
|
- **启动 (Stdio 模式)** - *默认,用于与 Claude Desktop 集成*:
|
|
```bash
|
|
node index.js
|
|
# 或者显式指定:
|
|
node index.js --transport stdio
|
|
```
|
|
- **启动 (HTTP/SSE 模式)** - *用于远程部署或检查*:
|
|
```bash
|
|
node index.js --transport http --port 8889
|
|
```
|
|
- **端点**: `http://localhost:8889/sse`
|
|
- **健康检查**: `http://localhost:8889/health`
|
|
|
|
## 关键文件
|
|
|
|
- **`index.js`**:
|
|
- 初始化 `McpServer`。
|
|
- 注册工具: `get_api_by_path`, `get_apis_by_folder`。
|
|
- 处理传输选择的命令行参数。
|
|
- **`apifox.js`**:
|
|
- `ApifoxService` 类实现。
|
|
- 从 `https://apifox.gzmiyuan.com/api/v1` 获取数据。
|
|
- 使用 `node-cache` 实现缓存策略。
|
|
- 包含扁平化和解析复杂 JSON schema 以供 LLM 使用的逻辑。
|
|
|
|
## 可用工具
|
|
|
|
服务器向 MCP 客户端公开以下工具:
|
|
|
|
1. **`get_api_by_path`**:
|
|
- **描述**: 根据路径检索详细的 API 定义 schema。
|
|
- **输入**: `path` (字符串), `projectId` (数字, 可选)。
|
|
2. **`get_apis_by_folder`**:
|
|
- **描述**: 检索特定文件夹内的所有 API 定义。
|
|
- **输入**: `folderName` (字符串), `projectId` (数字, 可选)。
|
|
|
|
## 开发约定
|
|
- **ES Modules**: 项目使用 ES 模块(`package.json` 中的 `"type": "module"`)。
|
|
- **错误处理**: 工具返回带有 `isError: true` 的结构化错误响应,而不是崩溃。
|
|
- **日志记录**: Stdio 传输使用 `stderr` 进行日志记录,以避免干扰 `stdout` 上的 JSON-RPC 消息。 |