open-edison 0.1.15__py3-none-any.whl → 0.1.16__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-edison
3
- Version: 0.1.15
3
+ Version: 0.1.16
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,12 +25,22 @@ 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
- # Open Edison
28
+ # OpenEdison
29
29
 
30
30
  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.
31
31
 
32
+ Just want to run it?
33
+
34
+ ```bash
35
+ curl -fsSL https://raw.githubusercontent.com/Edison-Watch/open-edison/main/curl_pipe_bash.sh | bash
36
+ ```
37
+
32
38
  Run locally with uvx: `uvx open-edison --config-dir ~/edison-config`
33
39
 
40
+ <div align="center">
41
+ <h2>📧 Interested in connecting AI to your business software with proper access controls? <a href="mailto:hello@edison.watch">Contact us</a> to discuss.</h2>
42
+ </div>
43
+
34
44
  ## Features
35
45
 
36
46
  - **Single-user MCP proxy** - No multi-user complexity, just a simple proxy for your MCP servers
@@ -65,6 +75,25 @@ open-edison run --config-dir ~/edison-config
65
75
  OPEN_EDISON_CONFIG_DIR=~/edison-config open-edison run
66
76
  ```
67
77
 
78
+ ### Run with Docker
79
+
80
+ There is a dockerfile for simple local setup.
81
+
82
+ ```bash
83
+ # Single-line:
84
+ git clone https://github.com/GatlingX/open-edison.git && cd open-edison && make docker_run
85
+
86
+ # Or
87
+ # Clone repo
88
+ git clone https://github.com/GatlingX/open-edison.git
89
+ # Enter repo
90
+ cd open-edison
91
+ # Build and run
92
+ make docker_run
93
+ ```
94
+
95
+ The MCP server will be available at `http://localhost:3000` and the api + frontend at `http://localhost:3001`.
96
+
68
97
  ### Run from source
69
98
 
70
99
  1. Clone the repository:
@@ -74,33 +103,26 @@ git clone https://github.com/GatlingX/open-edison.git
74
103
  cd open-edison
75
104
  ```
76
105
 
77
- 2. Set up the project:
106
+ 1. Set up the project:
78
107
 
79
108
  ```bash
80
109
  make setup
81
110
  ```
82
111
 
83
- 3. Edit `config.json` to configure your MCP servers:
112
+ 1. Edit `config.json` to configure your MCP servers. See the full file: [config.json](config.json), it looks like:
84
113
 
85
114
  ```json
86
115
  {
87
- "server": {
88
- "host": "localhost",
89
- "port": 3000,
90
- "api_key": "your-secure-api-key"
91
- },
116
+ "server": { "host": "0.0.0.0", "port": 3000, "api_key": "..." },
117
+ "logging": { "level": "INFO", "database_path": "sessions.db" },
92
118
  "mcp_servers": [
93
- {
94
- "name": "filesystem",
95
- "command": "uvx",
96
- "args": ["mcp-server-filesystem", "/path/to/directory"],
97
- "enabled": true
98
- }
119
+ { "name": "filesystem", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"], "enabled": true },
120
+ { "name": "github", "enabled": false, "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "..." } }
99
121
  ]
100
122
  }
101
123
  ```
102
124
 
103
- 4. Run the server:
125
+ 1. Run the server:
104
126
 
105
127
  ```bash
106
128
  make run
@@ -110,15 +132,6 @@ open-edison run
110
132
 
111
133
  The server will be available at `http://localhost:3000`.
112
134
 
113
- ### Run with Docker
114
-
115
- ```bash
116
- # After cloning the repo
117
- make docker_run
118
- ```
119
-
120
- The MCP server will be available at `http://localhost:3000` and the api + frontend at `http://localhost:3001`.
121
-
122
135
  ## MCP Connection
123
136
 
124
137
  Connect any MCP client to Open Edison:
@@ -144,64 +157,28 @@ Or add to your MCP client config:
144
157
 
145
158
  ### API Endpoints
146
159
 
147
- Api is on port 3001 (or configured MCP server port + 1).
148
-
149
- - `GET /health` - Health check
150
- - `GET /mcp/status` - Get status of configured MCP servers
151
- - `POST /mcp/{server_name}/start` - Start a specific MCP server
152
- - `POST /mcp/{server_name}/stop` - Stop a specific MCP server
153
- - `POST /mcp/call` - Proxy MCP calls to running servers
154
- - `GET /sessions` - Get session logs (coming soon)
155
-
156
- All endpoints except `/health` require the `Authorization: Bearer <api_key>` header.
160
+ See [API Reference](docs/quick-reference/api_reference.md) for full API documentation.
157
161
 
158
162
  ## Development
159
163
 
160
- ```bash
161
- # Install dependencies
162
- make sync
163
-
164
- # Run with auto-reload
165
- make dev
164
+ ### Setup
166
165
 
167
- # Run tests
168
- make test
166
+ Setup from source as above.
169
167
 
170
- # Lint code
171
- make lint
168
+ ### Run
172
169
 
173
- # Format code
174
- make format
175
- ```
176
-
177
- ### Website (Sessions Dashboard)
178
-
179
- A minimal React + Vite frontend is included at `open-edison/frontend/`.
180
-
181
- Run it with a single command from the repo root or via the CLI:
170
+ Server doesn't have any auto-reload at the moment, so you'll need to run & ctrl-c this during development.
182
171
 
183
172
  ```bash
184
- make website
185
- # or
186
- open-edison website
173
+ make run
187
174
  ```
188
175
 
189
- This will install frontend deps (first run) and start the dev server. Open the URL shown (typically `http://localhost:5173` or `5174`).
190
-
191
- Notes:
176
+ ### Tests/code quality
192
177
 
193
- - The dashboard reads session data directly from the SQLite database `edison.db` in the repo root via sql.js.
194
- - The Configs tab provides JSON editors (with syntax highlighting) for `config.json`, `tool_permissions.json`, `resource_permissions.json`, and `prompt_permissions.json`.
195
- - You can Save changes directly while the dev server is running; writes are constrained to the project root.
196
-
197
- ## Docker
178
+ We expect `make ci` to return cleanly.
198
179
 
199
180
  ```bash
200
- # Build Docker image
201
- make docker_build
202
-
203
- # Run in Docker
204
- make docker_run
181
+ make ci
205
182
  ```
206
183
 
207
184
  ## Configuration
@@ -230,80 +207,48 @@ Open Edison includes a comprehensive security monitoring system that tracks the
230
207
  2. **Untrusted content exposure** - Exposure to external/web content
231
208
  3. **External communication** - Ability to write/send data externally
232
209
 
233
- The system monitors these risks across **tools**, **resources**, and **prompts** using separate configuration files.
210
+ The configuration allows you to classify these risks across **tools**, **resources**, and **prompts** using separate configuration files.
211
+
212
+ In addition to trifecta, we track Access Control Level (ACL) for each tool call,
213
+ that is, each tool has an ACL level (one of PUBLIC, PRIVATE, or SECRET), and we track the highest ACL level for each session.
214
+ If a write operation is attempted to a lower ACL level, it is blocked.
234
215
 
235
216
  ### Tool Permissions (`tool_permissions.json`)
236
217
 
237
- Defines security classifications for MCP tools. Each tool is classified with three boolean flags:
218
+ Defines security classifications for MCP tools. See full file: [tool_permissions.json](tool_permissions.json), it looks like:
238
219
 
239
220
  ```json
240
221
  {
241
- "filesystem_read_file": {
242
- "write_operation": false,
243
- "read_private_data": true,
244
- "read_untrusted_public_data": false
222
+ "_metadata": { "last_updated": "2025-08-07" },
223
+ "builtin": {
224
+ "get_security_status": { "enabled": true, "write_operation": false, "read_private_data": false, "read_untrusted_public_data": false, "acl": "PUBLIC" }
245
225
  },
246
- "sqlite_create_record": {
247
- "write_operation": true,
248
- "read_private_data": true,
249
- "read_untrusted_public_data": false
226
+ "filesystem": {
227
+ "read_file": { "enabled": true, "write_operation": false, "read_private_data": true, "read_untrusted_public_data": false, "acl": "PRIVATE" },
228
+ "write_file": { "enabled": true, "write_operation": true, "read_private_data": true, "read_untrusted_public_data": false, "acl": "PRIVATE" }
250
229
  }
251
230
  }
252
231
  ```
253
232
 
254
233
  ### Resource Permissions (`resource_permissions.json`)
255
234
 
256
- Defines security classifications for resource access patterns. Currently empty - add classifications as needed:
235
+ Defines security classifications for resource access patterns. See full file: [resource_permissions.json](resource_permissions.json), it looks like:
257
236
 
258
237
  ```json
259
238
  {
260
- "_metadata": {
261
- "description": "Resource security classifications for Open Edison data access tracker",
262
- "last_updated": "2025-08-07"
263
- },
264
- "file:*": {
265
- "write_operation": false,
266
- "read_private_data": true,
267
- "read_untrusted_public_data": false
268
- },
269
- "http:*": {
270
- "write_operation": false,
271
- "read_private_data": false,
272
- "read_untrusted_public_data": true
273
- },
274
- "database:*": {
275
- "write_operation": false,
276
- "read_private_data": true,
277
- "read_untrusted_public_data": false
278
- }
239
+ "_metadata": { "last_updated": "2025-08-07" },
240
+ "builtin": { "config://app": { "enabled": true, "write_operation": false, "read_private_data": false, "read_untrusted_public_data": false } }
279
241
  }
280
242
  ```
281
243
 
282
244
  ### Prompt Permissions (`prompt_permissions.json`)
283
245
 
284
- Defines security classifications for prompt types. Currently empty - add classifications as needed:
246
+ Defines security classifications for prompt types. See full file: [prompt_permissions.json](prompt_permissions.json), it looks like:
285
247
 
286
248
  ```json
287
249
  {
288
- "_metadata": {
289
- "description": "Prompt security classifications for Open Edison data access tracker",
290
- "last_updated": "2025-08-07"
291
- },
292
- "system": {
293
- "write_operation": false,
294
- "read_private_data": false,
295
- "read_untrusted_public_data": false
296
- },
297
- "external_prompt": {
298
- "write_operation": false,
299
- "read_private_data": false,
300
- "read_untrusted_public_data": true
301
- },
302
- "prompt:file:*": {
303
- "write_operation": false,
304
- "read_private_data": true,
305
- "read_untrusted_public_data": false
306
- }
250
+ "_metadata": { "last_updated": "2025-08-07" },
251
+ "builtin": { "summarize_text": { "enabled": true, "write_operation": false, "read_private_data": false, "read_untrusted_public_data": false } }
307
252
  }
308
253
  ```
309
254
 
@@ -10,9 +10,9 @@ src/frontend_dist/index.html,sha256=Y4ZfK2hzHsfCiqh7Z7dzajTdojVjKCC5YL4JxdXeig4,
10
10
  src/frontend_dist/assets/index-_NTxjOfh.js,sha256=KetbIa26YNfMP_SwWa04fCr9jGNnoPeZsA41-Oxgx6w,236658
11
11
  src/frontend_dist/assets/index-h6k8aL6h.css,sha256=Lq5FK1bsPMR67cAwD_-fMvWqKbo_IyraMSKndoQf8i8,13875
12
12
  src/middleware/data_access_tracker.py,sha256=RZh1RCBYDEbvVIJPkDUz0bfLmK-xYIdV0lGbIxbJYc0,25966
13
- src/middleware/session_tracking.py,sha256=mApPfJLjHfiSf5CjMeq-IWqjKFsjvWgBgGrgy5GJWa0,20043
14
- open_edison-0.1.15.dist-info/METADATA,sha256=hiQZYgHCzeahyIB26lrwRaQI_QbjCUJ7MxaG90aX62U,8967
15
- open_edison-0.1.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- open_edison-0.1.15.dist-info/entry_points.txt,sha256=qNAkJcnoTXRhj8J--3PDmXz_TQKdB8H_0C9wiCtDIyA,72
17
- open_edison-0.1.15.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
18
- open_edison-0.1.15.dist-info/RECORD,,
13
+ src/middleware/session_tracking.py,sha256=cXuOdJy3Lt7mw_mbtWRVKN7hUTMFJkudaCzPEG_cB5c,20039
14
+ open_edison-0.1.16.dist-info/METADATA,sha256=M_F6kqHCZMyV4tOl8rIRgDlSMAfTxPkI0Sw_U8aJJoU,8611
15
+ open_edison-0.1.16.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ open_edison-0.1.16.dist-info/entry_points.txt,sha256=qNAkJcnoTXRhj8J--3PDmXz_TQKdB8H_0C9wiCtDIyA,72
17
+ open_edison-0.1.16.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
18
+ open_edison-0.1.16.dist-info/RECORD,,
@@ -296,7 +296,7 @@ class SessionTrackingMiddleware(Middleware):
296
296
 
297
297
  assert session.data_access_tracker is not None
298
298
  log.debug(f"🔍 Analyzing tool {context.message.name} for security implications")
299
- _ = session.data_access_tracker.add_tool_call(context.message.name)
299
+ session.data_access_tracker.add_tool_call(context.message.name)
300
300
  # Telemetry: record tool call
301
301
  record_tool_call(context.message.name)
302
302