MCP自动化分类
分类管道 MCP(模型上下文协议) 服务器对 O\*NET职业框架,测量每个MCP服务器可以在多大程度上自动化现实世界的职业任务。
它的作用
MCP服务器是类似插件的工具,使AI助手能够访问外部服务、API和数据源。该项目要求: **每个MCP可以自动化哪些O\*NET职业任务,自动化程度如何?**
对于从中抓取的约9000多台MCP服务器中的每一台 mcp.so:
- 嵌入检索 --Voyage-4大型嵌入从O\*NET中找到语义上最相似的前80个详细工作活动(DWA)。
- DWA选择 --GPT-4.1评估了这80个DWA,并选择了多达15个MCP可以合理自动化其基础任务的DWA。
- 任务评级 --GPT-4.1对每个O\*NET任务(1-5级)进行评级,以评估该特定MCP可以自动化多少。
- 聚合 --将所有MCP的评级汇总在一起,按自动化潜力生成任务排名列表。
可交付文件
完整的结果数据集托管在HuggingFace上: https://huggingface.co/datasets/theodorewright11/mcp_to_onet_classification
| 文件 | 描述 |
|---|---|
data/mcp/results/mcp_results_YYYY-MM-DD.csv | 根据MCP分类结果(DWA选择+任务评级) |
data/mcp/results/task_results_YYYY-MM-DD.csv | 所有MCP的聚合任务级统计数据 |
每个的最新版本都是当前的规范数据集。较旧的文件保存在同一文件夹中以供参考。
输出列-- mcp_results_*.csv
| 列 | 说明 |
|---|---|
title | MCP服务器名称 |
url | mcp.so URL |
text_for_llm | 用作LLM输入的组合描述 |
uploaded_clean | 上传日期(MM-DD-YYYY) |
dwa_status | selected / none / not_enough_info / not_occ_relevant / api_error |
dwas_selected | LLM选择的以分号分隔的DWA标题(最多15个) |
n_dwas_selected | 所选DWA的计数 |
task_ratings | "task text (occupation): rating; ..." --每项任务1-5个自动化评级 |
n_tasks_rated | 已评级的任务数量 |
n_tasks_sent | 发送到评级提示的任务数 |
dwas_used_for_tasks | 贡献任务的DWA( dwas_selected) |
输出列-- task_results_*.csv
| 列 | 说明 | ||
|---|---|---|---|
task | O\*NET任务文本 | ||
occupation | 职业名称 | ||
n_ratings | 对此任务进行评级的MCP数量 | ||
mean_rating | 平均自动化等级(1-5) | ||
median_rating | 中位数评级 | ||
max_rating / min_rating | 最高和最低评级 | ||
p25_rating / p75_rating | 第25百分位和第75百分位评分 | ||
mcp_titles | `" \ | \ | "`-对该任务进行评级的MCP服务器标题的分离排序列表 |
任务评分量表
| 评级 | 含义 |
|---|---|
| 1 | 没有有意义的自动化(0-10%)——MCP没有解决这项任务 |
| 2 | 最低限度的支持(10-30%)——以小部分协助 |
| 3 | 部分自动化(30-60%)——自动化有意义的部分;需要人类的判断 |
| 4 | 高度自动化(60-90%)——执行大部分工作流程 |
| 5 | 近乎完全自动化(90-100%)——端到端执行,几乎不需要人工干预 |
______________________________________________________________________
项目结构
mcp_classification_final/
├── scripts/
│ ├── mcp_scraper.py # Scrapes mcp.so for new MCP servers
│ ├── data_prep.ipynb # Cleans raw scrape data + generates embeddings
│ ├── llm_classification.ipynb # LLM-based classification pipeline (sync + batch)
│ └── analysis.ipynb # Research notebook: embedding quality + model comparison
│
├── data/
│ ├── mcp/
│ │ ├── results/
│ │ │ ├── mcp_results_*.csv # Classification results (DELIVERABLE)
│ │ │ └── task_results_*.csv # Aggregated task ratings (DELIVERABLE)
│ │ ├── raw/
│ │ │ ├── mcp_scraped_*.csv # Raw scrape output
│ │ │ └── mcp_data_*.csv # Cleaned MCP data (input to classification)
│ │ ├── mcp_classification_teddy.csv # Manual ground-truth (30 MCPs)
│ │ └── gpt-4.1_v5.2_occ_gwa_iwa_dwa_task.csv # Prior GPT-4.1 v5.2 classifications
│ ├── onet/
│ │ ├── onet_data.csv # O*NET tasks (23,850 rows)
│ │ ├── dwa_reference_v30.1.csv # DWA hierarchy reference
│ │ └── tasks_to_dwas_v30.1.csv # Task-to-DWA mapping
│ ├── embeddings/ # Voyage-4-large .npy embedding arrays
│ │ ├── voyage_dwa_emb.npy # DWA embeddings (2,083 × 1024) — generated once
│ │ ├── voyage_mcp_emb.npy # MCP embeddings for the Jan 2026 full run
│ │ └── voyage_mcp_emb_*.npy # MCP embeddings for subsequent scrape batches
│ └── batch/ # Batch API intermediate state (git-ignored)
│
├── requirements.txt
├── .env # API keys (git-ignored — see Setup below)
└── .gitignore______________________________________________________________________
设置
1.创建虚拟环境并安装依赖项
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt2.创建一个 .env 使用API密钥文件
OPENAI_API_KEY=sk-proj-...
VOYAGE_API_KEY=pa-...______________________________________________________________________
运行管道
步骤1——报废新的MCP
python scripts/mcp_scraper.py- 自动加载最新
mcp_results_*.csv从data/mcp/results/跳过已分类的URL。 - 输出
data/mcp/raw/mcp_scraped_YYYY-MM-DD.csv只有新的MCP服务器。
第二步——清洁并嵌入
打开 scripts/data_prep.ipynb 并运行所有细胞。
- 配置单元格 (顶部):设置
RAW_SCRAPE_FILE转换为步骤1中的文件名,或保留为None自动检测最近的刮入data/mcp/raw/. - 输出:
- data/mcp/raw/mcp_data_YYYY-MM-DD.csv --清洁的MCP - data/embeddings/voyage_mcp_emb_YYYY-MM-DD.npy --新MCP的Voyage-4大型嵌入件 - data/embeddings/voyage_dwa_emb.npy --DWA嵌入(生成一次;在后续运行中重复使用)
第3步——分类
打开 scripts/llm_classification.ipynb 并运行相关管段。
- 配置单元格 (顶部):设置
MCP_DATA_FILE和MCP_EMB_FILE转换为步骤2中的文件名。EXISTING_RESULTS_FILE自动检测最新mcp_results_*.csv在data/mcp/results/融入。 - 选择管道:
- 同步 (“运行分类管道”部分)——更简单,一次性运行,每次请求的成本更高。 - 批次API (“批量API分类管道”部分)-便宜50%,速率限制更高,异步(最多24小时周转)。建议用于大型跑步。
- 输出 (两个管道产生相同的格式):
- data/mcp/results/mcp_results_YYYY-MM-DD.csv --合并(历史+新)分类结果 - data/mcp/results/task_results_YYYY-MM-DD.csv --所有MCP的聚合任务级统计信息
先前 mcp_results_* 和 task_results_* 文件被保留。最新日期的文件是当前的规范数据集。
______________________________________________________________________
批次API管道详细信息
批量管道是大规模运行的推荐方法。它将所有请求提交给OpenAI的Batch API并轮询以完成。
它是如何工作的(按此顺序运行单元格):
- 先决条件:“导入和配置”、“加载数据”、“核心功能”、“选择要分类的MCP”
- “批配置+输出路径”
- “生成DWA选择JSONL”→ “上传+创建批处理”
- DWA轮询单元(每30秒自动等待一次,直到完成)
- “分析DWA结果”
- “生成任务评级JSONL”→ “上传+创建任务批”
- 任务轮询单元格(自动等待)
- “解析+合并+保存”
- “批处理任务级聚合”
内核重启安全: 中间状态保存到 .pkl 文件位于 data/batch/如果内核在步骤之间重新启动,请重新运行必备单元格,设置 DWA_BATCH_ID / TASK_BATCH_ID 手动,然后从轮询单元格继续。
恢复已停止的批处理: 管道会自动重试任何 api_error 部分运行中的行。只需从“批处理配置+输出路径”重新运行即可,它将从停止的地方继续运行。
______________________________________________________________________
O\*NET层次结构
GWA (General Work Activity) — e.g., "Processing Information"
└─ IWA (Intermediate Work Activity) — e.g., "Compile records, documentation, or other data."
└─ DWA (Detailed Work Activity) — e.g., "Compile operational data."
└─ Task — e.g., "Compile information about flights from flight plans..."
└─ Occupation — e.g., "Aircraft Pilots and Copilots"分类自下而上工作:管道选择DWA,然后检索它们下面的任务并对其进行评级。
______________________________________________________________________
嵌入方法
嵌入被提交到存储库中 data/embeddings/.
- 型号:
voyage-4-large(Voyage AI,1024昏暗)--需要VOYAGE_API_KEY再生 - DWA嵌入式 (
voyage_dwa_emb.npy)——2083个O\*NET DWA标题;生成一次,永不更改 - MCP嵌入 --一个
.npy每个刮擦批的文件,命名voyage_mcp_emb_YYYY-MM-DD.npy
要重新生成嵌入(例如在添加新的MCP后),请运行以下的嵌入部分 data_prep.ipynb.
______________________________________________________________________
地面实况数据
data/mcp/mcp_classification_teddy.csv --30个MCP手动分类,包括完整的GWA/IWA/DWA/任务层次结构、可部署性评分和注释。用作验证管道的基本事实。
data/mcp/gpt-4.1_v5.2_occ_gwa_iwa_dwa_task.csv --31个MCP由早期的GPT-4.1管道(v5.2)分类,并进行了广泛的现场推理。保存用于比较和验证。
scripts/analysis.ipynb --研究笔记本,将嵌入的最近邻检索与这些手动分类进行比较,以验证 TOP_K_DWAS = 80 捕获正确的DWA。
______________________________________________________________________
关键统计数据
*待初步数据集最终确定后进行更新。*
| 度量 | 值 |
|---|---|
| MCP分类 | -- |
| 选择DWA的MCP | -- |
| 任务评级对总数 | -- |
| 独特的(任务、职业)配对 | -- |
| O\*NET中的独特DWA | 2083 |
| O\*NET任务总数 | 23850 |
