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
- Clone the repository:
git clone https://github.com/GatlingX/open-edison.git
cd open-edison
- Set up the project:
make setup
- Edit
config.jsonto 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
}
]
}
- 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 checkGET /mcp/status- Get status of configured MCP serversPOST /mcp/{server_name}/start- Start a specific MCP serverPOST /mcp/{server_name}/stop- Stop a specific MCP serverPOST /mcp/call- Proxy MCP calls to running serversGET /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.dbin the repo root via sql.js. - The Configs tab provides JSON editors (with syntax highlighting) for
config.json,tool_permissions.json,resource_permissions.json, andprompt_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 authenticationlogging.level- Log level (DEBUG, INFO, WARNING, ERROR)mcp_servers- Array of MCP server configurations
Each MCP server configuration includes:
name- Unique name for the servercommand- Command to run the MCP serverargs- Arguments for the commandenv- 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:
- Private data access - Access to sensitive local files/data
- Untrusted content exposure - Exposure to external/web content
- 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/
- Getting Started - Quick setup guide
- Configuration - Complete configuration reference
- API Reference - REST API documentation
- Development Guide - Contributing and development
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b58a6092643e9127ae648f1f8db96f9755028008a6f64bbaa2dd3ee364ae086c
|
|
| MD5 |
9135e70de4d48a8e7e587cb4b8d51e37
|
|
| BLAKE2b-256 |
0a28aecf05bd2a508ad983599abc19aef4379bf3cbecb79ad94f9a9421ac7cab
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e20750c24d500d4ce88ca3b44e5ed4c906e8a9ad10b18eb0f3ea8220852848b6
|
|
| MD5 |
793aee5a33b6a4f6aaaa4f7648118942
|
|
| BLAKE2b-256 |
378849f82ad2e93e68b75c7b7570063e939da238eb0a192fdbd79438cac5c8dd
|