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 run_docker

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.10.tar.gz (141.4 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.10-py3-none-any.whl (117.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: open_edison-0.1.10.tar.gz
  • Upload date:
  • Size: 141.4 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.10.tar.gz
Algorithm Hash digest
SHA256 b58a6092643e9127ae648f1f8db96f9755028008a6f64bbaa2dd3ee364ae086c
MD5 9135e70de4d48a8e7e587cb4b8d51e37
BLAKE2b-256 0a28aecf05bd2a508ad983599abc19aef4379bf3cbecb79ad94f9a9421ac7cab

See more details on using hashes here.

File details

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

File metadata

  • Download URL: open_edison-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 117.5 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.10-py3-none-any.whl
Algorithm Hash digest
SHA256 e20750c24d500d4ce88ca3b44e5ed4c906e8a9ad10b18eb0f3ea8220852848b6
MD5 793aee5a33b6a4f6aaaa4f7648118942
BLAKE2b-256 378849f82ad2e93e68b75c7b7570063e939da238eb0a192fdbd79438cac5c8dd

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