accoding-mcp-server-test-new
v0.1.5
Published
MCP Server for Accoding API-test
Downloads
255
Maintainers
Readme
Accoding MCP Server
MCP Server for Accoding API - Model Context Protocol server for Accoding platform.
项目结构
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设计特点
- 工厂模式:使用
AccodingServiceFactory创建服务实例 - 注册模式:使用
RegistryBase统一管理工具和资源的注册 - 传输层抽象:支持 stdio 和 HTTP 两种传输模式
- 会话隔离:HTTP 模式下每个连接独立的会话和服务实例
- 分层架构:
- 入口层 (
index.ts) - 解析参数、选择传输模式 - 传输层 (
transport/) - HTTP 服务器实现和会话管理 - 服务层 (
accoding/) - 定义接口、实现业务逻辑 - API 层 (
accoding/api/) - RESTful API 调用封装 - 工具/资源层 (
mcp/) - MCP 工具和资源的注册
- 入口层 (
安装和运行
# 安装依赖
npm install
# 编译
npm run build
# stdio 模式运行(默认,用于本地开发)
node build/index.js --session "your-cookie"
# HTTP 模式运行(用于服务器部署)
node build/index.js --mode http --port 3000传输模式说明
stdio 模式(默认)
- 使用标准输入输出进行通信
- 适合本地开发和 CLI 工具集成
- 通过
--session参数传递 Accoding session cookie
HTTP 模式
- 通过 HTTP POST 请求进行通信
- 支持多客户端并发访问
- 每个连接独立的会话隔离
- Session cookie 通过 HTTP 请求头传递:
X-Accoding-Sessionheader(优先级最高)Cookieheader(自动解析)
环境变量
ACCODING_SESSION: Accoding 会话 Cookie(stdio 模式使用,HTTP 模式从请求头获取)
HTTP 模式使用说明
启动服务器
node build/index.js --mode http --port 3000客户端请求示例
1. 初始化连接
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. 调用工具
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"
}
}
}'会话隔离
- 每个 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 的主要区别
- 无站点区分:不需要区分 Global/CN,只有一个实现
- RESTful API:使用 RESTful API 替代 GraphQL
- 简化注册:
RegistryBase只区分认证/非认证,不需要区分站点 - API 目录:使用
api/目录替代graphql/目录
服务器部署: pm2 start ecosystem.config.cjs
查看状态
pm2 status
查看日志
pm2 logs accoding-mcp pm2 logs accoding-mcp --lines 50
重启应用
pm2 restart accoding-mcp
停止应用
pm2 stop accoding-mcp
删除应用
pm2 delete accoding-mcp
监控
pm2 monit
重新加载(代码更新后)
pm2 reload accoding-mcp
自启动:
1. 先保存当前 PM2 配置
pm2 save
2. 添加到 crontab(就这一行!)
(crontab -l 2>/dev/null; echo "@reboot cd /home/minjiaxu/accoding_mcp_server && pm2 resurrect") | crontab -
3. 验证添加成功
crontab -l
