构建 AI 原生数据发现的 MCP 服务器:Rust Crates 生态系统:第一部分
发布: (2025年12月4日 GMT+8 19:53)
3 min read
原文: Dev.to
Source: Dev.to
介绍
传统的数据探索依赖预定义的查询——SQL 代码、仪表盘、BI 工具。
如果你可以以对话的方式探索数据仓库,提出开放式问题,让 AI 发现你从未想到的模式,会怎样?
模型上下文协议(MCP)让这成为可能。我构建了一个用于分析 Rust 生态系统的 MCP 服务器,并让 Claude 对其进行探索,回答有关 crates、依赖关系和趋势的问题。
如果你想跟随操作,请查看完整项目的 Rust Crates Analytics Repo。
理解 crates.io 数据
当你下载并解压 crates.io DB 转储(请参阅 README 中的 download link),你会得到:
- 一个包含本地加载说明的 PostgreSQL 转储。
data文件夹,包含表示实际内容的 CSV 文件。
实体概览
| 实体 | 描述 |
|---|---|
crates | 发布到 crates.io 的 Rust 包 |
versions | crate 的特定发行版(例如 serde v1.0.228) |
categories | 分类学分类(例如 science::bioinformatics) |
keywords | 用于可发现性的用户自定义标签(例如 cargo、sql) |
teams | 可以拥有 crates 的组织账户(GitHub) |
users | 个人开发者账户(GitHub) |
事实表
version_downloads– 每个版本每日的时间序列下载计数(仅最近 3 个月)。crate_downloads– 每个 crate 的累计总下载计数。
关联表
crates_categories– 将 crates 与 categories 关联。crate_owners– 将 crates 与用户或团队关联。crates_keywords– 将 crates 与 keywords 关联。dependencies– 将版本与其依赖的 crates 关联。
支持表
metadata– 包含一行total_downloads。reserved_crate_names– 受保护/不可用的 crate 名称列表。default_versions– 将 crates 与其默认版本关联。
历史数据
version_downloads表仅保留最近三个月的数据。- 较早的每日 CSV 转储(可在 crates.io 网站获取)包含
version_id和downloads列;日期需从文件名推断。 - 所有其他表表示转储时生态系统的状态(例如
crates.created_at、crates.updated_at)。
关键要点
- DB 转储每天刷新,反映下载时的生态系统状态。
- 每天,会有一天的数据从三个月窗口中移除并放入 CSV 存档。
- 分析中最重要的表是
crates、versions、version_downloads和dependencies。
架构概览
ELT 流水线设计
| 层 | 目的 | |---------