mcpField
D
devstack-mcp

devstack-mcp

远程服务
devstack-mcp.vercel.app开发工具013 周前更新

关于 devstack-mcp

devstack-mcp 是面向开发者及 MCP 客户端的远程 MCP 适配器,连接 DevStack API,提供规范化的软件包和注册表数据。其 10 个工具涵盖软件包详情、依赖关系、漏洞及 50 多个生态系统的跨注册表查询。

主要功能

  1. 01搜索软件包并查看版本详情
  2. 02下载量和拉取量统计
  3. 03已解析的依赖关系图
  4. 04软件包漏洞扫描
  5. 05OSSF Scorecard 洞察
  6. 06查询 50 多个生态系统

适用场景

  1. 01查看软件包版本和下载趋势
  2. 02检查特定版本的依赖关系图
  3. 03扫描软件包或锁文件中的漏洞
  4. 04跨注册表查找软件包

MCP 相关

通过 `/mcp` 的 streamable HTTP 传输,将 DevStack API 端点作为类型化 MCP 工具公开。工具调用会转发至 DevStack,并将 JSON 响应作为工具结果返回。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://devstack-mcp.vercel.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

10
参数类型必填说明
namestring是包名称/ID。支持带作用域的 npm ID(@scope/pkg)、Docker 命名空间(ns/name 或官方镜像的裸名称)以及 VS Code publisher.extension ID。
registryenum是目标注册表。"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_packageGET /v1/package按注册表和名称获取规范化的软件包详情(registry=all 会向所有注册表发起请求)。
search_packagesGET /v1/search搜索 npm/Docker/VS Code(或 all);PyPI 没有搜索 API。
get_versionsGET /v1/versions已发布的版本 / 镜像标签 / 扩展版本。
get_downloadsGET /v1/downloads下载 / 拉取统计数据(仅适用于 npm + PyPI)。
get_dependency_graphGET /v1/deps某个确切版本的完整依赖关系图(deps.dev)。
get_vulnerabilitiesGET /v1/vulns按软件包/版本查询已知的 CVE/GHSA(OSV.dev)。
scan_vulnerabilities_batchPOST /v1/vulns批量/锁文件漏洞扫描——一次调用最多支持 100 个查询(OSV.dev)。
get_insightsGET /v1/insightsOSSF Scorecard + 仓库信号 + 许可证/公告(deps.dev)。
search_ecosystemsGET /v1/ecosystems/search跨 50 多个生态系统和注册表按确切名称查找(ecosyste.ms)。
get_ecosystems_packageGET /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_SECRETRapidAPI 代理密钥,以 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 驱动运行中的服务,并验证:

  1. GET /health 返回 { ok: true, ... }
  2. initialize 成功,并报告 serverInfo.name === "devstack"
  3. tools/list 返回全部 10 个工具及其由 zod 派生的 JSON 架构
  4. 使用 { 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。