open-edison 0.1.17__tar.gz → 0.1.26__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {open_edison-0.1.17 → open_edison-0.1.26}/.gitignore +3 -1
- {open_edison-0.1.17 → open_edison-0.1.26}/PKG-INFO +124 -51
- {open_edison-0.1.17 → open_edison-0.1.26}/README.md +123 -50
- {open_edison-0.1.17 → open_edison-0.1.26}/config.json +16 -2
- {open_edison-0.1.17 → open_edison-0.1.26}/desktop_ext/README.md +3 -3
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/deployment/local.md +1 -1
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/development/contributing.md +2 -2
- {open_edison-0.1.17 → open_edison-0.1.26}/pyproject.toml +2 -1
- {open_edison-0.1.17 → open_edison-0.1.26}/src/cli.py +2 -1
- {open_edison-0.1.17 → open_edison-0.1.26}/src/config.py +63 -51
- open_edison-0.1.26/src/events.py +153 -0
- open_edison-0.1.26/src/middleware/data_access_tracker.py +370 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/src/middleware/session_tracking.py +93 -29
- open_edison-0.1.26/src/oauth_manager.py +281 -0
- open_edison-0.1.26/src/permissions.py +292 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/src/server.py +525 -98
- open_edison-0.1.26/src/single_user_mcp.py +448 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/src/telemetry.py +4 -40
- {open_edison-0.1.17 → open_edison-0.1.26}/tool_permissions.json +57 -72
- open_edison-0.1.17/frontend/configurations/prompt_permissions.json +0 -14
- open_edison-0.1.17/frontend/configurations/resource_permissions.json +0 -14
- open_edison-0.1.17/frontend/configurations/tool_permissions.json +0 -170
- open_edison-0.1.17/src/middleware/data_access_tracker.py +0 -611
- open_edison-0.1.17/src/single_user_mcp.py +0 -386
- {open_edison-0.1.17 → open_edison-0.1.26}/LICENSE +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/README.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/architecture/single_user_design.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/core/configuration.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/core/project_structure.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/core/proxy_usage.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/deployment/docker.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/development/development_guide.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/development/testing.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/quick-reference/api_reference.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/docs/quick-reference/config_quick_start.md +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/prompt_permissions.json +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/resource_permissions.json +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/src/__init__.py +0 -0
- {open_edison-0.1.17 → open_edison-0.1.26}/src/__main__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: open-edison
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.26
|
4
4
|
Summary: Open-source MCP security, aggregation, and monitoring. Single-user, self-hosted MCP proxy.
|
5
5
|
Author-email: Hugo Berg <hugo@edison.watch>
|
6
6
|
License-File: LICENSE
|
@@ -25,11 +25,42 @@ Requires-Dist: pytest>=8.3.3; extra == 'dev'
|
|
25
25
|
Requires-Dist: ruff>=0.12.3; extra == 'dev'
|
26
26
|
Description-Content-Type: text/markdown
|
27
27
|
|
28
|
-
# OpenEdison
|
28
|
+
# OpenEdison 🔒⚡️
|
29
29
|
|
30
|
-
|
30
|
+
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 use.
|
31
31
|
|
32
|
-
|
32
|
+
<p align="center">
|
33
|
+
<img src="media/trifecta520p.gif" alt="Trifecta Security Risk Animation" width="520">
|
34
|
+
</p>
|
35
|
+
|
36
|
+
<div align="center">
|
37
|
+
<h2>📧 To get visibility, control and exfiltration blocker into AI's interaction with your company software, systems of record, DBs, <a href="mailto:hello@edison.watch">Contact us</a> to discuss.</h2>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<p align="center">
|
41
|
+
<img alt="Project Version" src="https://img.shields.io/pypi/v/open-edison?label=version&color=blue">
|
42
|
+
<img alt="Python Version" src="https://img.shields.io/badge/python-3.12-blue?logo=python">
|
43
|
+
<img src="https://img.shields.io/badge/License-GPLv3-blue" alt="License">
|
44
|
+
|
45
|
+
|
46
|
+
</p>
|
47
|
+
|
48
|
+
---
|
49
|
+
|
50
|
+
|
51
|
+
## Features ✨
|
52
|
+
|
53
|
+
- 🛑 **Prevent Data Leaks** - Edison automatically blocks any data leaks, even if your AI gets jailbroken
|
54
|
+
- 👤 **Single-user MCP proxy** - No multi-user complexity, just a simple proxy for your MCP servers
|
55
|
+
- 🗂️ **JSON configuration** - Easy to configure and manage your MCP servers
|
56
|
+
- 🖥️ **Simple local frontend** - Track and monitor your MCP interactions, servers, and sessions.
|
57
|
+
- 📊 **Session tracking** - Track and monitor your MCP interactions
|
58
|
+
- 🔗 **Simple API** - REST API for managing MCP servers and proxying requests
|
59
|
+
- 🐳 **Docker support** - Run in a container for easy deployment
|
60
|
+
|
61
|
+
## Quick Start 🚀
|
62
|
+
|
63
|
+
The fastest way to get started:
|
33
64
|
|
34
65
|
```bash
|
35
66
|
# Installs uv (via Astral installer) and launches open-edison with uvx.
|
@@ -39,36 +70,31 @@ curl -fsSL https://raw.githubusercontent.com/Edison-Watch/open-edison/main/curl_
|
|
39
70
|
|
40
71
|
Run locally with uvx: `uvx open-edison --config-dir ~/edison-config`
|
41
72
|
|
73
|
+
<details>
|
74
|
+
<summary>⬇️ Install Node.js/npm (optional for MCP tools)</summary>
|
75
|
+
|
42
76
|
If you need `npx` (for Node-based MCP tools like `mcp-remote`), install Node.js as well:
|
43
77
|
|
44
|
-
-
|
45
|
-
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
46
|
-
- Node/npx: `brew install node`
|
47
|
-
- Linux (Debian/Ubuntu):
|
48
|
-
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
49
|
-
- Node/npx: `sudo apt-get update && sudo apt-get install -y nodejs npm`
|
50
|
-
- Windows (PowerShell):
|
51
|
-
- uv: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
|
52
|
-
- Node/npx: `winget install -e --id OpenJS.NodeJS`
|
78
|
+

|
53
79
|
|
54
|
-
|
80
|
+
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
81
|
+
- Node/npx: `brew install node`
|
55
82
|
|
56
|
-
|
57
|
-
|
58
|
-
|
83
|
+

|
84
|
+
|
85
|
+
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
86
|
+
- Node/npx: `sudo apt-get update && sudo apt-get install -y nodejs npm`
|
59
87
|
|
60
|
-
|
88
|
+

|
61
89
|
|
62
|
-
-
|
63
|
-
-
|
64
|
-
- **Simple local frontend** - Track and monitor your MCP interactions, servers, and sessions.
|
65
|
-
- **Session tracking** - Track and monitor your MCP interactions
|
66
|
-
- **Simple API** - REST API for managing MCP servers and proxying requests
|
67
|
-
- **Docker support** - Run in a container for easy deployment
|
90
|
+
- uv: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
|
91
|
+
- Node/npx: `winget install -e --id OpenJS.NodeJS`
|
68
92
|
|
69
|
-
|
93
|
+
After installation, ensure that `npx` is available on PATH.
|
94
|
+
</details>
|
70
95
|
|
71
|
-
|
96
|
+
<details>
|
97
|
+
<summary><img src="https://img.shields.io/badge/pypi-3775A9?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI"> Install from PyPI</summary>
|
72
98
|
|
73
99
|
#### Prerequisites
|
74
100
|
|
@@ -91,31 +117,37 @@ open-edison run --config-dir ~/edison-config
|
|
91
117
|
OPEN_EDISON_CONFIG_DIR=~/edison-config open-edison run
|
92
118
|
```
|
93
119
|
|
94
|
-
|
120
|
+
</details>
|
121
|
+
|
122
|
+
<details>
|
123
|
+
<summary><img src="https://img.shields.io/badge/Docker-2CA5E0?style=for-the-badge&logo=docker&logoColor=white" alt="Docker"> Run with Docker</summary>
|
95
124
|
|
96
125
|
There is a dockerfile for simple local setup.
|
97
126
|
|
98
127
|
```bash
|
99
128
|
# Single-line:
|
100
|
-
git clone https://github.com/
|
129
|
+
git clone https://github.com/Edison-Watch/open-edison.git && cd open-edison && make docker_run
|
101
130
|
|
102
131
|
# Or
|
103
132
|
# Clone repo
|
104
|
-
git clone https://github.com/
|
133
|
+
git clone https://github.com/Edison-Watch/open-edison.git
|
105
134
|
# Enter repo
|
106
135
|
cd open-edison
|
107
136
|
# Build and run
|
108
137
|
make docker_run
|
109
138
|
```
|
110
139
|
|
111
|
-
The MCP server will be available at `http://localhost:3000` and the api + frontend at `http://localhost:3001`.
|
140
|
+
The MCP server will be available at `http://localhost:3000` and the api + frontend at `http://localhost:3001`. 🌐
|
112
141
|
|
113
|
-
|
142
|
+
</details>
|
143
|
+
|
144
|
+
<details>
|
145
|
+
<summary>⚙️ Run from source</summary>
|
114
146
|
|
115
147
|
1. Clone the repository:
|
116
148
|
|
117
149
|
```bash
|
118
|
-
git clone https://github.com/
|
150
|
+
git clone https://github.com/Edison-Watch/open-edison.git
|
119
151
|
cd open-edison
|
120
152
|
```
|
121
153
|
|
@@ -146,9 +178,12 @@ make run
|
|
146
178
|
open-edison run
|
147
179
|
```
|
148
180
|
|
149
|
-
The server will be available at `http://localhost:3000`.
|
181
|
+
The server will be available at `http://localhost:3000`. 🌐
|
182
|
+
|
183
|
+
</details>
|
150
184
|
|
151
|
-
|
185
|
+
<details>
|
186
|
+
<summary>🔌 MCP Connection</summary>
|
152
187
|
|
153
188
|
Connect any MCP client to Open Edison (requires Node.js/npm for `npx`):
|
154
189
|
|
@@ -169,19 +204,23 @@ Or add to your MCP client config:
|
|
169
204
|
}
|
170
205
|
```
|
171
206
|
|
172
|
-
|
207
|
+
</details>
|
208
|
+
|
209
|
+
<details>
|
210
|
+
<summary>🧭 Usage</summary>
|
173
211
|
|
174
212
|
### API Endpoints
|
175
213
|
|
176
214
|
See [API Reference](docs/quick-reference/api_reference.md) for full API documentation.
|
177
215
|
|
178
|
-
|
216
|
+
<details>
|
217
|
+
<summary>🛠️ Development</summary>
|
179
218
|
|
180
|
-
### Setup
|
219
|
+
### Setup 🧰
|
181
220
|
|
182
221
|
Setup from source as above.
|
183
222
|
|
184
|
-
### Run
|
223
|
+
### Run ▶️
|
185
224
|
|
186
225
|
Server doesn't have any auto-reload at the moment, so you'll need to run & ctrl-c this during development.
|
187
226
|
|
@@ -189,7 +228,7 @@ Server doesn't have any auto-reload at the moment, so you'll need to run & ctrl-
|
|
189
228
|
make run
|
190
229
|
```
|
191
230
|
|
192
|
-
### Tests/code quality
|
231
|
+
### Tests/code quality ✅
|
193
232
|
|
194
233
|
We expect `make ci` to return cleanly.
|
195
234
|
|
@@ -197,7 +236,12 @@ We expect `make ci` to return cleanly.
|
|
197
236
|
make ci
|
198
237
|
```
|
199
238
|
|
200
|
-
|
239
|
+
</details>
|
240
|
+
|
241
|
+
<details>
|
242
|
+
<summary>⚙️ Configuration (config.json)</summary>
|
243
|
+
|
244
|
+
## Configuration ⚙️
|
201
245
|
|
202
246
|
The `config.json` file contains all configuration:
|
203
247
|
|
@@ -215,21 +259,32 @@ Each MCP server configuration includes:
|
|
215
259
|
- `env` - Environment variables (optional)
|
216
260
|
- `enabled` - Whether to auto-start this server
|
217
261
|
|
218
|
-
|
262
|
+
</details>
|
219
263
|
|
220
|
-
|
264
|
+
</details>
|
265
|
+
|
266
|
+
## 🔐 How Edison prevents data leakages
|
267
|
+
|
268
|
+
<details>
|
269
|
+
<summary>🔱 The lethal trifecta, agent lifecycle management</summary>
|
270
|
+
|
271
|
+
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](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/):
|
272
|
+
|
273
|
+
<img src="media/lethal-trifecta.png" alt="The lethal trifecta diagram showing the three key AI agent security risks" width="70%">
|
221
274
|
|
222
275
|
1. **Private data access** - Access to sensitive local files/data
|
223
276
|
2. **Untrusted content exposure** - Exposure to external/web content
|
224
277
|
3. **External communication** - Ability to write/send data externally
|
225
278
|
|
279
|
+
<img src="media/pam-diagram.png" alt="Privileged Access Management (PAM) example showing the lethal trifecta in action" width="90%">
|
280
|
+
|
226
281
|
The configuration allows you to classify these risks across **tools**, **resources**, and **prompts** using separate configuration files.
|
227
282
|
|
228
283
|
In addition to trifecta, we track Access Control Level (ACL) for each tool call,
|
229
284
|
that is, each tool has an ACL level (one of PUBLIC, PRIVATE, or SECRET), and we track the highest ACL level for each session.
|
230
285
|
If a write operation is attempted to a lower ACL level, it is blocked.
|
231
286
|
|
232
|
-
### Tool Permissions (`tool_permissions.json`)
|
287
|
+
### 🧰 Tool Permissions (`tool_permissions.json`)
|
233
288
|
|
234
289
|
Defines security classifications for MCP tools. See full file: [tool_permissions.json](tool_permissions.json), it looks like:
|
235
290
|
|
@@ -246,6 +301,9 @@ Defines security classifications for MCP tools. See full file: [tool_permissions
|
|
246
301
|
}
|
247
302
|
```
|
248
303
|
|
304
|
+
<details>
|
305
|
+
<summary>📁 Resource Permissions (`resource_permissions.json`)</summary>
|
306
|
+
|
249
307
|
### Resource Permissions (`resource_permissions.json`)
|
250
308
|
|
251
309
|
Defines security classifications for resource access patterns. See full file: [resource_permissions.json](resource_permissions.json), it looks like:
|
@@ -257,6 +315,11 @@ Defines security classifications for resource access patterns. See full file: [r
|
|
257
315
|
}
|
258
316
|
```
|
259
317
|
|
318
|
+
</details>
|
319
|
+
|
320
|
+
<details>
|
321
|
+
<summary>💬 Prompt Permissions (`prompt_permissions.json`)</summary>
|
322
|
+
|
260
323
|
### Prompt Permissions (`prompt_permissions.json`)
|
261
324
|
|
262
325
|
Defines security classifications for prompt types. See full file: [prompt_permissions.json](prompt_permissions.json), it looks like:
|
@@ -268,7 +331,9 @@ Defines security classifications for prompt types. See full file: [prompt_permis
|
|
268
331
|
}
|
269
332
|
```
|
270
333
|
|
271
|
-
|
334
|
+
</details>
|
335
|
+
|
336
|
+
### Wildcard Patterns ✨
|
272
337
|
|
273
338
|
All permission types support wildcard patterns:
|
274
339
|
|
@@ -276,21 +341,29 @@ All permission types support wildcard patterns:
|
|
276
341
|
- **Resources**: `scheme:*` (e.g., `file:*` matches all file resources)
|
277
342
|
- **Prompts**: `type:*` (e.g., `template:*` matches all template prompts)
|
278
343
|
|
279
|
-
### Security Monitoring
|
344
|
+
### Security Monitoring 🕵️
|
280
345
|
|
281
346
|
**All items must be explicitly configured** - unknown tools/resources/prompts will be rejected for security.
|
282
347
|
|
283
348
|
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.
|
284
349
|
|
285
|
-
|
350
|
+
</details>
|
351
|
+
|
352
|
+
|
353
|
+
|
354
|
+
## Documentation 📚
|
286
355
|
|
287
356
|
📚 **Complete documentation available in [`docs/`](docs/)**
|
288
357
|
|
289
|
-
- **[Getting Started](docs/quick-reference/config_quick_start.md)** - Quick setup guide
|
290
|
-
- **[Configuration](docs/core/configuration.md)** - Complete configuration reference
|
291
|
-
- **[API Reference](docs/quick-reference/api_reference.md)** - REST API documentation
|
292
|
-
- **[Development Guide](docs/development/development_guide.md)** - Contributing and development
|
358
|
+
- 🚀 **[Getting Started](docs/quick-reference/config_quick_start.md)** - Quick setup guide
|
359
|
+
- ⚙️ **[Configuration](docs/core/configuration.md)** - Complete configuration reference
|
360
|
+
- 📡 **[API Reference](docs/quick-reference/api_reference.md)** - REST API documentation
|
361
|
+
- 🧑💻 **[Development Guide](docs/development/development_guide.md)** - Contributing and development
|
293
362
|
|
294
|
-
|
363
|
+
|
364
|
+
<details>
|
365
|
+
<summary>📄 License</summary>
|
295
366
|
|
296
367
|
GPL-3.0 License - see [LICENSE](LICENSE) for details.
|
368
|
+
|
369
|
+
</details>
|
@@ -1,8 +1,39 @@
|
|
1
|
-
# OpenEdison
|
1
|
+
# OpenEdison 🔒⚡️
|
2
2
|
|
3
|
-
|
3
|
+
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 use.
|
4
4
|
|
5
|
-
|
5
|
+
<p align="center">
|
6
|
+
<img src="media/trifecta520p.gif" alt="Trifecta Security Risk Animation" width="520">
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<div align="center">
|
10
|
+
<h2>📧 To get visibility, control and exfiltration blocker into AI's interaction with your company software, systems of record, DBs, <a href="mailto:hello@edison.watch">Contact us</a> to discuss.</h2>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<p align="center">
|
14
|
+
<img alt="Project Version" src="https://img.shields.io/pypi/v/open-edison?label=version&color=blue">
|
15
|
+
<img alt="Python Version" src="https://img.shields.io/badge/python-3.12-blue?logo=python">
|
16
|
+
<img src="https://img.shields.io/badge/License-GPLv3-blue" alt="License">
|
17
|
+
|
18
|
+
|
19
|
+
</p>
|
20
|
+
|
21
|
+
---
|
22
|
+
|
23
|
+
|
24
|
+
## Features ✨
|
25
|
+
|
26
|
+
- 🛑 **Prevent Data Leaks** - Edison automatically blocks any data leaks, even if your AI gets jailbroken
|
27
|
+
- 👤 **Single-user MCP proxy** - No multi-user complexity, just a simple proxy for your MCP servers
|
28
|
+
- 🗂️ **JSON configuration** - Easy to configure and manage your MCP servers
|
29
|
+
- 🖥️ **Simple local frontend** - Track and monitor your MCP interactions, servers, and sessions.
|
30
|
+
- 📊 **Session tracking** - Track and monitor your MCP interactions
|
31
|
+
- 🔗 **Simple API** - REST API for managing MCP servers and proxying requests
|
32
|
+
- 🐳 **Docker support** - Run in a container for easy deployment
|
33
|
+
|
34
|
+
## Quick Start 🚀
|
35
|
+
|
36
|
+
The fastest way to get started:
|
6
37
|
|
7
38
|
```bash
|
8
39
|
# Installs uv (via Astral installer) and launches open-edison with uvx.
|
@@ -12,36 +43,31 @@ curl -fsSL https://raw.githubusercontent.com/Edison-Watch/open-edison/main/curl_
|
|
12
43
|
|
13
44
|
Run locally with uvx: `uvx open-edison --config-dir ~/edison-config`
|
14
45
|
|
46
|
+
<details>
|
47
|
+
<summary>⬇️ Install Node.js/npm (optional for MCP tools)</summary>
|
48
|
+
|
15
49
|
If you need `npx` (for Node-based MCP tools like `mcp-remote`), install Node.js as well:
|
16
50
|
|
17
|
-
-
|
18
|
-
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
19
|
-
- Node/npx: `brew install node`
|
20
|
-
- Linux (Debian/Ubuntu):
|
21
|
-
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
22
|
-
- Node/npx: `sudo apt-get update && sudo apt-get install -y nodejs npm`
|
23
|
-
- Windows (PowerShell):
|
24
|
-
- uv: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
|
25
|
-
- Node/npx: `winget install -e --id OpenJS.NodeJS`
|
51
|
+

|
26
52
|
|
27
|
-
|
53
|
+
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
54
|
+
- Node/npx: `brew install node`
|
28
55
|
|
29
|
-
|
30
|
-
|
31
|
-
|
56
|
+

|
57
|
+
|
58
|
+
- uv: `curl -fsSL https://astral.sh/uv/install.sh | sh`
|
59
|
+
- Node/npx: `sudo apt-get update && sudo apt-get install -y nodejs npm`
|
32
60
|
|
33
|
-
|
61
|
+

|
34
62
|
|
35
|
-
-
|
36
|
-
-
|
37
|
-
- **Simple local frontend** - Track and monitor your MCP interactions, servers, and sessions.
|
38
|
-
- **Session tracking** - Track and monitor your MCP interactions
|
39
|
-
- **Simple API** - REST API for managing MCP servers and proxying requests
|
40
|
-
- **Docker support** - Run in a container for easy deployment
|
63
|
+
- uv: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
|
64
|
+
- Node/npx: `winget install -e --id OpenJS.NodeJS`
|
41
65
|
|
42
|
-
|
66
|
+
After installation, ensure that `npx` is available on PATH.
|
67
|
+
</details>
|
43
68
|
|
44
|
-
|
69
|
+
<details>
|
70
|
+
<summary><img src="https://img.shields.io/badge/pypi-3775A9?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI"> Install from PyPI</summary>
|
45
71
|
|
46
72
|
#### Prerequisites
|
47
73
|
|
@@ -64,31 +90,37 @@ open-edison run --config-dir ~/edison-config
|
|
64
90
|
OPEN_EDISON_CONFIG_DIR=~/edison-config open-edison run
|
65
91
|
```
|
66
92
|
|
67
|
-
|
93
|
+
</details>
|
94
|
+
|
95
|
+
<details>
|
96
|
+
<summary><img src="https://img.shields.io/badge/Docker-2CA5E0?style=for-the-badge&logo=docker&logoColor=white" alt="Docker"> Run with Docker</summary>
|
68
97
|
|
69
98
|
There is a dockerfile for simple local setup.
|
70
99
|
|
71
100
|
```bash
|
72
101
|
# Single-line:
|
73
|
-
git clone https://github.com/
|
102
|
+
git clone https://github.com/Edison-Watch/open-edison.git && cd open-edison && make docker_run
|
74
103
|
|
75
104
|
# Or
|
76
105
|
# Clone repo
|
77
|
-
git clone https://github.com/
|
106
|
+
git clone https://github.com/Edison-Watch/open-edison.git
|
78
107
|
# Enter repo
|
79
108
|
cd open-edison
|
80
109
|
# Build and run
|
81
110
|
make docker_run
|
82
111
|
```
|
83
112
|
|
84
|
-
The MCP server will be available at `http://localhost:3000` and the api + frontend at `http://localhost:3001`.
|
113
|
+
The MCP server will be available at `http://localhost:3000` and the api + frontend at `http://localhost:3001`. 🌐
|
85
114
|
|
86
|
-
|
115
|
+
</details>
|
116
|
+
|
117
|
+
<details>
|
118
|
+
<summary>⚙️ Run from source</summary>
|
87
119
|
|
88
120
|
1. Clone the repository:
|
89
121
|
|
90
122
|
```bash
|
91
|
-
git clone https://github.com/
|
123
|
+
git clone https://github.com/Edison-Watch/open-edison.git
|
92
124
|
cd open-edison
|
93
125
|
```
|
94
126
|
|
@@ -119,9 +151,12 @@ make run
|
|
119
151
|
open-edison run
|
120
152
|
```
|
121
153
|
|
122
|
-
The server will be available at `http://localhost:3000`.
|
154
|
+
The server will be available at `http://localhost:3000`. 🌐
|
155
|
+
|
156
|
+
</details>
|
123
157
|
|
124
|
-
|
158
|
+
<details>
|
159
|
+
<summary>🔌 MCP Connection</summary>
|
125
160
|
|
126
161
|
Connect any MCP client to Open Edison (requires Node.js/npm for `npx`):
|
127
162
|
|
@@ -142,19 +177,23 @@ Or add to your MCP client config:
|
|
142
177
|
}
|
143
178
|
```
|
144
179
|
|
145
|
-
|
180
|
+
</details>
|
181
|
+
|
182
|
+
<details>
|
183
|
+
<summary>🧭 Usage</summary>
|
146
184
|
|
147
185
|
### API Endpoints
|
148
186
|
|
149
187
|
See [API Reference](docs/quick-reference/api_reference.md) for full API documentation.
|
150
188
|
|
151
|
-
|
189
|
+
<details>
|
190
|
+
<summary>🛠️ Development</summary>
|
152
191
|
|
153
|
-
### Setup
|
192
|
+
### Setup 🧰
|
154
193
|
|
155
194
|
Setup from source as above.
|
156
195
|
|
157
|
-
### Run
|
196
|
+
### Run ▶️
|
158
197
|
|
159
198
|
Server doesn't have any auto-reload at the moment, so you'll need to run & ctrl-c this during development.
|
160
199
|
|
@@ -162,7 +201,7 @@ Server doesn't have any auto-reload at the moment, so you'll need to run & ctrl-
|
|
162
201
|
make run
|
163
202
|
```
|
164
203
|
|
165
|
-
### Tests/code quality
|
204
|
+
### Tests/code quality ✅
|
166
205
|
|
167
206
|
We expect `make ci` to return cleanly.
|
168
207
|
|
@@ -170,7 +209,12 @@ We expect `make ci` to return cleanly.
|
|
170
209
|
make ci
|
171
210
|
```
|
172
211
|
|
173
|
-
|
212
|
+
</details>
|
213
|
+
|
214
|
+
<details>
|
215
|
+
<summary>⚙️ Configuration (config.json)</summary>
|
216
|
+
|
217
|
+
## Configuration ⚙️
|
174
218
|
|
175
219
|
The `config.json` file contains all configuration:
|
176
220
|
|
@@ -188,21 +232,32 @@ Each MCP server configuration includes:
|
|
188
232
|
- `env` - Environment variables (optional)
|
189
233
|
- `enabled` - Whether to auto-start this server
|
190
234
|
|
191
|
-
|
235
|
+
</details>
|
192
236
|
|
193
|
-
|
237
|
+
</details>
|
238
|
+
|
239
|
+
## 🔐 How Edison prevents data leakages
|
240
|
+
|
241
|
+
<details>
|
242
|
+
<summary>🔱 The lethal trifecta, agent lifecycle management</summary>
|
243
|
+
|
244
|
+
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](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/):
|
245
|
+
|
246
|
+
<img src="media/lethal-trifecta.png" alt="The lethal trifecta diagram showing the three key AI agent security risks" width="70%">
|
194
247
|
|
195
248
|
1. **Private data access** - Access to sensitive local files/data
|
196
249
|
2. **Untrusted content exposure** - Exposure to external/web content
|
197
250
|
3. **External communication** - Ability to write/send data externally
|
198
251
|
|
252
|
+
<img src="media/pam-diagram.png" alt="Privileged Access Management (PAM) example showing the lethal trifecta in action" width="90%">
|
253
|
+
|
199
254
|
The configuration allows you to classify these risks across **tools**, **resources**, and **prompts** using separate configuration files.
|
200
255
|
|
201
256
|
In addition to trifecta, we track Access Control Level (ACL) for each tool call,
|
202
257
|
that is, each tool has an ACL level (one of PUBLIC, PRIVATE, or SECRET), and we track the highest ACL level for each session.
|
203
258
|
If a write operation is attempted to a lower ACL level, it is blocked.
|
204
259
|
|
205
|
-
### Tool Permissions (`tool_permissions.json`)
|
260
|
+
### 🧰 Tool Permissions (`tool_permissions.json`)
|
206
261
|
|
207
262
|
Defines security classifications for MCP tools. See full file: [tool_permissions.json](tool_permissions.json), it looks like:
|
208
263
|
|
@@ -219,6 +274,9 @@ Defines security classifications for MCP tools. See full file: [tool_permissions
|
|
219
274
|
}
|
220
275
|
```
|
221
276
|
|
277
|
+
<details>
|
278
|
+
<summary>📁 Resource Permissions (`resource_permissions.json`)</summary>
|
279
|
+
|
222
280
|
### Resource Permissions (`resource_permissions.json`)
|
223
281
|
|
224
282
|
Defines security classifications for resource access patterns. See full file: [resource_permissions.json](resource_permissions.json), it looks like:
|
@@ -230,6 +288,11 @@ Defines security classifications for resource access patterns. See full file: [r
|
|
230
288
|
}
|
231
289
|
```
|
232
290
|
|
291
|
+
</details>
|
292
|
+
|
293
|
+
<details>
|
294
|
+
<summary>💬 Prompt Permissions (`prompt_permissions.json`)</summary>
|
295
|
+
|
233
296
|
### Prompt Permissions (`prompt_permissions.json`)
|
234
297
|
|
235
298
|
Defines security classifications for prompt types. See full file: [prompt_permissions.json](prompt_permissions.json), it looks like:
|
@@ -241,7 +304,9 @@ Defines security classifications for prompt types. See full file: [prompt_permis
|
|
241
304
|
}
|
242
305
|
```
|
243
306
|
|
244
|
-
|
307
|
+
</details>
|
308
|
+
|
309
|
+
### Wildcard Patterns ✨
|
245
310
|
|
246
311
|
All permission types support wildcard patterns:
|
247
312
|
|
@@ -249,21 +314,29 @@ All permission types support wildcard patterns:
|
|
249
314
|
- **Resources**: `scheme:*` (e.g., `file:*` matches all file resources)
|
250
315
|
- **Prompts**: `type:*` (e.g., `template:*` matches all template prompts)
|
251
316
|
|
252
|
-
### Security Monitoring
|
317
|
+
### Security Monitoring 🕵️
|
253
318
|
|
254
319
|
**All items must be explicitly configured** - unknown tools/resources/prompts will be rejected for security.
|
255
320
|
|
256
321
|
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.
|
257
322
|
|
258
|
-
|
323
|
+
</details>
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
## Documentation 📚
|
259
328
|
|
260
329
|
📚 **Complete documentation available in [`docs/`](docs/)**
|
261
330
|
|
262
|
-
- **[Getting Started](docs/quick-reference/config_quick_start.md)** - Quick setup guide
|
263
|
-
- **[Configuration](docs/core/configuration.md)** - Complete configuration reference
|
264
|
-
- **[API Reference](docs/quick-reference/api_reference.md)** - REST API documentation
|
265
|
-
- **[Development Guide](docs/development/development_guide.md)** - Contributing and development
|
331
|
+
- 🚀 **[Getting Started](docs/quick-reference/config_quick_start.md)** - Quick setup guide
|
332
|
+
- ⚙️ **[Configuration](docs/core/configuration.md)** - Complete configuration reference
|
333
|
+
- 📡 **[API Reference](docs/quick-reference/api_reference.md)** - REST API documentation
|
334
|
+
- 🧑💻 **[Development Guide](docs/development/development_guide.md)** - Contributing and development
|
266
335
|
|
267
|
-
|
336
|
+
|
337
|
+
<details>
|
338
|
+
<summary>📄 License</summary>
|
268
339
|
|
269
340
|
GPL-3.0 License - see [LICENSE](LICENSE) for details.
|
341
|
+
|
342
|
+
</details>
|
@@ -2,12 +2,14 @@
|
|
2
2
|
"server": {
|
3
3
|
"host": "0.0.0.0",
|
4
4
|
"port": 3000,
|
5
|
-
"api_key": "dev-api-key-change-me
|
5
|
+
"api_key": "dev-api-key-change-me"
|
6
6
|
},
|
7
|
+
"autoconfig_url": "https://api.edison.watch/api/config-perms",
|
7
8
|
"logging": {
|
8
9
|
"level": "INFO",
|
9
10
|
"database_path": "sessions.db"
|
10
11
|
},
|
12
|
+
"edison-watch-api-key": "change-me",
|
11
13
|
"mcp_servers": [
|
12
14
|
{
|
13
15
|
"name": "filesystem",
|
@@ -52,7 +54,7 @@
|
|
52
54
|
"./test.db"
|
53
55
|
],
|
54
56
|
"env": {},
|
55
|
-
"enabled":
|
57
|
+
"enabled": true,
|
56
58
|
"roots": []
|
57
59
|
},
|
58
60
|
{
|
@@ -90,6 +92,18 @@
|
|
90
92
|
],
|
91
93
|
"env": {},
|
92
94
|
"enabled": false
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"name": "zapier",
|
98
|
+
"command": "npx",
|
99
|
+
"args": [
|
100
|
+
"-y",
|
101
|
+
"mcp-remote",
|
102
|
+
"https://mcp.zapier.com/api/mcp/s/{access_token}/mcp"
|
103
|
+
],
|
104
|
+
"env": {},
|
105
|
+
"enabled": false,
|
106
|
+
"roots": []
|
93
107
|
}
|
94
108
|
]
|
95
109
|
}
|