# OpenAPI 到 MCP Server
[简体中文](README.zh-cn.md) | [English](README.md)
这个项目从提供的 `openapi.yaml` 直接启动一个 Model Context Protocol (MCP) 服务器,并使用 `uv` 管理依赖。每一个 HTTP 端点都会被注册为一个 MCP 工具,AnythingLLM(或任意支持 MCP 的客户端)都可以调用。
## 快速开始
1. **安装依赖**
```bash
uv sync
```
2. **配置 `openapi2mcpserver/config.yaml`**
```yaml
base_url: "https://localhost:12001"
verify_ssl: false
openapi_path: "../openapi.yaml" # 可选,默认使用仓库根目录的副本
log_file: "../logs/openapi2mcpserver.log" # 可选,启用文件日志
log_level: "INFO" # 可选,支持 DEBUG/INFO/WARNING/ERROR
auth:
mode: "basic" # 可选值:none/basic/bearer/header/query
username: "your-username"
password: "your-password"
# basic_token: "cHJlLWVuY29kZWQtY3JlZHM="
# extra_headers:
# X-API-Version: "1"
# default_headers:
# X-Request-Source: "mcp"
```
3. **启动 MCP 服务器**
```bash
uv run openapi2mcpserver
```
## 在 AnythingLLM 中使用该 MCP 服务器
以下步骤针对 AnythingLLM 桌面版插件系统,并列出了 macOS 与 Windows 的默认路径。如路径不存在,请先创建文件,并根据你的实际环境替换示例路径。
### macOS
1. 打开 `~/Library/Application Support/anythingllm-desktop/storage/plugins/anythingllm_mcp_servers.json`
2. 新增或合并以下配置:
```json
{
"mcpServers": {
"rhino-agent": {
"command": "/Users/<你的用户名>/.local/bin/uv",
"args": ["run", "--project", "/Users/<你的用户名>/workspace/AIProjects/openapi2mcpserver", "openapi2mcpserver"]
}
}
}
```
### Windows
1. 打开 `%APPDATA%\\anythingllm-desktop\\storage\\plugins\\anythingllm_mcp_servers.json`
2. 如果你使用 `uv.exe`,请将路径替换为 `where uv` 的输出,例如:
```json
{
"mcpServers": {
"rhino-agent": {
"command": "C:\\\\Users\\\\<YourUser>\\\\AppData\\\\Roaming\\\\Python\\\\Scripts\\\\uv.exe",
"args": ["run", "--project", "C:\\\\Users\\\\<YourUser>\\\\workspace\\\\AIProjects\\\\openapi2mcpserver", "openapi2mcpserver"]
}
}
}
```
保存后重启 AnythingLLM(或在设置中重新加载插件),就能在工作区的工具列表里看到 `rhino-agent`。
## 亮点
- 自动解析每个 OpenAPI 路径并注册对应的 MCP 工具
- 提供 `OpenAPI_GetSchema` 工具以检查 `components.schemas`
- 工具输入涵盖路径参数、查询参数、请求头与请求体
- 支持灵活的认证模式(none/basic/bearer/自定义 header/query)以及全局默认请求头
- 结构化日志同时输出到控制台和文件,便于 LLM 排错
## 项目结构
```
openapi2mcpserver/
__init__.py
__main__.py
client.py
config.py
openapi_loader.py
server.py
```
## 运行提示
服务器启动时会读取 OpenAPI 描述,为每个工具构建 JSON Schema 输入,并将调用转发给上游 API。响应(状态码、请求头以及 JSON/文本响应体)会原样返回给 MCP 客户端,这样你可以继续执行诸如轮询任务状态之类的后续操作。