🚀 Enkrypt AI 安全 MCP 网关
Enkrypt AI 安全 MCP 网关是一款强大的工具,它位于 MCP 客户端和 MCP 服务器之间,提供认证、自动工具发现、缓存和护栏执行等功能,能有效保护 MCP 服务的安全与高效运行。
🚀 快速开始
若要开始使用 Enkrypt AI 安全 MCP 网关,你需要完成以下步骤:
- 确保满足所有先决条件,包括安装必要的依赖项和工具。
- 根据需求选择本地安装或等待即将推出的远程安装。
- 配置网关,可参考示例配置文件进行必要的修改。
- 重启 Claude Desktop 以启动网关,并验证其是否正常运行。
✨ 主要特性
Enkrypt AI 安全 MCP 网关具备以下主要特性:
- 认证:使用唯一密钥进行网关认证,若需使用 Enkrypt 护栏保护 MCP,还可使用 Enkrypt API 密钥。
- 易用性:可在配置文件中本地配置所有 MCP 服务器,或在 Enkrypt 中配置(即将推出),并通过名称在网关中使用。
- 动态工具发现:网关能动态从 MCP 服务器发现工具,并提供给 MCP 客户端使用。
- 限制工具调用:可在网关配置中明确指定允许的工具,限制 MCP 客户端对某些工具的访问。
- 缓存:将用户网关配置和从 MCP 服务器发现的工具缓存到本地或外部缓存服务器(如 KeyDB),以提高性能。
- 护栏:可在 Enkrypt 中为每个 MCP 服务器配置输入和输出护栏,提供全面的安全保护。
- 日志记录:记录网关的所有请求和响应,本地存储在 MCP 日志中,并可转发到 Enkrypt 进行监控(即将推出)。
🔒 护栏
Enkrypt 护栏提供全面的输入和输出保护:
- 输入保护:包括主题检测、NSFW 过滤、毒性检测、注入攻击预防、关键词检测、政策违规检测、偏见检测和 PII 编辑(更多功能即将推出,如系统提示保护、版权保护等)。
- 输出保护:涵盖所有输入保护功能,以及一致性检查和相关性验证(更多功能即将推出,如幻觉检测等)。若输入时进行了编辑,响应将自动恢复。
📦 安装指南
本地安装
1. 克隆仓库、设置虚拟环境并安装依赖
git clone https://github.com/enkryptai/secure-mcp-gateway
cd secure-mcp-gateway
激活虚拟环境 ⚡ 🔽
```bash
# uv
uv init
# 创建虚拟环境
uv venv
# 激活虚拟环境(Windows)
.\.venv\Scripts\activate
# 激活虚拟环境(Linux/Mac)
source ./.venv/Scripts/activate
# 在虚拟环境中安装 pip
python -m ensurepip
# 在虚拟环境中安装 uv
python -m pip install uv
```
安装 Python 依赖项:
```bash
uv pip install -r requirements.txt
```
验证 mcp cli 是否成功安装:
```bash
mcp version
```
2. 运行设置脚本
该脚本将根据 example_enkrypt_mcp_config.json 文件在根目录下创建 enkrypt_mcp_config.json 文件,并进行必要的替换。同时,它会在 Claude Desktop 中安装 MCP 客户端。
cd scripts
chmod +x *.sh
./setup.sh
cd scripts
setup.bat
运行脚本后,请重启 Claude Desktop 以查看网关运行情况。
示例输出 ℹ️ 🔽
```bash
-------------------------------
Setting up Enkrypt Secure MCP Gateway enkrypt_mcp_config.json config file
-------------------------------
1 file(s) copied.
Generated unique gateway key: 3_V8WZxKJp24alEui542WX6wVcgexH5EIBqZl1EssxDcFS9K4TVwZCmB9i_8KEQ5
Generated unique uuid: b8ac738a-7a2c-4030-8966-20fa1d91af3c
DUMMY_MCP_FILE_PATH: C:\Users\PC\Documents\GitHub\enkryptai\enkrypt-secure-mcp-gateway\test_mcps\echo_mcp.py
-------------------------------
Setup complete. Please check the enkrypt_mcp_config.json file in the root directory and update with your MCP server configs as needed.
-------------------------------
-------------------------------
Installing Enkrypt Secure MCP Gateway with gateway key and dependencies
-------------------------------
mcp is installed. Proceeding with installation...
ENKRYPT_GATEWAY_KEY: 3_V8WZxKJp24alEui542WX6wVcgexH5EIBqZl1EssxDcFS9K4TVwZCmB9i_8KEQ5
Package names only: flask flask-cors redis requests aiohttp python-json-logger python-dateutil cryptography pyjwt asyncio mcp[cli]
Dependencies string for the cli install command: --with flask --with flask-cors --with redis --with requests --with aiohttp --with python-json-logger --with python-dateutil --with cryptography --with pyjwt --with asyncio --with mcp[cli]
Running the cli install command: mcp install gateway.py --env-var ENKRYPT_GATEWAY_KEY=3_V8WZxKJp24alEui542WX6wVcgexH5EIBqZl1EssxDcFS9K4TVwZCmB9i_8KEQ5 --with flask --with flask-cors --with redis --with requests --with aiohttp --with python-json-logger --with python-dateutil --with cryptography --with pyjwt --with asyncio --with mcp[cli]
Initializing Enkrypt Secure MCP Gateway Common Utilities Module
Initializing Enkrypt Secure MCP Gateway Module
--------------------------------
SYSTEM INFO:
Using Python interpreter: C:\Users\PC\Documents\GitHub\enkryptai\enkrypt-secure-mcp-gateway\.venv\Scripts\python.exe
Python version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)]
Current working directory: C:\Users\PC\Documents\GitHub\enkryptai\enkrypt-secure-mcp-gateway\src
PYTHONPATH: Not set
--------------------------------
Initializing Enkrypt Secure MCP Gateway Client Module
Initializing Enkrypt Secure MCP Gateway Guardrail Module
Getting Enkrypt Common Configuration
config_path: C:\Users\PC\Documents\GitHub\enkryptai\enkrypt-secure-mcp-gateway\enkrypt_mcp_config.json
example_config_path: C:\Users\PC\Documents\GitHub\enkryptai\enkrypt-secure-mcp-gateway\example_enkrypt_mcp_config.json
Loading enkrypt_mcp_config.json file...
config: {'common_mcp_gateway_config': {'enkrypt_log_level': 'INFO', 'enkrypt_guardrails_enabled': False, 'enkrypt_base_url': 'https://api.enkryptai.com', 'enkrypt_api_key': 'YOUR_ENKRYPT_API_KEY', 'enkrypt_use_remote_mcp_config': False, 'enkrypt_remote_mcp_gateway_name': 'enkrypt-secure-mcp-gateway-1', 'enkrypt_remote_mcp_gateway_version': 'v1', 'enkrypt_mcp_use_external_cache': False, 'enkrypt_cache_host': 'localhost', 'enkrypt_cache_port': 6379, 'enkrypt_cache_db': 0, 'enkrypt_cache_password': None, 'enkrypt_tool_cache_expiration': 4, 'enkrypt_gateway_cache_expiration': 24, 'enkrypt_async_input_guardrails_enabled': False, 'enkrypt_async_output_guardrails_enabled': False}, 'gateways': {'3_V8WZxKJp24alEui542WX6wVcgexH5EIBqZl1EssxDcFS9K4TVwZCmB9i_8KEQ5': {'id': 'b8ac738a-7a2c-4030-8966-20fa1d91af3c', 'mcp_config': [{'server_name': 'echo_server', 'description': 'Dummy Echo Server', 'config': {'command': 'python', 'args': ['C:\\Users\\PC\\Documents\\GitHub\\enkryptai\\enkrypt-secure-mcp-gateway\\test_mcps\\echo_mcp.py']}, 'tools': {'echo': 'Echo a message'}, 'input_guardrails_policy': {'enabled': False, 'policy_name': 'Sample Airline Guardrail', 'additional_config': {'pii_redaction': False}, 'block': ['policy_violation']}, 'output_guardrails_policy': {'enabled': False, 'policy_name': 'Sample Airline Guardrail', 'additional_config': {'relevancy': False, 'hallucination': False, 'adherence': False}, 'block': ['policy_violation']}}]}}}
CONFIG:
ENKRYPT_GATEWAY_KEY: ****KEQ5
enkrypt_log_level: info
is_debug_log_level: False
enkrypt_base_url: https://api.enkryptai.com
enkrypt_use_remote_mcp_config: False
enkrypt_api_key: ****_KEY
enkrypt_tool_cache_expiration: 4
enkrypt_gateway_cache_expiration: 24
enkrypt_mcp_use_external_cache: False
enkrypt_async_input_guardrails_enabled: False
--------------------------------
External Cache is not enabled. Using local cache only.
[06/03/25 20:13:40] INFO Added server 'Enkrypt Secure MCP Gateway' to Claude config claude.py:143
INFO Successfully installed Enkrypt Secure MCP Gateway in Claude app cli.py:504
-------------------------------
Installation complete. Check the claude_desktop_config.json file as per the readme instructions and restart Claude Desktop.
-------------------------------
```
3. 生成示例 MCP 配置文件
Windows 示例文件 🪟 ℹ️ 🔽
`C:\Users\PC\AppData\Roaming\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"Enkrypt Secure MCP Gateway": {
"command": "C:\\Users\\PC\\Documents\\GitHub\\enkryptai\\enkrypt-secure-mcp-gateway\\.venv\\Scripts\\uv.EXE",
"args": [
"run",
"--with",
"aiohttp",
"--with",
"asyncio",
"--with",
"cryptography",
"--with",
"flask",
"--with",
"flask-cors",
"--with",
"mcp[cli]",
"--with",
"pyjwt",
"--with",
"python-dateutil",
"--with",
"python-json-logger",
"--with",
"redis",
"--with",
"requests",
"mcp",
"run",
"C:\\Users\\PC\\Documents\\GitHub\\enkryptai\\enkrypt-secure-mcp-gateway\\src\\gateway.py"
],
"env": {
"ENKRYPT_GATEWAY_KEY": "3_V8WZxKJp24alEui542WX6wVcgexH5EIBqZl1EssxDcFS9K4TVwZCmB9i_8KEQ5"
}
}
}
}
```
4. 重启 Claude Desktop 以运行网关
重启后,导航到 Claude Desktop 的 设置,点击 开发者 -> Enkrypt Secure MCP Gateway 以验证网关是否正常运行。
检查工具和日志 🧾 ℹ️ 🔽
- 点击搜索栏下方的设置图标,可查看可用的网关。
- 点击 `Enkrypt Secure MCP Gateway` 可查看可用工具列表。
- 可查看 Claude 日志以查看网关的运行情况。
- Windows 日志路径示例:`C:\Users\PC\AppData\Roaming\Claude\logs\mcp-server-Enkrypt Secure MCP Gateway.log`
- Linux/Mac 日志路径示例:`~/Library/Application Support/Claude/logs/mcp-server-Enkrypt Secure MCP Gateway.log`
5. 示例提示
列出所有服务器,获取所有可用工具并进行 echo 测试
- 此提示使用测试 MCP 服务器
echo_server(位于 test_mcps/echo_mcp.py)。
其他示例 ℹ️ 🔽
- 可组合多个提示以触发多个工具调用。
- 示例:`echo 测试并 echo best`
- **示例:`echo "hello; ls -la; whoami"`**
- 由于未启用护栏,此恶意提示不会被阻止。
6. 生成示例配置文件
示例 enkrypt_mcp_config.json 文件:
{
"common_mcp_gateway_config": {
"enkrypt_log_level": "INFO",
"enkrypt_guardrails_enabled": false,
"enkrypt_base_url": "https://api.enkryptai.com",
"enkrypt_api_key": "YOUR_ENKRYPT_API_KEY",
"enkrypt_use_remote_mcp_config": false,
"enkrypt_remote_mcp_gateway_name": "enkrypt-secure-mcp-gateway-1",
"enkrypt_remote_mcp_gateway_version": "v1",
"enkrypt_mcp_use_external_cache": false,
"enkrypt_cache_host": "localhost",
"enkrypt_cache_port": 6379,
"enkrypt_cache_db": 0,
"enkrypt_cache_password": null,
"enkrypt_tool_cache_expiration": 4,
"enkrypt_gateway_cache_expiration": 24,
"enkrypt_async_input_guardrails_enabled": false,
"enkrypt_async_output_guardrails_enabled": false
},
"gateways": {
"tLIYf0YEFTIPLXDO337zPRQhmnoXnLqLUKB3XuDX1inent9vGRFvwLDJGoeaktWu": {
"id": "2536722c-e5d7-4719-97ab-2cdd4ce942c0",
"mcp_config": [
{
"server_name": "echo_server",
"description": "Dummy Echo Server",
"config": {
"command": "python",
"args": [
"C:\\Users\\PC\\Documents\\GitHub\\enkryptai\\enkrypt-secure-mcp-gateway\\test_mcps\\echo_mcp.py"
]
},
"tools": {},
"input_guardrails_policy": {
"enabled": false,
"policy_name": "Sample Airline Guardrail",
"additional_config": {
"pii_redaction": false
},
"block": [
"policy_violation"
]
},
"output_guardrails_policy": {
"enabled": false,
"policy_name": "Sample Airline Guardrail",
"additional_config": {
"relevancy": false,
"hallucination": false,
"adherence": false
},
"block": [
"policy_violation"
]
}
}
]
}
}
}
7. 根据需要编辑网关配置
编辑配置文件后,需重启 Claude Desktop。使用提示 "列出所有服务器,获取所有可用工具" 让 MCP 客户端发现所有新工具。
网关配置架构 ℹ️ 🔽
- 可生成新的唯一 `key` 和 `UUID` 为不同客户端/用户配置不同的 MCP 服务器。
- 将 `enkrypt_log_level` 设置为 `DEBUG` 可获取更详细的日志。
- 每个 MCP 服务器配置可设置 `server_name`、`description`、`config`、`tools`、`input_guardrails_policy` 和 `output_guardrails_policy`。
可选护栏架构 🔒 ℹ️ 🔽
- 在 `common_mcp_gateway_config` 中设置 `enkrypt_guardrails_enabled` 为 `true` 以启用护栏。
- 从 [Enkrypt 仪表板](https://app.enkryptai.com/settings) 获取 `enkrypt_api_key` 并添加到配置文件中。
- 目前 `enkrypt_use_remote_mcp_config` 应设置为 `false`。
- 若使用外部缓存服务器,可设置 `enkrypt_mcp_use_external_cache` 为 `true`。
- 可配置 `enkrypt_tool_cache_expiration` 和 `enkrypt_gateway_cache_expiration` 控制缓存时间。
- `enkrypt_async_input_guardrails_enabled` 默认禁用,异步模式不建议用于不可撤销操作的工具。
- `enkrypt_async_output_guardrails_enabled` 即将推出。
远程安装
即将推出
💻 使用示例
基础用法
在 Claude Desktop 中使用以下提示测试网关:
列出所有服务器,获取所有可用工具并进行 echo 测试
高级用法
组合多个提示以触发多个工具调用:
echo 测试并 echo best
📚 详细文档
MCP 网关工作原理的高级步骤
步骤 🪜 🔽
1. MCP 客户端使用 API 密钥连接到安全 MCP 网关服务器(由 `src/gateway.py` 处理)。
2. 网关服务器从本地 `enkrypt_mcp_config.json` 文件或远程 Enkrypt 认证服务器(即将推出)获取网关配置。
- 若配置了外部缓存服务器(如 KeyDB),将配置缓存到本地或外部服务器以提高性能。
3. 若启用了输入护栏,在工具调用前验证请求(由 `src/guardrail.py` 处理)。
- 若请求违反任何配置的护栏且相应检测器配置为阻止,则请求将被阻止。
4. 请求转发到网关客户端(由 `src/client.py` 处理)。
5. 网关客户端将请求转发到适当的 MCP 服务器(由 `src/client.py` 处理)。
6. MCP 服务器处理请求并将响应返回给网关客户端。
7. 若为发现工具调用,网关客户端将工具缓存到本地或外部缓存服务器(若配置),然后将响应转发到网关服务器。
8. 网关服务器接收网关客户端的响应,若启用了输出护栏,将根据配置的护栏验证响应(由 `src/guardrail.py` 处理)。
- 若响应违反任何配置的护栏且相应检测器配置为阻止,则响应将被阻止。
9. 若一切正常,网关服务器将响应转发回 MCP 客户端。
先决条件
依赖项 🔗 🔽
- `Git 2.43` 或更高版本
- `Python 3.11` 或更高版本,可通过 `python` 或 `python3` 命令访问
- `pip 25.0.1` 或更高版本,可通过 `pip` 或 `python -m pip` 命令访问
- `uv 0.7.9` 或更高版本,可通过 `uv` 或 `python -m uv` 命令访问
检查版本 🔍 🔽
```bash
# Python
python --version
# pip
pip --version
# 若未安装,尝试以下命令并再次检查版本
python -m ensurepip
# uv
uv --version
# 若未找到 uv,使用 "python -m" 运行
python -m uv --version
# 若未安装,尝试以下命令并再次检查版本
python -m pip install uv
```
- 从 Claude 官网 安装 Claude Desktop 作为 MCP 客户端并登录。
- MCP 服务器所需的其他依赖项,如
Node.js、npx、docker 等。
- (可选)安装并运行缓存服务器(如 KeyDB)以进行外部缓存。
使用 Enkrypt 护栏进行可选保护 🔒 🔽
若要使用 Enkrypt 护栏保护 MCP,需完成以下步骤:
- 创建新账户(免费,无需信用卡)。
- 从 [Enkrypt 仪表板设置](https://app.enkryptai.com/settings) 获取 `ENKRYPT_API_KEY`。
- 可使用默认示例护栏 `Sample Airline Guardrail` 开始,或创建自定义护栏。
- 配置自定义护栏可登录 Enkrypt AI 应用或使用 API/SDK。
- [在 Enkrypt AI 应用仪表板中创建护栏 ✅](https://app.enkryptai.com/guardrails)
- [使用 API 创建护栏](https://docs.enkryptai.com/guardrails-api-reference/endpoint/add-policy)
- [使用 SDK 创建护栏](https://docs.enkryptai.com/libraries/python/introduction#guardrails-policy-management)
- [也可使用 Enkrypt MCP 服务器创建护栏并在网关中使用](https://github.com/enkryptai/enkryptai-mcp-server)
(可选)将 GitHub MCP 服务器添加到网关
GitHub MCP 服务器 需要安装 docker,请确保 docker 已安装并运行。
配置 GitHub 👨🏻💻 🔽
1. [从 GitHub 创建个人访问令牌](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)。
2. 将以下 GitHub 服务器块添加到 `enkrypt_mcp_config.json` 的 `"mcp_config": []` 数组中:
```json
{
"mcp_config": [
{
"server_name": "echo_server",
"description": "Dummy Echo Server",
"config": {...},
"tools": {},
"input_guardrails_policy": {...},
"output_guardrails_policy": {...}
},
{
"server_name": "github_server",
"description": "GitHub Server",
"config": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "REPLACE_WITH_YOUR_PERSONAL_ACCESS_TOKEN"
}
},
"tools": {},
"input_guardrails_policy": {
"enabled": false,
"policy_name": "Sample Airline Guardrail",
"additional_config": {
"pii_redaction": false
},
"block": [
"policy_violation"
]
},
"output_guardrails_policy": {
"enabled": false,
"policy_name": "Sample Airline Guardrail",
"additional_config": {
"relevancy": false,
"hallucination": false,
"adherence": false
},
"block": [
"policy_violation"
]
}
}
]
}
```
3. 重启 Claude Desktop 以检测新服务器。
4. 运行提示 `列出所有服务器,获取所有可用工具` 以发现 GitHub 服务器及其工具。
5. 运行 `列出 https://github.com/enkryptai/enkryptai-mcp-server 中的所有文件` 测试。
需注意,此时 GitHub MCP 服务器未受保护,易受攻击。可使用 Enkrypt 护栏进行保护,详见下一节。
(可选)免费使用 Enkrypt 护栏保护 GitHub MCP 服务器和测试 Echo 服务器
在 Enkrypt 应用中创建护栏 🌐 🔽
可使用提示生成规则或生成 PDF 文件,在应用中创建策略时粘贴或上传。
要复制的规则 ❗ 🔽
```text
1. MCP 特定安全策略
扫描所有工具描述以查找隐藏指令/恶意模式。
使用加密验证对 MCP 服务器进行身份验证。
锁定并固定工具版本以防止拉闸攻击。
在 MCP 服务器之间实施隔离以避免干扰。
限制 GitHub MCP 对特定存储库和用户的访问。
-
代码过滤和禁止模式
阻止已知的恶意代码模式(如缓冲区溢出、SQL 注入)。
检测恶意软件签名(如键盘记录器、特洛伊木马)。
防止加密挖掘代码。
识别网络攻击模式(如 DDoS、僵尸网络)。
阻止权限提升代码(如 root 漏洞利用)。
-
存储库访问控制
对私有存储库实施基于角色的只读访问。
为所有访问类型启用严格的内容过滤。
要求对私有存储库进行审计日志记录。
隔离对敏感存储库的访问。
-
AI 特定护栏
通过隐藏标签和文件访问命令检测工具中毒。
监控文件访问和网络活动行为。
对可疑工具要求明确的 UI 批准。
防止 GitHub 问题中的提示注入。
阻止暴露私有存储库数据的 PR。
隔离可疑的 GitHub 问题。
-
RADE(检索代理欺骗)缓解
扫描检索到的内容以查找嵌入式命令。
验证文档完整性和修改时间戳。
沙箱化检索到的内容以防止自动执行。
-
输入验证
限制提示长度(最大 4096 个令牌)。
阻止禁止的关键词(如 "忽略先前指令")。
检测编码/注入模式(base64、十六进制、Unicode)。
-
模型行为约束
按复杂性和大小限制代码生成。
限制某些语言(如 shell 脚本、汇编)。
监控 API/系统调用和网络活动。
在存储库之间实施严格的上下文边界。
用于生成规则的提示 💡 🔽
```plaintext
给出用于配置 GitHub 服务器的 AI 护栏的安全规则的编号列表,以防止对 GitHub 服务的恶意使用。
研究最新的 GitHub MCP 黑客攻击和滥用行为,并更新规则以防止这些情况。仅保留最严重的主题进行研究。
仅保留必要的安全规则以减小规模。删除无法用于预防的部分,如事件后处理、合规性、审计等。
在 Enkrypt 应用 中登录,点击 策略 -> 添加新策略,命名为 GitHub Safe Policy,粘贴策略规则并保存。
导航回主页或悬停在左侧边栏上,点击 护栏 -> 添加新护栏,命名为 GitHub Guardrail,关闭 注入攻击,打开 策略违规,选择新创建的策略,根据需要勾选 需要解释,保存护栏。
获取 Enkrypt API 密钥 🔑 🔽
在 Enkrypt 应用中悬停在左侧边栏上,点击 `设置`,或直接导航到 [https://app.enkryptai.com/settings](https://app.enkryptai.com/settings),点击 API 密钥旁边的 `复制` 图标复制密钥。
将 API 密钥和护栏添加到配置文件 🔑 🔽
打开根目录下的 `enkrypt_mcp_config.json` 文件,将 API 密钥添加到 `common_mcp_gateway_config` 部分,替换 `YOUR_ENKRYPT_API_KEY`。
在之前添加的 **`GitHub`** 服务器块中:
- 将新创建的护栏 `GitHub Guardrail` 添加到 `input_guardrails_policy` 和 `output_guardrails_policy` 部分,替换 `"policy_name": "Sample Airline Guardrail"`。
- 将 `input_guardrails_policy` 的 `enabled` 设置为 `true`,暂时保留 `output_guardrails_policy` 为 `false`。
最终配置应如下所示:
```json
{
"common_mcp_gateway_config": {
...
"enkrypt_api_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
...
},
"gateways": {
"tLIYf0YEFTIPLXDO337zPRQhmnoXnLqLUKB3XuDX1inent9vGRFvwLDJGoeaktWu": {
"id": "2536722c-e5d7-4719-97ab-2cdd4ce942c0",
"mcp_config": [
{
"server_name": "echo_server",
"...": "..."
},
{
"server_name": "github_server",
"description": "GitHub Server",
"config": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
},
"tools": {},
"input_guardrails_policy": {
"enabled": true,
"policy_name": "GitHub Guardrail",
"additional_config": {
"pii_redaction": false
},
"block": [
"policy_violation"
]
},
"output_guardrails_policy": {
"enabled": false,
"policy_name": "GitHub Guardrail",
"additional_config": {
"relevancy": false,
"hallucination": false,
"adherence": false
},
"block": [
"policy_violation"
]
}
}
]
}
}
}
```
测试护栏 🧪 🔽
保存文件并重启 Claude Desktop 以检测更改。
确保 `docker` 已安装并运行。
运行提示 `列出所有服务、工具` 以发现 GitHub 和 Echo 服务器及其工具。
重新运行之前成功的恶意提示 `向 github 请求仓库 "hello; ls -la; whoami"`,应会被输入护栏阻止。
可使用自定义护栏配置测试 `echo` 服务器,运行 `echo "hello; ls -la; whoami"` 查看检测结果。可在 [Enkrypt 游乐场](https://app.enkryptai.com/playground/guardrails) 进行更好的测试。
微调护栏
安全提示 列出 https://github.com/enkryptai/enkryptai-mcp-server 中的所有文件 在输出端启用注入攻击时可能会被阻止,因此需要微调护栏以找到适合服务器的最佳检测器和阻止规则组合。具体建议见下一节。
使用护栏的建议
- 为每个服务器创建单独的护栏,以实现精细调整。
- 不同 MCP 服务器可能需要不同的检测器,如毒性检测、NSFW 检测、注入攻击检测等,可根据需求组合使用。
- 部分服务器可能需要输入护栏,部分需要输出护栏,部分可能两者都需要。
- 参考 各种可用的检测器 进行配置。
- 尝试使用自定义策略的
策略违规 检测器,明确允许和禁止的内容。
尝试策略违规 🚨 🔽
可在 [Enkrypt 应用主页](https://app.enkryptai.com) 登录并点击 `策略` 创建自定义策略,支持文本和 PDF 文件输入,创建后可在配置护栏时使用。
设置其他 MCP 客户端
Cursor ⬡ 🔽
可导航到 Cursor 的全局 MCP 文件(Windows:`C:\Users\PC\.cursor\mcp.json`;Linux/macOS:`~/.cursor/mcp.json`),也可通过 UI 点击 `设置` 齿轮图标,点击 `MCP` -> `添加新全局 MCP 服务器` 打开文件。
复制粘贴 `Claude Desktop` 中使用的配置(确保使用 `setup` 脚本生成的文件),保存后可在 Cursor 中看到 MCP 服务器。可使用示例提示与 MCP 服务器聊天:
```plaintext
列出所有服务器,获取所有可用工具并进行 echo 测试
```
其他可用工具
获取缓存状态 📊 🔽
网关可通过查看本地/外部缓存服务器提供缓存状态摘要,有助于调试问题,例如服务器远程更新工具但网关未及时感知。
清除缓存 🧹 🔽
网关可清除本地/外部缓存服务器的缓存。可清除所有缓存或特定服务器的缓存,例如:
```plaintext
清除 echo_server 的缓存
清除所有缓存
清除仅网关缓存
清除服务器缓存(针对 echo_server)
清除所有服务器缓存
```
部署模式
- 本地网关、本地护栏和本地 MCP 服务器
- 本地网关、带远程护栏的本地 MCP 服务器
- 带远程 MCP 服务器和远程护栏的本地网关
- 远程网关、远程 MCP 服务器和远程护栏
1. 本地网关、本地护栏和本地 MCP 服务器
2. 本地网关、带远程护栏的本地 MCP 服务器
3. 带远程 MCP 服务器和远程护栏的本地网关
4. 远程网关、远程 MCP 服务器和远程护栏
正在处理的已知问题
输出护栏目前不适用于非文本工具结果,即将支持图像、音频等其他媒体类型。
已知限制
网关不支持远程部署但 MCP 服务器本地部署(未暴露到互联网)的场景,因为网关需要知道 MCP 服务器的地址才能转发请求。
贡献
欢迎查看 TODO 列表,报告或修复遇到的任何错误。
🔧 技术细节
架构概述
Enkrypt AI 安全 MCP 网关采用分层架构,主要由网关服务器、网关客户端和护栏模块组成。网关服务器负责接收和处理 MCP 客户端的请求,网关客户端负责与 MCP 服务器通信,护栏模块则提供输入和输出保护。
代码实现
src/gateway.py:处理 MCP 客户端的连接和请求。
src/client.py:负责与 MCP 服务器通信,转发请求和接收响应。
src/guardrail.py:实现输入和输出护栏的验证逻辑。
缓存机制
网关支持本地缓存和外部缓存(如 KeyDB),可通过配置文件进行设置。缓存包括网关配置和工具信息,可提高性能并减少对 MCP 服务器的请求。
护栏功能
护栏模块提供多种检测功能,包括主题检测、NSFW 过滤、毒性检测等。可根据需求配置不同的检测器和阻止规则,确保 MCP 服务的安全。
📄 许可证
Enkrypt AI MCP 网关核心
本项目的核心功能采用 MIT 许可证授权。完整的许可证文本请参阅仓库中的 LICENSE.txt 文件。
Enkrypt AI 护栏、标志和品牌
© 2025 Enkrypt AI。保留所有权利。
Enkrypt AI 软件采用专有许可证提供。未经授权,严禁使用、复制或分发本软件或其任何部分。
使用条款:https://www.enkryptai.com/terms-and-conditions
隐私政策:https://app.enkryptai.com/privacy-policy
Enkrypt AI 和 Enkrypt AI 标志是 Enkrypt AI, Inc. 的商标。
返回顶部