服务器信任评分工具

mcp-trust-radar是一个用于评估MCP服务器信任评分的工具,通过分析权限风险、认证姿态、公开暴露风险等多维度指标,帮助用户在启用服务器前做出信任决策。

  • by brandonwise
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 brandonwise/mcp-trust-radar

使用说明

mcp信任雷达

MCP服务器的快速信任评分。

mcp-trust-radar 帮助您在启用任何服务器之前回答一个实际问题:

此服务器现在应该在我的环境中运行吗?

它使用权限风险、身份验证状态、公共暴露风险、即时注入强化信号、命令执行保障、源身份控制、供应链控制、回购新鲜度、发行压力、维护人员深度和许可证状态对服务器进行评分。

为什么这很重要

MCP工具正在快速移动。发现变得越来越容易,但信任决策仍然主要是手动的。

此项目为您提供了一个可重复的第一通滤波器,因此您可以:

  • 及早发现明显的高风险服务器
  • 在深入安全审查之前对候选人进行排名
  • 保持团队间信任检查的一致性

它得分多少

  • 权限风险(只读与外壳/写入/网络功能)
  • 身份验证姿势(auth_required)
  • 公众曝光姿态(exposed_publicly)
  • 运输安全态势(tls_enforced)对于公共端点
  • 凭证状态(credential_posture)以及凭证卫生控制(credential_controls)
  • 源身份控制(source_identity_controls)用于在安装前验证包、命名空间、仓库和维护者身份
  • 供应链控制(supply_chain_controls)用于固定、工件完整性、发布者验证和扫描
  • 快速注射硬化控制(prompt_injection_controls)
  • 命令执行保障态势(对具有命令能力的服务器进行满负荷+人工批准控制)
  • 维护健康状况(仓库有多陈旧)
  • 发行压力(与回购牵引相关的未解决问题)
  • 许可证信号(清除SPDX与丢失)
  • 维护者深度(单一维护者vs共享所有权)

安装

pip install -e .

快速开始

mcp-radar score \
  --input examples/servers.json \
  --output trust-report.json \
  --markdown trust-report.md

默认情况下,当任何服务器登录时,该命令退出非零 caution 层(对CI策略有用)。

JSON和Markdown报告现在都包含一个投资组合摘要,其中包括:

  • 层级计数和平均得分
  • 风险最高的服务器
  • 热点计数包括缺少身份验证/TLS、命令暴露、共享凭据、弱源身份和弱控制覆盖

您可以使用策略标志收紧或松开释放门:

  • --minimum-tier review (默认):仅在以下情况下失败 caution
  • --minimum-tier trusted:要求每台服务器 trusted
  • --minimum-tier caution:禁用基于层的故障
  • --minimum-score N:如果低于任何分数,则失败 N
  • --block-public-without-tls:如果任何公共服务器没有明确声明TLS强制,则失败
  • --minimum-public-controls N:如果任何公共服务器声明的可识别控件少于N个,则失败
  • --minimum-risk-surface-controls N:如果任何中/高风险或公共服务器声明的可识别控件少于N个,则失败
  • --minimum-command-controls N:如果任何支持命令的服务器声明的可识别控件少于N个,则失败
  • --block-shared-service-account:如果任何服务器声明共享服务帐户凭据,则失败
  • --minimum-credential-controls N:如果任何中/高风险或公共服务器声明的可识别凭据控件少于N个,则失败
  • --minimum-source-identity-controls N:如果任何中/高风险或公共服务器声明的可识别源标识控件少于N个,则失败
  • --minimum-supply-chain-controls N:如果任何中/高风险或公共服务器声明的可识别供应链控制少于N个,则失败
  • --block-public-command-execution:如果任何公共服务器声明命令执行权限,则失败(exec, shell, command等等)
  • --min-agent-trust N:如果认证代理信任评分低于N,则失败
  • --max-attestation-age S:如果证明时间超过S秒,则失败
  • --on-missing-attestation [ignore|warn|fail]:配置证明策略时缺少证明数据时的行为(默认值: warn)

internet-facing 和 strict 默认情况下,预设还启用公共TLS、公共命令执行、共享凭据、源标识和最小控制覆盖门。

示例:

# Strict policy: all servers must be trusted
mcp-radar score --input examples/servers.json --minimum-tier trusted

# Custom score bar: allow review tier, but block scores under 70
mcp-radar score --input examples/servers.json --minimum-tier review --minimum-score 70

# Block command-capable servers that don't declare at least 2 controls
mcp-radar score --input examples/servers.json --minimum-command-controls 2

# Block any publicly exposed server with command-execution permissions
mcp-radar score --input examples/servers.json --block-public-command-execution

# Block any publicly exposed server that does not explicitly enforce TLS
mcp-radar score --input examples/servers.json --block-public-without-tls

# Block shared service-account credentials and require 2 credential hygiene controls
mcp-radar score --input examples/servers.json --block-shared-service-account --minimum-credential-controls 2

# Block marketplace-style servers that do not declare at least 2 provenance controls
mcp-radar score --input examples/servers.json --minimum-supply-chain-controls 2

# Block servers whose install source is not anchored to at least 2 identity controls
mcp-radar score --input examples/servers.json --minimum-source-identity-controls 2

# Require external agent trust score and fresh attestation
mcp-radar score \
  --input examples/servers.json \
  --agent-attestation examples/agent-attestation.json \
  --min-agent-trust 60 \
  --max-attestation-age 300 \
  --on-missing-attestation fail

示例摘要摘录:

{
  "summary": {
    "total_servers": 4,
    "average_score": 68,
    "tier_counts": {
      "trusted": 1,
      "review": 2,
      "caution": 1
    },
    "highest_risk_servers": [
      {
        "name": "public-runner",
        "score": 43,
        "tier": "caution",
        "risk_flags": [
          {"id": "public_without_tls", "label": "Publicly exposed without explicit TLS enforcement"}
        ]
      }
    ]
  }
}

可选外部代理认证

当您希望在服务器评分之上添加运行时标识层时,请使用此选项。

mcp-trust-radar 分数 服务器风险态势.证明政策大门打开 代理人信任态势.

支持的信任评分键:

  • trust_score
  • score
  • agent_trust_score

支持的时间戳键:

  • attested_at (ISO-8601或纪元)
  • timestamp (纪元)
  • issued_at (ISO-8601或纪元)

有效载荷示例:

{
  "agent_id": "agent-runner-42",
  "trust_score": 78,
  "attested_at": "2026-03-31T22:00:00Z"
}

访问和运输姿势的输入字段

auth_required, exposed_publicly,以及 tls_enforced 是可选的布尔值。当提供时,它们会影响分数:

  • 公开+无授权将受到严厉处罚
  • Public+auth的惩罚较小
  • 公共+无TLS声明会增加传输惩罚
  • 缺少的字段保持向后兼容的评分行为
{
  "name": "ticket-helper",
  "permissions": ["issues:read", "issues:update"],
  "auth_required": true,
  "exposed_publicly": true,
  "tls_enforced": true
}

用于提示注射姿势的输入字段

prompt_injection_controls 是可选的。它接受JSON数组或逗号分隔的字符串。

公认的控制措施:

  • allowlist_only_tools
  • tool_description_sanitization
  • server_instruction_sanitization
  • tool_argument_validation
  • resource_content_sanitization
  • human_approval_for_writes

评分行为:

  • 缺少字段=没有及时的注射调整(向后兼容)
  • 控制薄弱或空白的高风险/公共服务器将受到处罚
  • 更好的控制范围带来积极的调整
  • 具有命令能力的服务器会收到额外的安全调整:
    • allowlist_only_tools + human_approval_for_writes:奖金
    • 只有一种控制:惩罚
    • 无控:重罚
{
  "name": "ops-helper",
  "permissions": ["shell:exec", "filesystem:write", "network:http"],
  "auth_required": true,
  "exposed_publicly": true,
  "prompt_injection_controls": [
    "allowlist_only_tools",
    "tool_description_sanitization",
    "tool_argument_validation",
    "human_approval_for_writes"
  ]
}

供应链态势输入字段

supply_chain_controls 是可选的。它接受JSON数组或逗号分隔的字符串。

公认的控制措施:

  • pinned_version
  • signed_artifacts
  • verified_publisher
  • internal_mirror
  • sbom_available
  • vuln_scanning

评分行为:

  • 缺少字段=无供应链调整(向后兼容)
  • 来源控制薄弱或空白的高风险/公共服务器会失去分数
  • 更好的控制范围带来积极的调整
  • internet-facing 和 strict 预设可以控制最小供应链控制范围

这是为了捕捉“有人将随机MCP包粘贴到客户端”和“此服务器通过固定的、可验证的工件的受管路径发货”之间的现实差异

{
  "name": "marketplace-helper",
  "permissions": ["issues:update", "network:http"],
  "auth_required": true,
  "exposed_publicly": true,
  "supply_chain_controls": [
    "pinned_version",
    "signed_artifacts",
    "verified_publisher",
    "vuln_scanning"
  ]
}

源标识姿势的输入字段

source_identity_controls 是可选的。它接受JSON数组或逗号分隔的字符串。

公认的控制措施:

  • registry_namespace_verified
  • repository_url_verified
  • package_name_allowlist
  • maintainer_identity_verified
  • internal_source_catalog
  • install_manifest_pinned

评分行为:

  • 缺少字段=无源标识调整(向后兼容)
  • 源代码身份控制薄弱或为空的高风险/公共服务器会失去分数
  • 更好的控制范围带来积极的调整
  • internet-facing 和 strict 预设可以打开最小的源标识覆盖范围

这是为了降低占用和产生幻觉的资源风险:在代理启用服务器之前,包名、注册表命名空间、存储库URL和维护者身份应该指向您要安装的东西。

{
  "name": "marketplace-helper",
  "permissions": ["issues:update", "network:http"],
  "auth_required": true,
  "exposed_publicly": true,
  "source_identity_controls": [
    "registry_namespace_verified",
    "repository_url_verified",
    "package_name_allowlist"
  ]
}

凭证姿态的输入字段

credential_posture 是可选的。它接受以下值 per-user, service-account,或 shared-service-account.

credential_controls 是可选的。它接受JSON数组或逗号分隔的字符串。

公认的控制措施:

  • scoped_tokens
  • short_lived_tokens
  • resource_scoped_tokens
  • token_rotation
  • per_request_reauth

评分行为:

  • 共享服务帐户凭据受到严重惩罚,特别是在公共或高风险服务器上
  • 每个用户的凭据得到积极的调整
  • 凭证控制薄弱的风险面服务器会失去分数
  • internet-facing 和 strict 预设可以打开共享凭据并控制覆盖范围
{
  "name": "ticket-helper",
  "permissions": ["issues:read", "issues:update"],
  "auth_required": true,
  "exposed_publicly": true,
  "tls_enforced": true,
  "credential_posture": "service-account",
  "credential_controls": [
    "scoped_tokens",
    "short_lived_tokens",
    "token_rotation"
  ]
}

可选的实时GitHub丰富功能

如果 repo 如果您的输入中存在新的元数据,您可以提取新的元数据:

export GITHUB_TOKEN=... # optional but recommended for rate limits
mcp-radar score --input examples/servers.json --live

层级

  • trusted (75–100):在正常对照下,试验通常是安全的
  • review (55–74):可用,但需要先进行手动审查
  • caution (0–54):高风险或维护不善;默认情况下阻止

回购布局

  • src/mcp_trust_radar/:评分引擎+CLI
  • examples/:用于快速测试的样本输入
  • tests/:单元测试

发展

pip install -e . pytest
pytest

许可证

麻省理工学院