pingcode-health-mcp
An MCP server for monitoring PingCode project health, enabling PMs to query project status, sprint progress, and risk items directly from Claude Code.
README
🔍 PingCode 项目健康度监控
让 PM 在 Claude Code 或 IM 群里一眼看清项目状态 —— 聚合、风控、自动告警。
这是什么?
对接 PingCode Open API,提供两个入口:
| 入口 | 场景 | 实现 |
|---|---|---|
| MCP Server | PM 在 Claude Code 里直接对话查询 | fastmcp stdio 模式,5 个工具 |
| IM 机器人 | PM 在企微/钉钉群里 @bot 查询 | FastAPI + 钉钉 Stream WebSocket |
同一套代码、同一份配置,两种输出格式(Markdown 表格 vs 群聊简短消息)。
┌──────────────┐ ┌──────────────────────────┐ ┌──────────────┐
│ Claude Code │────▶│ MCP Server (stdio) │────▶│ │
│ (PM 本地) │ │ src/server.py │ │ │
└──────────────┘ └──────────────────────────┘ │ PingCode │
│ Open API │
┌──────────────┐ ┌──────────────────────────┐ │ │
│ 钉钉/企微群 │────▶│ Bot (HTTP + Stream) │────▶│ │
│ (群里 @bot) │ │ src/bot.py │ │ │
└──────────────┘ └──────────────────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ Web 管理后台 │
│ :8080/admin │
└──────────────┘
功能一览
5 个 MCP 工具
| 工具 | 用途 | 例 |
|---|---|---|
list_pingcode_projects |
列出所有项目 | "看看有哪些项目" |
get_project_health |
项目健康度仪表盘 | "XX项目 状态怎么样" |
get_sprint_status |
Sprint / 迭代进度 | "XX项目 冲刺进度" |
get_risk_items |
风险项明细 | "哪些逾期了" |
query_work_items |
灵活查询 | "张三有哪些未完成的 task" |
群机器人能力
- 在企微/钉钉群里
@机器人 XX项目 健康度→ 自动回复 - 支持模糊项目名匹配("储能BMS" → 自动找到对应项目)
- 可选 DeepSeek AI 兜底(规则匹配不上时用自然语言理解)
- 风险自动推送(red/yellow → 群里弹告警)
Web 管理后台
浏览器打开 http://localhost:8080/admin:
- PingCode 认证配置 + 一键测试连接
- 健康度阈值、状态标签自定义
- 通知推送、Bot、隧道、AI 所有配置
- 保存即时生效,无需重启
快速开始
1. 安装
git clone https://github.com/YOUR_USER/pingcode-health-mcp.git
cd pingcode-health-mcp
# 推荐:使用虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .
2. 配置
三种方式任选一种:
# 方式 A: CLI 配置向导(推荐新手)
python -m src.setup
# 方式 B: Web 管理后台(推荐有桌面环境)
python -m src.bot
# → 浏览器会自动打开 http://localhost:8080/admin
# → 在页面上填写 PingCode 凭证,点击"保存配置"
# 方式 C: 手动编辑
cp config.example.yaml config.yaml
# 编辑 config.yaml,填写 pingcode.client_id 和 client_secret
3. 连接 Claude Code
编辑项目根目录的 .claude/mcp.json(或 Claude Code 全局设置):
{
"mcpServers": {
"pingcode-health": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/path/to/pingcode-health-mcp",
"description": "PingCode 项目健康度监控"
}
}
}
重启 Claude Code,就可以直接问 "帮我看看 XX 项目的健康度"。
4. 部署到服务器(Bot 用)
# 上传代码到服务器
scp -r . user@your-server:/opt/pingcode-health/
# SSH 到服务器,运行部署脚本
ssh user@your-server
cd /opt/pingcode-health
sudo bash deploy/setup.sh
# 填写配置后启动
sudo systemctl start pingcode-bot
项目结构
pingcode-health-mcp/
├── README.md
├── pyproject.toml # 依赖 + 入口点
├── config.example.yaml # 配置模板
├── .env.example # 环境变量模板
├── mcp.md # 需求文档
├── setup.py # CLI 配置向导入口
│
├── src/
│ ├── server.py # MCP Server — 5 个 tool
│ ├── pingcode_client.py # PingCode API — OAuth2 认证 + 分页 + 缓存
│ ├── health.py # 健康度聚合引擎 — 统计 + 风险评级
│ ├── notifier.py # Webhook 推送 — 企微/钉钉/飞书
│ ├── bot.py # Bot HTTP 服务 + Web 管理后台
│ ├── dingtalk_stream_bot.py # 钉钉 Stream 模式机器人
│ ├── dingtalk_crypto.py # 钉钉加解密
│ ├── config.py # 配置管理 — YAML + 环境变量
│ ├── models.py # 数据模型
│ ├── tunnel.py # 内网穿透 — cloudflared / ngrok
│ └── setup.py # CLI 配置向导
│
├── tests/
│ └── test_health.py
│
└── deploy/
└── setup.sh # Ubuntu 部署脚本 + systemd
配置参考
| 配置项 | 环境变量 | config.yaml | 必填 |
|---|---|---|---|
| Client ID | PINGCODE_CLIENT_ID |
pingcode.client_id |
✅ |
| Client Secret | PINGCODE_CLIENT_SECRET |
pingcode.client_secret |
✅ |
| Base URL | PINGCODE_BASE_URL |
pingcode.base_url |
❌ |
| Webhook URL | NOTIFICATION_WEBHOOK_URL |
notification.webhook_url |
❌ |
| 通知类型 | NOTIFICATION_TYPE |
notification.type |
❌ |
| 钉钉 AppKey | DINGTALK_APP_KEY |
bot.dingtalk_app_key |
❌ |
| 钉钉 AppSecret | DINGTALK_APP_SECRET |
bot.dingtalk_app_secret |
❌ |
| AI API Key | DEEPSEEK_API_KEY |
ai.api_key |
❌ |
| 监听端口 | PORT |
bot.port |
❌ |
常见问题
Q: PingCode Client ID / Secret 在哪找? 登录 PingCode 开放平台 → 应用管理 → 创建"自研应用" → 选择 OAuth2 client_credentials 模式 → 复制凭证。
Q: 钉钉回调 URL 验证失败? 确保事件订阅和消息接收都切换为 Stream 模式(不要混用 HTTP 模式),且"开发管理" Tab 中没有残留的 HTTP 地址配置。
Q: MCP Server 连不上?
检查 config.yaml(或环境变量)中 client_id 和 client_secret 是否已填写。运行 python -m src.setup 可诊断。
Q: 内网 Bot 怎么让企微/钉钉回调到?
在 config.yaml 中设置 tunnel.enabled: true,Bot 启动时自动启动 cloudflared / ngrok 隧道。
Q: 需要监控多个项目的健康度?
list_pingcode_projects 列出所有项目 → 用 project_id 逐个查,或让 AI 批量调用。
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.