Skip to main content

Open-source MCP security, aggregation, and monitoring. Single-user, self-hosted MCP proxy.

Project description

OpenEdison 🔒⚡️

The Secure MCP Control Panel

Connect AI to your data/software with additional security controls to help reduce data exfiltration risks. Gain visibility, monitor potential threats, and get alerts on the data your agent is reading/writing.

OpenEdison helps address the lethal trifecta problem, which can increase risks of 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


Features ✨

  • 🛑 Data leak monitoring - Edison detects and blocks potential data leaks through configurable security controls
  • 🕰️ Controlled execution - Provides structured execution controls to reduce data exfiltration risks.
  • 🗂️ 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

About Edison.watch 🏢

Edison helps you gain observability, control, and policy enforcement for AI interactions with systems of records, existing company software and data. Reduce risks of AI-caused data leakage with streamlined setup for cross-system governance.

Quick Start 🚀

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

Prerequisites

  • Pipx/uvx
# 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:
make setup
  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

API Endpoints

See API Reference for full API documentation.

🛠️ Development

Setup 🧰

Setup from source as above.

Run ▶️

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

make run

Tests/code quality ✅

We expect make ci to return cleanly.

make ci
⚙️ Configuration (config.json)

Configuration ⚙️

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 reduces 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 can be blocked based on your configuration.

🧰 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 } }
}

Wildcard Patterns ✨

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.

Documentation 📚

📚 Complete documentation available in docs/

📄 License

GPL-3.0 License - see LICENSE for details.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

open_edison-0.1.91.tar.gz (199.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

open_edison-0.1.91-py3-none-any.whl (179.9 kB view details)

Uploaded Python 3

File details

Details for the file open_edison-0.1.91.tar.gz.

File metadata

  • Download URL: open_edison-0.1.91.tar.gz
  • Upload date:
  • Size: 199.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for open_edison-0.1.91.tar.gz
Algorithm Hash digest
SHA256 a4af3ae7346ba7d1cf9222a9deaa3fdc92b38623f4696d2f12704e7601c1aa55
MD5 0c494ee33448227af4ddfc1297f7c44a
BLAKE2b-256 a557d7926cccfe237792778b7ba05cd14b0dac4d6dd6faf6b1fd64bbfd81df57

See more details on using hashes here.

File details

Details for the file open_edison-0.1.91-py3-none-any.whl.

File metadata

  • Download URL: open_edison-0.1.91-py3-none-any.whl
  • Upload date:
  • Size: 179.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for open_edison-0.1.91-py3-none-any.whl
Algorithm Hash digest
SHA256 21b284dfb6285822b5490743d557207fa89351dd861b206a3fcfe7b847318d68
MD5 d114449862621f5a6300d4ae756e1ea5
BLAKE2b-256 8084014f7fb7aa67a605a86e8c86d05f433cdf76e99e1f5e4e37a452e96c140c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page