展示HN:一个MCP网关,用于阻止致命的三联杀。
Show HN: An MCP Gateway to block the lethal trifecta

原始链接: https://github.com/Edison-Watch/open-edison

## OpenEdison:安全的人工智能数据访问与控制 OpenEdison 提供了一个安全的控制面板,用于将人工智能连接到您的数据和软件,防止数据泄露并提供全面的可见性。它解决了人工智能安全风险的“致命三要素”——未经授权的数据访问、暴露于不受信任的内容以及外部通信——有效阻止代理劫持和数据泄露,即使是针对越狱的人工智能模型。 主要功能包括确定性执行、通过 Docker 或直接安装进行简便配置,以及用于管理的 REST API。OpenEdison 跟踪人工智能代理的交互,提供详细的日志和警报。它根据访问控制列表 (ACL) 强制执行细粒度的权限,适用于工具、资源和提示,阻止违反定义的安全策略的操作。 该系统要求显式配置所有工具、资源和提示,拒绝未知元素以增强安全性。用户可以使用 `get_security_status` 工具监控风险等级。OpenEdison 附带完整文档,并采用 GPL-3.0 许可。加入 Discord ([discord.gg/tXjATaKgTV](https://discord.gg/tXjATaKgTV)) 以获取支持和反馈。

## Open-Edison:缓解LLM“致命三联”风险的网关 受最近关于LLM访问私人数据、使用不可信内容和同时执行外部通信的危险性讨论的启发(“致命三联”),开发者创建了Open-Edison,一个旨在阻止潜在有害交互的网关。 该网关位于LLM和多功能协议(MCP)服务器之间,检查工具并根据其风险等级对其进行分类。当一系列工具调用接近“致命三联”时,网关会进行干预,通过Web仪表板向用户发出警报以供审查和批准。 虽然开发者承认“致命三联”的“生产性”,但他们的目标是创建一个用户可训练的系统——最初是防御性的,但可以通过标记误报来适应用户定义的风险承受能力。 提出的担忧包括验证MCP服务器真实性的难度、LLM操纵的可能性以及定义“私人数据”的固有挑战。 该项目现已在GitHub上发布([https://github.com/Edison-Watch/open-edison](https://github.com/Edison-Watch/open-edison))并欢迎社区反馈。
相关文章

原文

The Secure MCP Control Panel

Connect AI to your data/software securely without risk of data exfiltration. Gain visibility, block threats, and get alerts on the data your agent is reading/writing.

OpenEdison solves the lethal trifecta problem, which can cause agent hijacking & data exfiltration by malicious actors.

Join our Discord for feedback, feature requests, and to discuss MCP security for your use case: discord.gg/tXjATaKgTV

Trifecta Security Risk Animation

📧 To get visibility, control and exfiltration blocker into AI's interaction with your company software, systems of record, DBs, Contact us to discuss.

Join our Discord Project Version Python Version License


  • 🛑 Data leak blocker - Edison automatically blocks any data leaks, even if your AI gets jailbroken
  • 🕰️ Deterministic execution - Deterministic execution. Guaranteed data exfiltration blocker.
  • 🗂️ Easily configurable - Easy to configure and manage your MCP servers
  • 📊 Visibility into agent interactions - Track and monitor your agents and their interactions with connected software/data via MCP calls
  • 🔗 Simple API - REST API for managing MCP servers and proxying requests
  • 🐳 Docker support - Run in a container for easy deployment

Edison helps you gain observability, control, and policy enforcement for all AI interactions with systems of records, existing company software and data. Prevent AI from causing data leakage, lightning-fast setup for cross-system governance.

The fastest way to get started:

# Installs uv (via Astral installer) and launches open-edison with uvx.
# Note: This does NOT install Node/npx. Install Node if you plan to use npx-based tools like mcp-remote.
curl -fsSL https://raw.githubusercontent.com/Edison-Watch/open-edison/main/curl_pipe_bash.sh | bash

Run locally with uvx: uvx open-edison That will run the setup wizard if necessary.

⬇️ Install Node.js/npm (optional for MCP tools)

If you need npx (for Node-based MCP tools like mcp-remote), install Node.js as well:

macOS

  • uv: curl -fsSL https://astral.sh/uv/install.sh | sh
  • Node/npx: brew install node

Linux

  • uv: curl -fsSL https://astral.sh/uv/install.sh | sh
  • Node/npx: sudo apt-get update && sudo apt-get install -y nodejs npm

Windows

  • uv: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • Node/npx: winget install -e --id OpenJS.NodeJS

After installation, ensure that npx is available on PATH.

PyPI Install from PyPI
# Using uvx
uvx open-edison

# Using pipx
pipx install open-edison
open-edison

Run with a custom config directory:

open-edison run --config-dir ~/edison-config
# or via environment variable
OPEN_EDISON_CONFIG_DIR=~/edison-config open-edison run
Docker Run with Docker

There is a dockerfile for simple local setup.

# Single-line:
git clone https://github.com/Edison-Watch/open-edison.git && cd open-edison && make docker_run

# Or
# Clone repo
git clone https://github.com/Edison-Watch/open-edison.git
# Enter repo
cd open-edison
# Build and run
make docker_run

The MCP server will be available at http://localhost:3000 and the api + frontend at http://localhost:3001. 🌐

⚙️ Run from source
  1. Clone the repository:
git clone https://github.com/Edison-Watch/open-edison.git
cd open-edison
  1. Set up the project:
  1. Edit config.json to configure your MCP servers. See the full file: config.json, it looks like:
{
  "server": { "host": "0.0.0.0", "port": 3000, "api_key": "..." },
  "logging": { "level": "INFO", "database_path": "sessions.db" },
  "mcp_servers": [
    { "name": "filesystem", "command": "uvx", "args": ["mcp-server-filesystem", "/tmp"], "enabled": true },
    { "name": "github", "enabled": false, "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "..." } }
  ]
}
  1. Run the server:
make run
# or, from the installed package
open-edison run

The server will be available at http://localhost:3000. 🌐

🔌 MCP Connection

Connect any MCP client to Open Edison (requires Node.js/npm for npx):

npx -y mcp-remote http://localhost:3000/mcp/ --http-only --header "Authorization: Bearer your-api-key"

Or add to your MCP client config:

{
  "mcpServers": {
    "open-edison": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:3000/mcp/", "--http-only", "--header", "Authorization: Bearer your-api-key"]
    }
  }
}
🧭 Usage

See API Reference for full API documentation.

🛠️ Development

Setup from source as above.

Server doesn't have any auto-reload at the moment, so you'll need to run & ctrl-c this during development.

We expect make ci to return cleanly.

⚙️ Configuration (config.json)

The config.json file contains all configuration:

  • server.host - Server host (default: localhost)
  • server.port - Server port (default: 3000)
  • server.api_key - API key for authentication
  • logging.level - Log level (DEBUG, INFO, WARNING, ERROR)
  • mcp_servers - Array of MCP server configurations

Each MCP server configuration includes:

  • name - Unique name for the server
  • command - Command to run the MCP server
  • args - Arguments for the command
  • env - Environment variables (optional)
  • enabled - Whether to auto-start this server

🔐 How Edison prevents data leakages

🔱 The lethal trifecta, agent lifecycle management

Open Edison includes a comprehensive security monitoring system that tracks the "lethal trifecta" of AI agent risks, as described in Simon Willison's blog post:

The lethal trifecta diagram showing the three key AI agent security risks
  1. Private data access - Access to sensitive local files/data
  2. Untrusted content exposure - Exposure to external/web content
  3. External communication - Ability to write/send data externally
Privileged Access Management (PAM) example showing the lethal trifecta in action

The configuration allows you to classify these risks across tools, resources, and prompts using separate configuration files.

In addition to trifecta, we track Access Control Level (ACL) for each tool call, that is, each tool has an ACL level (one of PUBLIC, PRIVATE, or SECRET), and we track the highest ACL level for each session. If a write operation is attempted to a lower ACL level, it is blocked.

🧰 Tool Permissions (tool_permissions.json)

Defines security classifications for MCP tools. See full file: tool_permissions.json, it looks like:

{
  "_metadata": { "last_updated": "2025-08-07" },
  "builtin": {
    "get_security_status": { "enabled": true, "write_operation": false, "read_private_data": false, "read_untrusted_public_data": false, "acl": "PUBLIC" }
  },
  "filesystem": {
    "read_file": { "enabled": true, "write_operation": false, "read_private_data": true, "read_untrusted_public_data": false, "acl": "PRIVATE" },
    "write_file": { "enabled": true, "write_operation": true, "read_private_data": true, "read_untrusted_public_data": false, "acl": "PRIVATE" }
  }
}
📁 Resource Permissions (`resource_permissions.json`)

Resource Permissions (resource_permissions.json)

Defines security classifications for resource access patterns. See full file: resource_permissions.json, it looks like:

{
  "_metadata": { "last_updated": "2025-08-07" },
  "builtin": { "config://app": { "enabled": true, "write_operation": false, "read_private_data": false, "read_untrusted_public_data": false } }
}
💬 Prompt Permissions (`prompt_permissions.json`)

Prompt Permissions (prompt_permissions.json)

Defines security classifications for prompt types. See full file: prompt_permissions.json, it looks like:

{
  "_metadata": { "last_updated": "2025-08-07" },
  "builtin": { "summarize_text": { "enabled": true, "write_operation": false, "read_private_data": false, "read_untrusted_public_data": false } }
}

All permission types support wildcard patterns:

  • Tools: server_name/* (e.g., filesystem/* matches all filesystem tools)
  • Resources: scheme:* (e.g., file:* matches all file resources)
  • Prompts: type:* (e.g., template:* matches all template prompts)

Security Monitoring 🕵️

All items must be explicitly configured - unknown tools/resources/prompts will be rejected for security.

Use the get_security_status tool to monitor your session's current risk level and see which capabilities have been accessed. When the lethal trifecta is achieved (all three risk flags set), further potentially dangerous operations are blocked.

📚 Complete documentation available in docs/

📄 License

GPL-3.0 License - see LICENSE for details.

联系我们 contact @ memedata.com