关于 devstack-mcp
devstack-mcp 是面向开发者及 MCP 客户端的远程 MCP 适配器,连接 DevStack API,提供规范化的软件包和注册表数据。其 10 个工具涵盖软件包详情、依赖关系、漏洞及 50 多个生态系统的跨注册表查询。
主要功能
- 01搜索软件包并查看版本详情
- 02下载量和拉取量统计
- 03已解析的依赖关系图
- 04软件包漏洞扫描
- 05OSSF Scorecard 洞察
- 06查询 50 多个生态系统
适用场景
- 01查看软件包版本和下载趋势
- 02检查特定版本的依赖关系图
- 03扫描软件包或锁文件中的漏洞
- 04跨注册表查找软件包
MCP 相关
通过 `/mcp` 的 streamable HTTP 传输,将 DevStack API 端点作为类型化 MCP 工具公开。工具调用会转发至 DevStack,并将 JSON 响应作为工具结果返回。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://devstack-mcp.vercel.app/mcpclaude mcp add --transport http isaiahdupree-devstack https://devstack-mcp.vercel.app/mcp{"mcpServers":{"isaiahdupree-devstack":{"type":"http","url":"https://devstack-mcp.vercel.app/mcp"}}}在 Cursor 中打开{"servers":{"isaiahdupree-devstack":{"type":"http","url":"https://devstack-mcp.vercel.app/mcp"}}}在 VS Code 中打开{"mcpServers":{"isaiahdupree-devstack":{"type":"http","url":"https://devstack-mcp.vercel.app/mcp"}}}{"mcpServers":{"isaiahdupree-devstack":{"serverUrl":"https://devstack-mcp.vercel.app/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
10| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 包名称/ID。支持带作用域的 npm ID(@scope/pkg)、Docker 命名空间(ns/name 或官方镜像的裸名称)以及 VS Code publisher.extension ID。 |
| registry | enum | 是 | 目标注册表。"all" 会并行查询所有注册表并合并结果。npm | pypi | docker | vscode | all |
详细介绍
devstack-mcp
面向 DevStack API 的远程 MCP(模型上下文协议)连接器——libraries.io 的后继项目:无需密钥,即可统一查看整个开发者注册表,涵盖 npm、PyPI、Docker Hub 和 VS Code Marketplace(搜索、程序包详情、版本、下载/拉取统计数据);还提供已解析的依赖关系图(deps.dev)、按版本划分的漏洞信息(OSV.dev)、OSSF Scorecard 见解(deps.dev),以及跨 50 多个生态系统的注册表查询(ecosyste.ms)。
目标部署地址: https://devstack-mcp.vercel.app/mcp——10 个工具。由于上游 DevStack 部署按量计费(RapidAPI/Apify),且通过 RapidAPI 代理密钥保护限制对 /v1/* 的访问,此连接器使用同一个代理密钥对自身的出站调用进行身份验证(DEVSTACK_MCP_PROXY_SECRET,通过 X-RapidAPI-Proxy-Secret 标头发送),并按 IP 实施宽松的速率限制(DEVSTACK_MCP_RATE_LIMIT,默认为每小时 30 次工具调用,基于内存),确保免费的 MCP 层仍是发现渠道,而不是绕过付费列表的无限制通道——详见 lib/ratelimit.js。
这是什么,以及为什么它是一个独立的连接器
DevStack API 是一个普通的 REST API。任何 HTTP 客户端都可以直接调用它。这个仓库存在的原因是:MCP 客户端(Claude、ChatGPT 和其他支持 MCP 的 Agent)不会使用任意 REST API——它们使用 MCP 工具。 devstack-mcp 是一个轻量级适配层,它:
- 将每个 DevStack 端点作为可发现、带类型的 MCP 工具公开(名称、描述、zod 输入架构、注释),让大模型能够理解并直接调用,而不必通过其他方式预先了解 REST 接口。
- 通过单一
/mcp端点支持 MCP 可流式 HTTP传输,因此只需一个 URL,就能将其注册为 Claude、ChatGPT 或任何其他 MCP 客户端的连接器。 - 不做其他任何事情。它没有自己的业务逻辑——每次工具调用都会直通
fetch到 DevStack,并将 DevStack 返回的 JSON 响应原样作为工具结果返回。
身份验证:MCP 端无需验证(有意如此)
DevStack 的数据完全不涉及按用户区分——这些是公开的开发者注册表元数据(程序包列表、版本、下载次数、依赖关系图、已发布的 CVE)。没有需要按调用方进行限制的内容,因此此连接器特意采用以下设计:
- 无 OAuth、无登录、无按用户颁发的承载令牌
- 无 Supabase/数据库
- 不区分演示账号和真实账号——所有调用方都能获取相同的真实实时数据
它携带的唯一服务器端密钥(DEVSTACK_MCP_PROXY_SECRET)不是按调用方进行身份验证的密钥——此连接器作为单一使用方,通过它绕过上游的 RapidAPI 代理密钥保护,以访问真实数据。结合按 IP 实施的宽松速率限制,这使它成为付费 DevStack 产品之上的免费发现层,而不是绕过付费 RapidAPI/Apify 列表的无限制通道。
工具列表
每个 DevStack /v1 端点对应一个工具(来自 devstack-api/openapi.yaml):
| 工具 | DevStack 端点 | 描述 |
|---|---|---|
get_package | GET /v1/package | 按注册表和名称获取规范化的软件包详情(registry=all 会向所有注册表发起请求)。 |
search_packages | GET /v1/search | 搜索 npm/Docker/VS Code(或 all);PyPI 没有搜索 API。 |
get_versions | GET /v1/versions | 已发布的版本 / 镜像标签 / 扩展版本。 |
get_downloads | GET /v1/downloads | 下载 / 拉取统计数据(仅适用于 npm + PyPI)。 |
get_dependency_graph | GET /v1/deps | 某个确切版本的完整依赖关系图(deps.dev)。 |
get_vulnerabilities | GET /v1/vulns | 按软件包/版本查询已知的 CVE/GHSA(OSV.dev)。 |
scan_vulnerabilities_batch | POST /v1/vulns | 批量/锁文件漏洞扫描——一次调用最多支持 100 个查询(OSV.dev)。 |
get_insights | GET /v1/insights | OSSF Scorecard + 仓库信号 + 许可证/公告(deps.dev)。 |
search_ecosystems | GET /v1/ecosystems/search | 跨 50 多个生态系统和注册表按确切名称查找(ecosyste.ms)。 |
get_ecosystems_package | GET /v1/ecosystems/package | 在一个注册表中查询一个软件包,并提供反向依赖数量(ecosyste.ms)。 |
所有 10 个工具均为只读,并标注为 { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }。scan_vulnerabilities_batch 使用 HTTP POST,但它是只读查询(不会修改任何内容),因此带有相同的只读注解。
devstack-api 封装方式
每个工具处理程序都会针对真实的 DevStack REST API 执行普通的 fetch(\${DEVSTACK_MCP_API_BASE_URL}${path}`, ...)`,并将解析后的 JSON 作为 MCP 工具结果内容返回:
{ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }
上游 HTTP 错误(4xx/5xx)会被捕获,并通过 asError 辅助函数作为带类型的 MCP 错误结果返回,而不会导致请求崩溃。
环境变量
| 环境变量 | 用途 | 默认值 |
|---|---|---|
DEVSTACK_MCP_API_BASE_URL | 上游 DevStack 基础 URL。 | https://devstack-api.vercel.app |
DEVSTACK_MCP_PROXY_SECRET | RapidAPI 代理密钥,以 X-RapidAPI-Proxy-Secret 发送,用于通过上游 /v1/* 保护机制。 | ""(省略) |
DEVSTACK_MCP_RATE_LIMIT | 此免费层每个 IP 每小时的软性工具调用上限。 | 30 |
项目布局
api/mcp.js MCP endpoint (StreamableHTTPServerTransport, stateless, no per-caller auth)
api/health.js GET /api/health
lib/tools.js All 10 tool definitions (zod schemas + fetch-and-forward handlers)
lib/ratelimit.js Soft per-IP tools/call cap (free discovery tier)
local-server.js Plain-Node http server for local dev / smoke testing (not deployed)
test/smoke.mjs Real end-to-end smoke test (initialize, tools/list, tools/call)
vercel.json Routes /mcp -> api/mcp.js, /health -> api/health.js
server.json MCP registry publish manifest
本地开发
npm install
npm run dev # starts local-server.js on http://localhost:3900
本地端点:POST http://localhost:3900/mcp、GET http://localhost:3900/health。
如需使用可自托管 / 开放的 DevStack 实例,而非生产环境(这对完全无需密钥的端到端运行很有用,因为生产环境的 /v1/* 受 RapidAPI 代理密钥保护机制限制):
# In devstack-api (guard is inert when RAPIDAPI_PROXY_SECRET is unset):
node server.js # listens on :8080
# In devstack-mcp:
DEVSTACK_MCP_API_BASE_URL=http://localhost:8080 npm run dev
冒烟测试
npm run dev & # terminal 1
npm run smoke # terminal 2
test/smoke.mjs 通过真实的 HTTP/JSON-RPC 驱动运行中的服务,并验证:
GET /health返回{ ok: true, ... }initialize成功,并报告serverInfo.name === "devstack"tools/list返回全部 10 个工具及其由 zod 派生的 JSON 架构- 使用
{ registry: "npm", name: "react" }调用get_package的tools/call会返回实时获取的真实软件包数据(非模拟数据)
在生产环境中,第 4 步需要设置 DEVSTACK_MCP_PROXY_SECRET(RapidAPI 代理保护);在未设置 RAPIDAPI_PROXY_SECRET 的本地自托管 devstack-api 中,该保护机制不会生效,可以无需密钥获取真实数据。
部署
此版本尚未部署。准备就绪后:
cd /Users/isaiahdupree/Software/devstack-mcp
npx vercel --yes --prod
部署后,在 Vercel 项目中设置 DEVSTACK_MCP_PROXY_SECRET,以便连接器访问受保护的生产环境 /v1/*,然后在 Claude/ChatGPT/任何 MCP 客户端中注册 MCP 连接器 URL:
https://<deployment-domain>/mcp
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。