om-metrics MCP Server
by zhongjun2
README.md
# om-metrics MCP Server
<div align="center">
**开源社区数据查询 MCP 服务器**
为 Claude Desktop 提供开源社区数据查询能力的 Model Context Protocol 服务器
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/)
</div>
---
## 目录
**👤 我是用户**
- [项目简介](#-项目简介)
- [核心功能](#-核心功能)
- [快速开始](#-快速开始)
- [使用方式](#-使用方式)
**🛠️ 我是开发者**
- [开发指南](#️-开发指南)
- [故障排查](#-故障排查)
- [文档索引](#-文档索引)
- [后端 API 说明](#-后端-api-说明)
- [贡献](#-贡献)
---
## 🦎 项目简介
om-metrics MCP Server 是一款面向**开源社区运营团队**和**数据分析人员**的 MCP 工具,通过 Claude Desktop 提供自然语言查询开源社区数据的能力。
### 适用人群
| 角色 | 使用场景 |
|------|---------|
| **社区运营** | 查询社区健康度、PR/Issue 统计、贡献者排行 |
| **数据分析师** | 获取社区趋势数据、生成运营报告、制作 PPT |
| **开发者** | 查询 CI/CD 指标、仓库活跃度、技术栈分布 |
| **管理者** | 跨社区对比分析、企业贡献统计、CLA 签署情况 |
### 支持的社区
支持 **23 个开源社区**,包括:
- **华为开源社区**:openEuler、openGauss、openUBMC、CANN
- **AI 框架**:MindSpore、MindIE、MindStudio、MindSpeed、MindSeriesSDK、MindCluster
- **推理加速**:vllm、sgl、VeRL、pytorch、triton
- **其他项目**:openFuyao、PTA、UnifiedBus、CannOpen、TileLang、ascendnpuir、boostkit、opensource
---
## ✨ 核心功能
### 📊 社区健康度分析
- **综合评分**:查询社区健康度综合评分(1-5 分)
- **子指标分析**:社区影响力、下载量、Issue 关闭率、PR 合并率等
- **趋势追踪**:按月/周/天统计社区活跃度变化
### 🔍 PR/Issue 统计
- **聚合统计**:总数、开启数、关闭数、合并数、响应时长、关闭率
- **按 SIG 分组**:各兴趣组的 PR/Issue 分布和处理效率
- **时间维度**:支持按天/周/月查询趋势数据
### 👥 贡献者分析
- **企业排行**:Top N 企业贡献数量和占比
- **个人排行**:Top N 个人开发者贡献统计
- **活跃用户**:仓库活跃用户列表(PR/Issue/评论数)
- **组织统计**:参与社区的企业/组织数量
### 📝 CLA 签署查询
- **签署统计**:总签署数、企业签署数、个人签署数
- **签署趋势**:按月/周/天统计签署增长趋势
- **用户列表**:分页查询签署用户详情(支持按类型、姓名、时间筛选和排序)
### 🚀 CI/CD 指标
- **运行统计**:总运行次数、成功/失败/待处理数、成功率
- **性能分析**:平均运行时长、趋势变化
### 📦 项目仓库
- **仓库列表**:最近更新的 50 个仓库
- **热点仓库**:最近更新的前 10 个热点仓库
- **活跃统计**:总仓库数、活跃数、非活跃数
---
## 🚀 快速开始
> 适合新用户快速安装和配置。开发者详细指南见[开发指南](#-开发指南)。
### 前置要求
- Python 3.8+
- Claude Desktop 或 Claude Code CLI
- 网络连接(需访问 `https://datastat.osinfra.cn/server/`)
### 安装步骤
**1. 克隆项目**
```bash
git clone https://github.com/zhongjun2/om-mcp.git
cd om-mcp
```
**2. 安装依赖**
```bash
pip install -e .
```
**3. 验证安装**
```bash
python3 -c "from server import mcp; print('安装成功')"
```
**4. 配置 Claude Desktop**
在 Claude Desktop 中,项目根目录已包含 `.mcp.json` 配置文件,会自动识别。
或手动配置全局 MCP 服务器(编辑 `~/.config/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"om-metrics": {
"command": "python3",
"args": ["-m", "om-mcp"],
"cwd": "/完整路径/om-mcp"
}
}
}
```
**5. 验证连接**
在 Claude Desktop 中运行:
```
/mcp
```
应该看到:
```
❯ om-metrics · ✔ connected
```
---
## 💡 使用方式
在 Claude Desktop 或 Claude Code 中直接用自然语言提问,MCP 工具会自动调用。
### 基础查询示例
```
查询 openEuler 社区的健康度评分
openEuler 社区 2025 年的 PR 总数
CANN 社区有多少个参与的企业?
查询 MindSpore 社区最近的热点仓库
```
### 趋势分析示例
```
openEuler 2025 年每月的 PR 合并趋势
MindSpore 社区 2025 年 1-3 月的 Issue 关闭率
openUBMC 社区 2025 年的 CLA 签署趋势
```
### 贡献者分析示例
```
哪些企业对 openEuler 贡献最多?
openEuler 的 Top 10 个人贡献者
CANN 社区最活跃的开发者名单
```
### 跨社区对比示例
```
openEuler 和 CANN 社区的 PR 合并率对比
MindSpore 和 openGauss 的 Issue 关闭率对比
各社区的企业参与数量对比
```
更多使用示例请参考 [FEATURES.md](FEATURES.md)。
---
## 🛠️ 开发指南
详细的开发者安装指南请参考 [INSTALL.md](INSTALL.md)。
### 环境变量配置
项目需要设置 `MAGIC_API_TOKEN` 环境变量才能正常工作。
**设置方式(推荐)**
**方式 1:临时设置(当前会话有效)**
```bash
export MAGIC_API_TOKEN=your_token_here
```
**方式 2:永久设置(写入 Shell 配置)**
在 `~/.bashrc` 或 `~/.zshrc` 中添加:
```bash
export MAGIC_API_TOKEN=your_token_here
```
然后运行:
```bash
source ~/.bashrc # 或 source ~/.zshrc
```
**验证配置**
```bash
echo $MAGIC_API_TOKEN # 应显示你的 token 值
```
**安全提示:**
- ⚠️ **切勿将 `.env` 或 `.envrc` 文件提交到 Git 仓库**
- ⚠️ **切勿在代码中硬编码 token**
- ✅ 使用环境变量或安全的密钥管理工具
- ✅ 项目已将 `.env` 添加到 `.gitignore`
### 项目结构
```
om-mcp/
├── server.py # MCP 服务器入口
├── lib/
│ ├── http.py # HTTP 请求封装
│ ├── apidocs_loader.py # API 文档加载器(从 .ms 文件解析)
│ ├── template_loader.py # 工具模板加载器(YAML 配置)
│ ├── tool_generator.py # 动态工具生成器
│ └── response_formatter.py # 响应格式化
├── tools/
│ ├── health.py # 社区健康度查询
│ ├── common.py # 通用工具(社区列表)
│ ├── server_apis.py # 服务端 API(社区列表、指标字典、热点仓库等)
│ ├── query_apis.py # 查询 API(PR/Issue 聚合、按 SIG 统计等)
│ ├── cla_apis.py # CLA 相关 API
│ ├── project_apis.py # 项目 CI 指标
│ └── general_apis.py # 通用查询 API
├── api-docs/ # API 文档目录(自动生成工具)
│ ├── datastat/ # datastat 模块 API
│ └── 社区运营质量/ # 社区运营质量模块 API
└── test/ # 测试目录
├── test_mcp.py # 测试脚本
└── README.md # 测试说明
```
### 自动工具注册机制
项目支持从 API 文档自动生成 MCP 工具,无需手动编写工具函数。
#### 工作原理
1. **API 文档加载** (`lib/apidocs_loader.py`)
- 从 `api-docs/` 目录加载 `.ms` 格式的 API 文档
- 解析文档中的 HTTP 路径、方法、参数定义
- 生成 `ToolTemplate` 数据结构
2. **工具函数生成** (`lib/tool_generator.py`)
- 根据 `ToolTemplate` 动态生成异步工具函数
- 自动处理参数类型转换、社区名称归一化、路径参数替换
- 注册到 FastMCP 实例
3. **特殊处理**
- **路径参数**:如 `/{contributeType}/detail` 中的 `contributeType` 会被识别为路径参数
- **工具命名**:路径参数占位符 `{xxx}` 会被替换为 `xxx`,避免生成多个工具
- **社区归一化**:自动将社区名称映射为标准格式
#### 添加新 API 工具
只需在 `api-docs/` 目录下添加 `.ms` 文档文件,重启服务即可自动注册。
### 手动添加工具
对于复杂的业务逻辑,仍可手动编写工具函数:
1. 在 `tools/` 目录下创建新的 Python 文件
2. 定义 `register(mcp: FastMCP)` 函数
3. 使用 `@mcp.tool()` 装饰器注册工具
4. 在 `server.py` 中导入并注册
示例:
```python
from mcp.server.fastmcp import FastMCP
from lib.http import get, post, extract_data
def register(mcp: FastMCP):
@mcp.tool()
async def my_new_tool(param: str) -> str:
"""工具描述"""
result = await get("/api/endpoint")
return f"结果: {result}"
```
### 测试
运行测试脚本验证所有功能:
```bash
cd test
python3 test_mcp.py
```
测试脚本会模拟真实使用场景,调用所有 MCP 工具并验证返回结果。详见 [test/README.md](test/README.md)。
---
## 🔧 故障排查
### MCP 服务器无法启动
1. 检查 Python 版本:`python3 --version`(需要 3.8+)
2. 检查依赖安装:`pip list | grep mcp`
3. 查看 Claude Desktop 日志
### 查询返回错误
1. 确认网络连接正常,可访问远程 API:`curl https://datastat.osinfra.cn/server/`
2. 检查社区名称是否正确(使用 `list_communities` 工具查看支持的社区)
3. 运行测试脚本验证:`cd test && python3 test_mcp.py`
### 常见错误
| 错误信息 | 原因 | 解决方案 |
|---------|------|---------|
| `ModuleNotFoundError: No module named 'mcp'` | MCP SDK 未安装 | 运行 `pip install "mcp[cli]"` |
| `Connection refused` | 无法访问远程 API | 检查网络连接和防火墙设置 |
| `Community not found` | 社区名称错误 | 使用 `list_communities` 查看支持的社区 |
---
## 📚 文档索引
| 文档 | 说明 |
|------|------|
| [FEATURES.md](FEATURES.md) | 完整功能列表和使用示例 |
| [INSTALL.md](INSTALL.md) | 详细安装指南(含虚拟环境配置) |
| [test/README.md](test/README.md) | 测试说明和故障排查 |
---
## 🔗 后端 API 说明
本 MCP 服务器调用远程 API 服务:
- **API 地址**:`https://datastat.osinfra.cn/server/`
- **修改方式**:编辑 `lib/http.py` 中的 `API_BASE_URL` 变量
---
---
## 📄 许可证
[MIT License](LICENSE)
---
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
贡献前请:
1. Fork 本项目
2. 创建特性分支:`git checkout -b feature/your-feature`
3. 提交更改:`git commit -m 'Add some feature'`
4. 推送到分支:`git push origin feature/your-feature`
5. 提交 Pull Request
---
<div align="center">
**om-metrics MCP Server** — 让开源社区数据查询更简单 📊
Made with ❤️ for Open Source Communities
</div>
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues