Skip to main content

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

Project description

Open Edison

Open-source MCP security gateway that prevents data exfiltration—via direct access or tool chaining—with full monitoring for local single‑user deployments. Provides core functionality of https://edison.watch for local, single-user use.

Run locally with uvx: uvx open-edison --config-dir ~/edison-config

Features

  • Single-user MCP proxy - No multi-user complexity, just a simple proxy for your MCP servers
  • JSON configuration - Easy to configure and manage your MCP servers
  • Simple local frontend - Track and monitor your MCP interactions, servers, and sessions.
  • Session tracking - Track and monitor your MCP interactions
  • Simple API - REST API for managing MCP servers and proxying requests
  • Docker support - Run in a container for easy deployment

Quick Start

Install from PyPI

Prerequisites

  • Pipx/uvx
# Using uvx
uvx open-edison --help

# Using pipx
pipx install open-edison
open-edison --help

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

Run from source

  1. Clone the repository:
git clone https://github.com/GatlingX/open-edison.git
cd open-edison
  1. Set up the project:
make setup
  1. Edit config.json to configure your MCP servers:
{
  "server": {
    "host": "localhost",
    "port": 3000,
    "api_key": "your-secure-api-key"
  },
  "mcp_servers": [
    {
      "name": "filesystem",
      "command": "uvx",
      "args": ["mcp-server-filesystem", "/path/to/directory"],
      "enabled": true
    }
  ]
}
  1. Run the server:
make run
# or, from the installed package
open-edison run

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

Run with Docker

# After cloning the repo
make docker_run

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

MCP Connection

Connect any MCP client to Open Edison:

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

Api is on port 3001 (or configured MCP server port + 1).

  • GET /health - Health check
  • GET /mcp/status - Get status of configured MCP servers
  • POST /mcp/{server_name}/start - Start a specific MCP server
  • POST /mcp/{server_name}/stop - Stop a specific MCP server
  • POST /mcp/call - Proxy MCP calls to running servers
  • GET /sessions - Get session logs (coming soon)

All endpoints except /health require the Authorization: Bearer <api_key> header.

Development

# Install dependencies
make sync

# Run with auto-reload
make dev

# Run tests
make test

# Lint code
make lint

# Format code
make format

Website (Sessions Dashboard)

A minimal React + Vite frontend is included at open-edison/frontend/.

Run it with a single command from the repo root or via the CLI:

make website
# or
open-edison website

This will install frontend deps (first run) and start the dev server. Open the URL shown (typically http://localhost:5173 or 5174).

Notes:

  • The dashboard reads session data directly from the SQLite database edison.db in the repo root via sql.js.
  • The Configs tab provides JSON editors (with syntax highlighting) for config.json, tool_permissions.json, resource_permissions.json, and prompt_permissions.json.
  • You can Save changes directly while the dev server is running; writes are constrained to the project root.

Docker

# Build Docker image
make docker_build

# Run in Docker
make docker_run

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

Security & Permissions System

Open Edison includes a comprehensive security monitoring system that tracks the "lethal trifecta" of AI agent 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

The system monitors these risks across tools, resources, and prompts using separate configuration files.

Tool Permissions (tool_permissions.json)

Defines security classifications for MCP tools. Each tool is classified with three boolean flags:

{
  "filesystem_read_file": {
    "write_operation": false,
    "read_private_data": true,
    "read_untrusted_public_data": false
  },
  "sqlite_create_record": {
    "write_operation": true,
    "read_private_data": true,
    "read_untrusted_public_data": false
  }
}

Resource Permissions (resource_permissions.json)

Defines security classifications for resource access patterns. Currently empty - add classifications as needed:

{
  "_metadata": {
    "description": "Resource security classifications for Open Edison data access tracker",
    "last_updated": "2025-08-07"
  },
  "file:*": {
    "write_operation": false,
    "read_private_data": true,
    "read_untrusted_public_data": false
  },
  "http:*": {
    "write_operation": false,
    "read_private_data": false,
    "read_untrusted_public_data": true
  },
  "database:*": {
    "write_operation": false,
    "read_private_data": true,
    "read_untrusted_public_data": false
  }
}

Prompt Permissions (prompt_permissions.json)

Defines security classifications for prompt types. Currently empty - add classifications as needed:

{
  "_metadata": {
    "description": "Prompt security classifications for Open Edison data access tracker", 
    "last_updated": "2025-08-07"
  },
  "system": {
    "write_operation": false,
    "read_private_data": false,
    "read_untrusted_public_data": false
  },
  "external_prompt": {
    "write_operation": false,
    "read_private_data": false,
    "read_untrusted_public_data": true
  },
  "prompt:file:*": {
    "write_operation": false,
    "read_private_data": true,
    "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.15.tar.gz (152.9 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.15-py3-none-any.whl (128.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for open_edison-0.1.15.tar.gz
Algorithm Hash digest
SHA256 a3eb21b9eecbb585619a3797f159b321a1b20b7fa48d350b8a476ca7ea23bf3c
MD5 330a99e01d44d3dc42d56c2374cdc570
BLAKE2b-256 56de96f352db765e7f81089ea8877bf4c1aed2ae1e69981a2433c83e29e25e89

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for open_edison-0.1.15-py3-none-any.whl
Algorithm Hash digest
SHA256 6dd8fb1f782bf6e8554234e9831059f346cd7f2044d8f654beb004a38fc261c7
MD5 3828e0234408f4cdbde50523b11f1198
BLAKE2b-256 2c3e742e683b5c126d7ddee1e7a6a4c605746ee0ea0e38ebae2edac06fe17faa

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