kenimo49/mcp-scorecard

GitHub: kenimo49/mcp-scorecard

MCP 服务器预检评分工具,从被动 token 足迹、工具作用域、安全性和命名安全四个维度评估 MCP 服务器是否适合 LLM 实际使用。

Stars: 0 | Forks: 0

# mcp-scorecard [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![GitHub Sponsors](https://img.shields.io/github/sponsors/kenimo49?logo=githubsponsors&label=Sponsor)](https://github.com/sponsors/kenimo49) [![Ko-fi](https://img.shields.io/badge/Ko--fi-tip-FF5E5B?logo=kofi&logoColor=white)](https://ko-fi.com/kenimo49) ![机修工在机库内对一架小型螺旋桨飞机进行起飞前检查清单检查](https://static.pigsec.cn/wp-content/uploads/repos/cas/02/02cb2d9f16229795f80cbb6cdbd9be535f811348d251db1214f5bea725128d31.jpg) MCP (Model Context Protocol) 服务器的起飞前检查。 `mcp-scorecard` 回答了一个问题:**“这个 MCP 服务器是否足够安全高效,适合 LLM 实际使用?”** —— 在你发布它、安装它,或将其放入你的 agent 配置之前。 现有的 MCP 工具涵盖了运行时安全性(MCP-Scan)和协议合规性(MCP Inspector)。本项目涵盖了缺失的层级:**仅为了保持注册状态,该服务器的开销有多大,以及其工具的作用域是否足够明确,以便 LLM 能选出正确的工具?** 书籍 **『MCP実践セキュリティ』**(Impress NextPublishing)的配套工具。 ## 四个层级 | 层级 | 衡量内容 | 状态 | |-------|------------------|--------| | **A. 被动足迹** | 服务器仅凭被列出,就从每个 LLM 轮次中窃取的 token 数量。`tools/list` 初始加载、单工具成本、臃肿率、schema 冗余度 | v0.1 | | **B. 用例作用域** | 每个工具的作用域是否足够狭窄,以至于 LLM 知道何时使用它。是否包含 When-to-use、模糊动词扫描、重叠检测、命名一致性、AI Slop | v0.1 | | **C. 安全性** | 自有规则(描述中的 prompt injection、工具遮蔽、硬编码密钥、传输规范)+ 可选的 MCP-Scan 包装器 | v0.1 自有规则;v0.2 引入包装器 | | **D. 名称安全性** | 大小写冲突、品牌相似性、分隔符变体、namespace 规范 | v0.1 | 设计细节:[docs/design.md](docs/design.md)。 ## 安装 ``` pip install mcp-scorecard # CLI + library pip install "mcp-scorecard[mcp]" # + MCP server (stdio) ``` ## 作为 CLI 使用 ``` # 完整扫描 mcp-scorecard scan ./path/to/server.py mcp-scorecard scan http://localhost:8000/ mcp-scorecard scan pypi:some-mcp # 仅 Layer mcp-scorecard footprint ./server.py mcp-scorecard scoping ./server.py mcp-scorecard security ./server.py mcp-scorecard name my-new-mcp # CI-friendly mcp-scorecard scan ./server.py --json mcp-scorecard scan ./server.py --format sarif # exit codes: 0=GREEN/YELLOW, 1=ORANGE, 2=RED ``` ## 作为 MCP 服务器使用(自托管) 将 `mcp-scorecard` 本身作为 MCP 工具注册到 Claude Code / Cursor / Windsurf 中,然后让 LLM 审计另一个 MCP: ``` { "mcpServers": { "mcp-scorecard": { "command": "mcp-scorecard-mcp" } } } ``` 然后在聊天中:*“对位于 ./my-server.py 的 MCP 服务器进行评分”*。 ## 为什么被动足迹很重要 已注册的 MCP 服务器中的每个工具描述和 inputSchema 都会在每一轮对话中发送给 LLM —— 因为模型需要看到它们才能决定调用哪个工具。一个冗余的服务器在任何人使用它之前,就可能在每轮对话中默默消耗 5,000 多个 token。 `mcp-scorecard footprint` 正是用于精确测量这一点,以便你在发布前进行精简。 ## 路线图 - **v0.1** — A + B + D 层完整,C 层自有规则,CLI + MCP 服务器 - **v0.2** — MCP-Scan 包装器,SARIF,真实的 MCP 客户端协商 - **v0.3** — 书籍『MCP実践セキュリティ』各章节规则整合 - **v0.4** — 注册表源目标(`github:` / `npm:`) ## 支持本项目 - 💚 [GitHub Sponsors](https://github.com/sponsors/kenimo49) - ☕ [Ko-fi](https://ko-fi.com/kenimo49) ## 许可证 MIT。
标签:AI安全审计, DLL 劫持, DNS 反向解析, MCP, SOC Prime, StruQ, 代码质量检测, 大语言模型, 开发工具, 逆向工具