MCP服务器分析工具

MCP Watchtower是一款用于分析MCP服务器的工具,能够检测命名、路由和语义工具冲突,以避免代理混淆或与更广泛的MCP生态系统发生冲突。

  • by ariroffe72
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ariroffe72/mcp-lens

使用说明

MCP守望台

在MCP服务器混淆代理或与更广泛的MCP生态系统冲突之前,分析其命名、路由和语义工具冲突。

文档: 开始 · CLI参考 · 检查 · API

npx mcp-watchtower scan --server "uvx my-server"

为什么它存在

MCP服务器易于发布,但难以比较。两个服务器可以公开对人类听起来不同但对代理来说可互换的工具,或者它们可以定义不同名称下含义相同的参数。

MCP Watchtower扫描本地服务器、远程端点或清单并报告:

  • 静态问题 例如重复的工具名称、不一致的命名、提示的阴影描述和过大的工具集。
  • 语义重叠 通过不断刷新的MCP语料库,您可以发现已经存在或需要更清晰边界的工具。
  • 参数冲突 其中等效概念在同一服务器内命名不一致。

运作原理

MCP Watchtower将确定性静态检查与已发布索引的语义比较相结合。扫描通过回退到中的捆绑索引来保持脱机工作 src/data/.

快速示例

# Local MCP server over stdio
npx mcp-watchtower scan --server "uvx my-server"

# Remote MCP endpoint
npx mcp-watchtower scan --remote "https://api.example.com/mcp"

# Remote MCP endpoint with bearer auth
npx mcp-watchtower scan --remote "https://api.example.com/mcp" --auth-token "$MCP_TOKEN"

# Manifest / CI input
npx mcp-watchtower scan --manifest ./tools.json --name my-server

# Machine-readable output
npx mcp-watchtower scan --server "uvx my-server" --json

# Local dashboard from a saved report
npx mcp-watchtower scan --server "uvx my-server" --json > report.json
npx mcp-watchtower dashboard --input ./report.json

平原 scan 运行静态和语义分析。常见聚焦扫描:

# Static checks only
npx mcp-watchtower scan --server "uvx my-server" --syntactic

# Semantic checks only
npx mcp-watchtower scan --server "uvx my-server" --semantic

# Expanded human-readable logging
npx mcp-watchtower scan --server "uvx my-server" --verbose

# Tune semantic sensitivity
npx mcp-watchtower scan --server "uvx my-server" --threshold 0.8

使用 --platform 将静态名称冲突视为关键。

调查结果一览

图层 示例 是否影响退出代码?
静态 重复名称、命名约定漂移、可疑描述、工具数量过多 是的,用于关键发现
语义 ALREADY_IN_CORPUS, SEMANTIC_OVERLAP, SEMANTIC_PARAMETER_CONFLICT 否,仅供警告/参考

退出码 0 意味着没有发现关键的静态发现,扫描成功完成。退出码 1 意味着至少找到了一个关键的静态发现,或者CLI遇到了运行时/使用错误(例如,无效输入或连接失败)。

程序化使用

import { SemanticAnalyzer, StaticAnalyzer } from 'mcp-watchtower'

const staticReport = new StaticAnalyzer().analyze('my-server', tools)
const semanticReport = await new SemanticAnalyzer().analyze('my-server', tools)

文档

完整的文档包括设置指南、更深入的解释和API参考:

发展

npm install
npm run build
npm test
npm run pack:check

从本地克隆运行已编译的CLI:

node dist/cli/index.js scan --server "uvx my-server"
node dist/cli/index.js dashboard --input ./report.json

有用的维护命令:

npm run crawl
npm run embed
npm run build-index
npm run publish-index

publish-index 重建语料库、嵌入和语义索引,然后将刷新的资产和清单上传到Cloudflare R2。GitHub Actions的夜间工作流程 .github/workflows/refresh-index.yml 自动运行相同的发布步骤。

维护人员发布说明

包发布使用变更集,与语义索引刷新分开。

  • 为用户可见的包更改添加一个普通变更集。
  • 使用 npx changeset --empty 故意不发布工作。
  • 通过以下方式验证发布工件 npm run build, npm test,以及 npm run pack:check.
  • 这 release.yml 工作流在合并到后将待处理的变更集发布到npm main.

许可证

麻省理工学院