MCP Server for Accoding API-test
npm install accoding-mcp-server-test-new
accoding-mcp-server/
├── src/
│ ├── common/ # 通用基础层
│ │ ├── constants.ts # 常量定义(语言、分类、标签等)
│ │ └── registry-base.ts # 注册基类(简化版,无需区分站点)
│ ├── accoding/ # Accoding 服务层
│ │ ├── api/ # RESTful API 调用(替代 GraphQL)
│ │ │ ├── problem-api.ts # 题目相关 API
│ │ │ ├── user-api.ts # 用户相关 API
│ │ │ └── contest-api.ts # 比赛相关 API
│ │ ├── accoding-base-service.ts # 服务接口定义
│ │ ├── accoding-service-factory.ts # 工厂类
│ │ └── accoding-service-impl.ts # 服务实现
│ ├── mcp/ # MCP 工具和资源层
│ │ ├── tools/ # MCP 工具注册
│ │ │ ├── tool-registry.ts # 工具注册基类
│ │ │ ├── problem-tools.ts # 题目工具
│ │ │ ├── user-tools.ts # 用户工具
│ │ │ ├── contest-tools.ts # 比赛工具
│ │ │ └── submission-tools.ts # 提交工具
│ │ └── resources/ # MCP 资源注册
│ │ ├── resource-registry.ts # 资源注册基类
│ │ ├── problem-resources.ts # 题目资源
│ │ └── contest-resources.ts # 比赛资源
│ ├── transport/ # 传输层
│ │ ├── http-server.ts # HTTP 服务器实现
│ │ └── mcp-server-factory.ts # MCP Server 创建工厂
│ ├── utils/
│ │ ├── logger.ts # 日志工具
│ │ └── http-utils.ts # HTTP 工具函数(CORS、cookie解析)
│ └── index.ts # 程序入口
├── package.json
├── tsconfig.json
└── README.md
`
设计特点
1. 工厂模式:使用 AccodingServiceFactory 创建服务实例
2. 注册模式:使用 RegistryBase 统一管理工具和资源的注册
3. 传输层抽象:支持 stdio 和 HTTP 两种传输模式
4. 会话隔离:HTTP 模式下每个连接独立的会话和服务实例
5. 分层架构:
- 入口层 (index.ts) - 解析参数、选择传输模式
- 传输层 (transport/) - HTTP 服务器实现和会话管理
- 服务层 (accoding/) - 定义接口、实现业务逻辑
- API 层 (accoding/api/) - RESTful API 调用封装
- 工具/资源层 (mcp/) - MCP 工具和资源的注册
安装和运行
`bash
安装依赖
npm install
编译
npm run build
stdio 模式运行(默认,用于本地开发)
node build/index.js --session "your-cookie"
HTTP 模式运行(用于服务器部署)
node build/index.js --mode http --port 3000
`
$3
#### stdio 模式(默认)
- 使用标准输入输出进行通信
- 适合本地开发和 CLI 工具集成
- 通过 --session 参数传递 Accoding session cookie
#### HTTP 模式
- 通过 HTTP POST 请求进行通信
- 支持多客户端并发访问
- 每个连接独立的会话隔离
- Session cookie 通过 HTTP 请求头传递:
- X-Accoding-Session header(优先级最高)
- Cookie header(自动解析)
环境变量
- ACCODING_SESSION: Accoding 会话 Cookie(stdio 模式使用,HTTP 模式从请求头获取)
HTTP 模式使用说明
$3
`bash
node build/index.js --mode http --port 3000
`
$3
#### 1. 初始化连接
`bash
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "X-Accoding-Session: your-session-cookie" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "initialize",
"params": {}
}'
`
响应会包含 mcp-session-id header,后续请求需要使用此 ID。
#### 2. 调用工具
`bash
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "mcp-session-id: <从初始化响应中获取的session-id>" \
-H "X-Accoding-Session: your-session-cookie" \
-d '{
"jsonrpc": "2.0",
"id": "2",
"method": "tools/call",
"params": {
"name": "get_contest_problems",
"arguments": {
"contestId": "12345"
}
}
}'
`
$3
- 每个 HTTP 连接都有独立的会话 ID
- 每个会话都有独立的 AccodingService 实例
- 不同客户端的 session cookie 互不影响
- 连接关闭后自动清理会话资源
待实现功能
当前框架已搭建完成,但 API 调用部分标记为 TODO,需要根据实际的 Accoding API 文档实现:
- [ ] problem-api.ts - 实现题目相关的 RESTful API 调用
- [ ] user-api.ts - 实现用户相关的 RESTful API 调用
- [ ] contest-api.ts - 实现比赛相关的 RESTful API 调用
- [ ] submission-tools.ts - 实现提交统计功能
与 LeetCode MCP Server 的主要区别
1. 无站点区分:不需要区分 Global/CN,只有一个实现
2. RESTful API:使用 RESTful API 替代 GraphQL
3. 简化注册:RegistryBase 只区分认证/非认证,不需要区分站点
4. API 目录:使用 api/ 目录替代 graphql/` 目录