使用说明
🔒 MCPShield
MCP(模型上下文协议)服务器的安全扫描程序。 在供应链风险、权限过度和配置错误危及您的系统之前,检测它们。
目录
- 为什么? --MCPShield解决了什么问题
- 先决条件 --为每个人
- 快速开始 --为每个人
- 它检测到什么 --为每个人
- 了解结果 --为每个人
- 自动修正 --为每个人
- 人工智能扫描(可选) --可选
- 配置 —
.mcpshieldrc默认值 - 配置位置 --MCPShield的外观
- OWASP MCP前10名 --框架参考
- 对于开发者 --电力用户和集成商
- 许可证
为什么?
MCP(模型上下文协议)是Claude Desktop、VS Code和Cursor等AI工具连接到外部服务的标准方式。您安装的每个MCP服务器都可以 执行任意代码 在你的机器上。
最近的攻击包括:
- 大规模分叉和重新发布 恶意负载的MCP服务器(荷兰,2026年3月)
- 打字报价 --模仿官方的包裹
@modelcontextprotocol服务器 - 地毯拉 --更新合法软件包以包含恶意代码
- 数据渗漏 --服务器秘密地将您的数据发送到外部端点
MCPShield扫描您的MCP配置 并在这些风险成为事件之前对其进行标记。
先决条件
MCPShield运行 Node.js,JavaScript运行时。你需要把它安装在你的机器上。
看看你有没有。 打开终端并运行:
node --version
如果你看到一个版本号(如 v20.11.0)你准备好了。如果你收到“找不到命令”,请安装Node.js:
- 首选 nodejs.org
- 下载 长期支持 (长期支持)版本
- 运行安装程序
如何打开终端:
- macOS: 按
Cmd + Space,键入“终端”,按Enter键 - 窗户: 按
Win + R,键入“powershell”,按Enter键 - Linux: 按
Ctrl + Alt + T(因分布而异)
MCPShield需要Node.js 18或更高版本。
快速开始
安全扫描的三个步骤。
步骤1:安装(一次性设置)
npm install -g @ferrierepete/mcpshield
这增加了 mcpshield 命令到您的系统。
步骤2:运行扫描
mcpshield scan
MCPShield会自动发现您的所有MCP配置(Claude Desktop、VS Code、Cursor、Windsurf、Continue、Zed等),并一起扫描它们。不需要额外的旗帜。
使用 mcpshield list 查看发现了哪些配置文件。
第三步:阅读你的分数
MCPShield输出0到100的安全评分:
| 分数 | 这意味着什么 |
|---|---|
| 80–100 ✅ | 好身材。无需采取紧急行动。 |
| 60–79 ⚠️ | 有意义的风险。跑 mcpshield fix --dry-run 查看建议的修复程序。 |
| 0–59 🔴 | 关键风险。跑 mcpshield fix --dry-run 立即,然后 mcpshield fix 申请。 |
没有安装选项。 如果你不想安装任何东西,你可以用以下命令运行一次性扫描 npx:
npx @ferrierepete/mcpshield scan
无需全局安装,只需一步即可下载并运行MCPShield。
它检测到什么
一览
| 类别 | 用简单的英语来说,这意味着什么 |
|---|---|
| 供应链 | 确保您安装的MCP服务器是真实的,而不是伪造的副本 |
| 权限 | 标记有权访问不需要的文件或文件夹的服务器 |
| 秘密 | 如果密码或API密钥以明文形式存储在您的配置中,则发出警告 |
| 配置 | 捕获服务器设置中的错误或危险设置 |
| 网络 | 检测连接到可疑或不安全网址的服务器 |
| 码头工人 | 检查不安全的Docker容器设置(如果您使用Docker) |
详细检测参考
| 类别 | 检查 |
|---|---|
| 供应链 | 未封装版本(semver范围被拒绝: ^, ~, >=)、未经验证的包、已知有风险的包、typosquats、npm exec/pnpm-dlx/yarn dlx/bun x runners、Python版本固定 |
| 注册表 | npm/PyPI上的包存在、最近发布的包(<30天)、单版本包、缺少源代码仓库、单一维护者、PyPI深度分析(年龄、版本计数、没有源代码仓库的作者) (与 --registry) |
| 权限 | 广泛的文件系统访问、敏感的工作目录、过于宽松的运行时标志(--allow-all, --no-sandbox, --disable-sandbox, --unsafe)args中的sudo/chmod/chown、扩展的危险路径(/tmp、/proc、/sys、/dev)、路径遍历尝试、IPv6 ::: 绑定、空/通配符环境变量、自动批准的工具与广泛访问相结合 |
| 秘密 | 硬编码API密钥,明文配置中的令牌,29个敏感的env-var模式,AWS/GitHub/Sstripe/Slack密钥格式检测 |
| 配置 | 缺少命令、本地可执行路径(/ 或 ~ 前缀),curl/wget作为服务器命令,通过7个解释器(bash、sh、zsh、dash、ksh、csh、tcsh)进行shell注入,跨6个运行时的代码执行标志(node/python/python3/perl/ruby/php),eval/exec模式,换行注入, $VAR 扩展、输入/附加重定向, /usr/bin/env 包装, node --require 预加载,VS代码 ${input:...} 变量替换 |
| 网络 | 绑定到0.0.0.0、可疑URL(24种模式,包括webhook.site、pastebin、Discord webhooks、Telegram机器人、URL缩短器、Google Forms)、基于IP的服务器URL、URL中的凭据 |
| 码头工人 | --privileged 标志,23个危险的Docker标志(--security-opt, --user root, --cap-add, --net=host, --pid=host等),拆分形式 --cap-add 能力值, --mount 语法、敏感卷挂载、Docker套接字暴露、未固定映像标签、暴露端口、Docker Compose检测 |
| HTTP/SSE传输 | 不安全的HTTP连接, ws:// 检测、远程服务器上缺少身份验证标头、URL凭据、传输类型/URL一致性验证 |
| 威胁 | 排版(14种图案,包括 @anthropic/, @openai/ 作用域扩展旁路)、反向shell检测、十六进制编码字符串、短base64(混淆)、URL中的凭据、URL编码的有效载荷、命令字段中的可疑URL |
| 工具中毒 | 自动批准的工具、未经身份验证的远程服务器、运行时工具中毒通知 (信息严重性) |
| 客户特定 | VS代码 type/inputs 克劳德·菲尔德 autoApprove/alwaysAllowZed settings,继续仅使用URL的服务器 |
了解结果
安全评分
MCPShield生成0-100的安全评分。每个发现都会根据严重程度扣除分数:
- 关键:-25分
- 最高:-15分
- 中等:-8分
- 低:-3分
- 信息:0分
禁用(休眠)服务器不在得分范围内。
如何处理你的分数:
| 范围 | 动作 |
|---|---|
| 80–100 ✅ | 无需采取紧急行动。在方便的时候审查信息级别的调查结果。 |
| 60–79 ⚠️ | 跑 mcpshield fix --dry-run 要预览建议的修复,请使用 mcpshield fix. |
| 0–59 🔴 | 跑 mcpshield fix --dry-run 立即查看问题所在,然后应用修复程序 mcpshield fix。之后重新扫描以确认改进。 |
输出示例
🔒 MCPShield Security Report
──────────────────────────────────────────────────
Config: /home/user/.config/claude/config.json
Date: 2026-04-02 22:15:00
Security Score: 42/100
Findings: 2 critical 3 high 1 medium
📦 filesystem-dangerous [25/100]
Command: npx
🔴 Broad Filesystem Access [MCPS-001]
Server has access to path "/". This grants read/write access to sensitive system directories.
→ Fix: Restrict filesystem access to only the specific directories this server needs.
Refs: MCP03:2025 - Privilege Escalation via Scope Creep, MCP07:2025 - Insufficient Authentication & Authorization
🟠 Sensitive Credentials in Config [MCPS-002]
Found 1 sensitive environment variable(s): AWS_SECRET_ACCESS_KEY
→ Fix: Use a secrets manager instead of hardcoding credentials.
📦 [Dormant] old-server [N/A]
Command: npx
ℹ️ Server is disabled and excluded from the security score.
📦 github-safe [100/100]
✅ No security issues found
下一步做什么
扫描后,请按照以下顺序操作:
- 从关键发现开始 (🔴). 这些都是需要立即关注的真实风险。
- 预览自动修复 在应用它们之前:这准确地显示了会发生什么变化,而无需触摸您的文件。
mcpshield fix --dry-run - 应用修复程序 当您对预览满意时:MCPShield创建了一个
mcpshield fix.bak在进行任何更改之前进行备份,这样您就可以随时撤消。 - 重新扫描 查看您的更新分数:
mcpshield scan
自动修正
MCPShield可以自动修复MCP配置中的几个常见安全问题。它总是创造一个 .bak 在进行更改之前进行备份,这样如果出现问题,您就可以恢复原始状态。
安全第一的方法。 始终从模拟运行开始预览更改:
mcpshield fix --dry-run
当您准备申请时:
mcpshield fix
要定位特定的配置文件,请执行以下操作:
mcpshield fix --config ~/.config/Claude/claude_desktop_config.json
注: 不像 scan (自动发现所有配置), fix 和 watch 仅自动检测他们找到的第一个配置文件。如果您使用多个MCP客户端(Claude Desktop、VS Code、Cursor等),请使用以下命令指定配置 --config.
支持的自动修复程序:
| 修复 | 它的作用 |
|---|---|
| Pin包版本 | 从npm注册表解析确切的版本(例如。 pkg@1.2.3);倒退到 pkg@0.0.0-REVIEW-NEEDED 如果决议失败 |
| 替换硬编码的秘密 | 将明文值替换为 ${VAR_NAME} 参考文献 |
| 绑定到本地主机 | 替换 0.0.0.0 随着 127.0.0.1 和 :: 随着 ::1 (IPV 6本地主机) |
| 升级到HTTPS | 替换 http:// 随着 https:// 用于远程URL |
| 删除空的环境变量 | 清理空或通配符环境变量 |
| 标志 | 描述 |
|---|---|
-c, --config <path> |
MCP配置文件的路径 |
--dry-run |
预览修复而不写入更改 |
人工智能扫描(可选)
MCPShield可以使用AI模型来仔细检查其发现并减少误报。这是完全可选的,没有它,MCPShield也能很好地工作。
它是如何工作的。 当您启用AI扫描时,MCPShield会发送 描述 将每个发现(不是你的秘密值)提交给人工智能模型以获得第二意见。人工智能将返回三个判决之一:
- 确认 --这是一个真正的安全风险,请注意
- 可能为假阳性 --在这种情况下可能是安全的,但值得一看
- 需要审核 --人工智能无法判断,因此人类应该进行验证
没有AI密钥?没问题 MCPShield内置信心评分,无需任何API键即可运行。它使用上下文规则来向上或向下调整置信度(例如,被取消固定的可信包的置信度低于未知包)。使用 --min-confidence 0.7 过滤掉低置信度的发现。
要启用AI扫描:
mcpshield scan --ai --ai-provider openai
支持的提供商:
| 提供程序 | 标志 | 环境变量 | 默认模型 |
|---|---|---|---|
| 开放人工智能 | --ai-provider openai |
OPENAI_API_KEY 或 MCPSHIELD_OPENAI_API_KEY |
gpt-4o-mini |
| 人类 | --ai-provider anthropic |
ANTHROPIC_API_KEY 或 MCPSHIELD_ANTHROPIC_API_KEY |
claude-sonnet-4-20250514 |
| 谷歌双子座 | --ai-provider gemini |
GEMINI_API_KEY, GOOGLE_API_KEY,或 MCPSHIELD_GEMINI_API_KEY |
gemini-2.0-flash |
| OpenAI兼容 | --ai-provider openai --ai-base-url <url> |
与OpenAI相同 |
适用于 Groq、人工智能、Ollama,以及任何与OpenAI兼容的端点,通过 --ai-base-url.
其他环境变量:
MCPSHIELD_AI_MODEL--覆盖任何提供程序的默认模型MCPSHIELD_AI_BASE_URL--设置自定义OpenAI兼容端点MCPSHIELD_AI_PROVIDER--设置默认提供程序,不使用--ai-provider旗帜
安全说明: MCPShield从不将你的秘密发送给AI。只有env var 钥匙 (不是值)包含在提示中。AI响应的上限为1 MB,以防止内存耗尽。
配置
.mcpshieldrc
您可以创建一个配置文件来设置默认选项,这样您就不必每次都传递标志。MCPShield寻找 .mcpshieldrc, .mcpshieldrc.json,或 .mcpshield.json.
把它放在哪里。 MCPShield首先搜索当前目录,然后搜索您的主目录。您的主目录是:
- macOS/Linux:
~(例如。/Users/yourname/) - 窗户:
%USERPROFILE%(例如。C:\Users\yourname\)
如何创建它。 创建一个名为的新文本文件 .mcpshieldrc 在您的主目录中包含以下内容:
{
"severityThreshold": "medium",
"ignore": ["MCPS-001"],
"format": "pretty",
"registry": false,
"trustedPackages": ["@myorg/custom-mcp-server"],
"riskyPackages": ["some-known-bad-package"],
"ai": true,
"aiProvider": "openai",
"aiModel": "gpt-4o-mini",
"aiBaseUrl": "https://api.openai.com/v1",
"minConfidence": 0.6
}
选项参考:
| 字段 | 类型 | 描述 |
|---|---|---|
severityThreshold |
string | 要显示的最小严重性: critical, high, medium, low, info |
ignore |
string[] | 查找要忽略的ID或标题(子字符串匹配) |
format |
string | 默认输出格式: pretty, json, markdown, sarif |
registry |
boolean | 默认情况下启用npm/PyPI注册表检查 |
trustedPackages |
string[] | 要视为受信任的其他包 |
riskyPackages |
string[] | 其他要视为有风险的包 |
ai |
boolean | 启用基于AI的误报减少 |
aiProvider |
string | AI提供者: openai, anthropic, gemini |
aiModel |
string | 覆盖默认AI模型 |
aiBaseUrl |
string | OpenAI兼容提供者的自定义基本URL |
minConfidence |
number | 显示结果的最小置信阈值(0.0–1.0) |
MCPShield警告潜在危险 .mcpshieldrc 选项:
- 过宽
ignore可能抑制关键发现的规则 - 包裹在
trustedPackages与已知的组织模式不匹配(例如。@modelcontextprotocol/) minConfidence设置为0.8以上(有效地掩盖了大多数发现)
自定义软件包列表
受信任和有风险的包列表以JSON文件存储在 src/data/:
trusted-packages.json--已验证为合法的包(13个包,1个受信任范围)risky-packages.json--已知恶意或可疑的包(8个包)suspicious-patterns.json--URL模式(24)和拼写错误规则(14)
从以下位置覆盖这些列表 .mcpshieldrc 使用 trustedPackages 和 riskyPackages.
配置位置
MCPShield自动发现所有主要MCP客户端的配置:
| 客户端 | 作用域 | 路径 |
|---|---|---|
| 克劳德桌面版 | macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 克劳德桌面版 | Linux | ~/.config/Claude/claude_desktop_config.json |
| 克劳德桌面版 | 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
| 克劳德代码 | 用户/本地 | ~/.claude.json |
| 克劳德代码 | 项目 | .mcp.json |
| 克劳德代码 | 本地 | .claude/settings.local.json |
| VS Code | 工作区 | .vscode/mcp.json |
| 光标 | 全球 | ~/.cursor/mcp.json |
| 光标 | 项目 | .cursor/mcp.json |
| 帆板运动 | 全球 | ~/.codeium/windsurf/mcp_config.json |
| 继续 | 全球 | ~/.continue/config.json |
| 泽德 | 全球 | ~/.config/zed/settings.json |
| 自定义 | — | MCP_CONFIG_PATH 环境变量 |
MCPShield自动处理不同的配置格式-- mcpServers (对象), servers (VS码), context_servers (Zed)和基于阵列的 mcpServers (继续)。
注: 当时 MCP_CONFIG_PATH 如果设置了环境变量,MCPShield将使用该路径并完全跳过自动发现,即使对于 scan.
OWASP MCP前10名
开放式Web应用程序安全项目 (全球开放应用安全项目)是一个发布安全标准的非营利组织。OWASP MCP Top 10是他们针对MCP服务器配置中最关键安全风险的框架。
MCPShield将调查结果映射到 OWASP MCP前10名 框架:
| ID | 类别 |
|---|---|
| MCP01:2025 | 代币管理不善和秘密暴露 |
| MCP02:2025 | 工具中毒 |
| MCP03:2025 | 通过范围爬行进行权限升级 |
| MCP04:2025 | 软件供应链攻击和依赖篡改 |
| MCP05:2025 | 命令注入和执行 |
| MCP06:2025 | 意图流颠覆 |
| MCP07:2025 | 身份验证和授权不足 |
| MCP08:2025 | 缺乏审计和遥测 |
| MCP09:2025 | 影子MCP服务器 |
| MCP10:2025 | 上下文注入和过度共享 |
对于开发者
以下部分介绍高级使用、集成和编程API。如果您将MCPShield用作CLI工具,则以上所有内容都已涵盖。
高级命令
mcpshield scan
扫描MCP服务器配置以查找安全问题。
| 标志 | 描述 |
|---|---|
-c, --config <path> |
MCP配置文件的路径 |
-f, --format <fmt> |
输出格式: pretty, json, markdown, sarif |
-r, --registry |
启用远程npm/PyPI注册表检查 |
-s, --severity <level> |
最低严重程度: critical, high, medium, low, info |
-i, --ignore <ids...> |
查找要忽略的ID或标题(子字符串匹配-- --ignore typo 匹配“潜在的百草枯”) |
-q, --quiet |
单行摘要输出(非常适合CI脚本) |
--min-confidence <n> |
显示结果的最小置信阈值(0.0–1.0) |
--ai |
启用基于AI的假阳性减少(需要API密钥) |
--ai-provider <name> |
人工智能提供商: openai, anthropic, gemini |
--ai-model <model> |
覆盖默认AI模型 |
--ai-base-url <url> |
OpenAI兼容端点的自定义基本URL |
--no-spinner |
禁用进度微调器 |
# Auto-detect and scan your MCP config
mcpshield scan
# Scan a specific config file
mcpshield scan --config ~/.config/claude/config.json
# Output as JSON (for CI/CD)
mcpshield scan --format json
# Output as Markdown
mcpshield scan --format markdown
# Output as SARIF (for GitHub Security tab)
mcpshield scan --format sarif
# Enable remote registry checks (npm/PyPI)
mcpshield scan --registry
# Filter by severity
mcpshield scan -s high
# Ignore findings by ID or title (partial matching supported)
mcpshield scan --ignore MCPS-001 Typosquat
# Quiet mode (CI-friendly one-liner output)
mcpshield scan --quiet
# Filter out low-confidence findings (heuristic, no API key needed)
# Warns if all findings are filtered to zero
mcpshield scan --min-confidence 0.7
# AI-powered false positive reduction (BYOK — bring your own key)
mcpshield scan --ai --ai-provider openai
mcpshield scan --ai --ai-provider anthropic
mcpshield scan --ai --ai-provider gemini
# Use a custom OpenAI-compatible endpoint (Groq, Together, Ollama, etc.)
mcpshield scan --ai --ai-provider openai --ai-base-url http://localhost:11434/v1
多配置发现: mcpshield scan 默认情况下,自动发现并扫描所有已安装客户端(Claude Desktop、VS Code、Cursor、Windsurf、Continue、Zed等)的所有MCP配置。不 --config 旗帜需要。使用 mcpshield list 查看发现了哪些配置文件。
mcpshield watch
查看您的MCP配置文件,并在每次更改时自动重新扫描。
| 标志 | 描述 |
|---|---|
-c, --config <path> |
MCP配置文件的路径 |
-f, --format <fmt> |
输出格式: pretty, json, markdown, sarif |
注: watch 自动只检测第一个配置文件。使用 --config 瞄准一个特定的目标。
mcpshield list
列出系统上发现的所有MCP配置文件。
mcpshield owasp
显示OWASP MCP Top 10安全框架参考。
CI/CD集成
# GitHub Actions — JSON output
- name: MCP Security Scan
run: npx @ferrierepete/mcpshield scan --format json
# Exits with code 2 for critical, 1 for high findings
# GitHub Actions — SARIF for Security tab
- name: MCP Security Scan (SARIF)
run: npx @ferrierepete/mcpshield scan --format sarif > results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
退出代码: 0 =干净, 1 =高发现, 2 =关键发现。用途 process.exitCode 而不是 process.exit() 以避免截断管道输出。
插件系统
通过插件API使用自定义扫描仪扩展MCPShield:
import { pluginRegistry, definePlugin, createFinding } from '@ferrierepete/mcpshield';
pluginRegistry.register(definePlugin({
name: 'my-org-policy',
description: 'Enforce internal security policies',
scan: (serverName, config) => {
const findings = [];
// Your custom checks here
if (!config.env?.AUDIT_LOG) {
findings.push(createFinding({
title: 'Missing Audit Log',
description: 'Internal policy requires AUDIT_LOG env var.',
severity: 'medium',
category: 'configuration',
serverName,
remediation: 'Add AUDIT_LOG=true to the server environment.',
}));
}
return findings;
},
}));
插件支持同步和异步扫描程序,插件中的错误是隔离的。崩溃的插件不会影响扫描的其余部分。
程序化API
MCPShield可以用作您自己的Node.js工具中的库:
import {
scanAllServers,
scanAllServersWithRegistry,
scanServer,
loadConfig,
autoDetectConfig,
discoverConfigs,
} from '@ferrierepete/mcpshield';
// Load a config file
const config = loadConfig('/path/to/mcp.json');
// Run a local scan
const result = scanAllServers(config.mcpServers, '/path/to/mcp.json');
console.log(`Score: ${result.summary.score}/100`);
console.log(`Critical: ${result.summary.critical}`);
// Run with remote registry verification
const fullResult = await scanAllServersWithRegistry(config.mcpServers, '/path/to/mcp.json');
// Scan a single server
const serverResult = scanServer('my-server', config.mcpServers['my-server']);
// Access per-server findings
for (const server of fullResult.servers) {
console.log(`${server.name}: ${server.findings.length} findings`);
for (const finding of server.findings) {
console.log(` [${finding.severity}] ${finding.title}`);
console.log(` Fix: ${finding.remediation}`);
}
}
// Discover config file paths
const paths = discoverConfigs();
关键导出类型
import type {
ScanResult, // Top-level result from scanAllServers
ServerScanResult, // Per-server findings and score
Finding, // Individual security finding
Severity, // 'critical' | 'high' | 'medium' | 'low' | 'info'
FindingCategory, // 'supply-chain' | 'permissions' | 'configuration' | 'authentication' | 'network' | 'data-exposure'
MCPConfig, // Parsed MCP config file shape
MCPServerConfig, // Individual server config
AIConfig, // AI provider configuration
AIVerdict, // 'confirmed' | 'likely-false-positive' | 'needs-review'
AIProviderType, // 'openai' | 'anthropic' | 'gemini'
Plugin, // Plugin definition (name, description, scan function)
PluginScanner, // Plugin scanner function type
} from '@ferrierepete/mcpshield';
技术安全强化
MCPShield包括几种内置保护措施,以防止误用:
- 路径遍历预防 --所有配置路径(是否来自
--config,MCP_CONFIG_PATH,或自动检测)通过以下方式验证resolveSafeConfigPath()。只允许使用当前工作目录或主目录中的路径。尝试加载以下文件/etc/passwd或/proc/self/environ以明显的错误被拒绝 - 多配置扫描 --默认情况下,扫描所有发现的MCP配置,而不仅仅是第一个发现的配置。将每个客户端配置中的服务器合并并扫描在一起
- 休眠服务器标记 --禁用的服务器将获得
[Dormant]在调查结果上加前缀,并从总体安全评分中排除 - 写入前配置备份 --the
fix命令创建.bak在应用任何更改之前备份配置文件 - 密钥清理 --the
fix命令清除包含shell元字符的env-var键名(例如。$(cmd),`cmd`,;rm -rf)删除危险密钥并将其替换为安全的字母数字名称 - 精确版本固定 --autofix从npm注册表(异步)解析确切的版本,而不是使用
@latest;倒退到@0.0.0-REVIEW-NEEDED如果无法访问注册表 - 具有有效URL的SARIF --所有SARIF输出包括有效
helpUri每个发现的链接和OWASP MCP前10名参考 - AI响应大小限制 --AI提供者的响应上限为1 MB,以防止无限响应导致内存耗尽
- 注册表失败关闭 --当npm/PyPI注册表检查失败(网络错误、HTTP 500、速率限制)时,包将被视为未验证,而不是静默传递
- 从未发送给AI的秘密值 --只有环境变量 钥匙 (非值)包含在AI评估提示中
许可证
麻省 理工© 彼得 费里埃
