open-edison 0.1.78rc1__tar.gz → 0.1.79__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.
Files changed (65) hide show
  1. {open_edison-0.1.78rc1 → open_edison-0.1.79}/PKG-INFO +1 -1
  2. {open_edison-0.1.78rc1 → open_edison-0.1.79}/pyproject.toml +1 -1
  3. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/single_user_mcp.py +10 -6
  4. open_edison-0.1.79/test_config/config.json +145 -0
  5. open_edison-0.1.79/test_config/prompt_permissions.json +15 -0
  6. open_edison-0.1.79/test_config/resource_permissions.json +15 -0
  7. open_edison-0.1.79/tool_permissions.json +245 -0
  8. {open_edison-0.1.78rc1 → open_edison-0.1.79}/.gitignore +0 -0
  9. {open_edison-0.1.78rc1 → open_edison-0.1.79}/LICENSE +0 -0
  10. {open_edison-0.1.78rc1 → open_edison-0.1.79}/README.md +0 -0
  11. {open_edison-0.1.78rc1 → open_edison-0.1.79}/config.json +0 -0
  12. {open_edison-0.1.78rc1 → open_edison-0.1.79}/desktop_ext/README.md +0 -0
  13. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/README.md +0 -0
  14. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/architecture/single_user_design.md +0 -0
  15. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/core/configuration.md +0 -0
  16. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/core/project_structure.md +0 -0
  17. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/core/proxy_usage.md +0 -0
  18. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/deployment/docker.md +0 -0
  19. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/deployment/local.md +0 -0
  20. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/development/contributing.md +0 -0
  21. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/development/development_guide.md +0 -0
  22. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/development/testing.md +0 -0
  23. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/quick-reference/api_reference.md +0 -0
  24. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/quick-reference/config_quick_start.md +0 -0
  25. {open_edison-0.1.78rc1 → open_edison-0.1.79}/docs/testing_status.md +0 -0
  26. {open_edison-0.1.78rc1 → open_edison-0.1.79}/hatch_build.py +0 -0
  27. {open_edison-0.1.78rc1 → open_edison-0.1.79}/installation_test/README.md +0 -0
  28. {open_edison-0.1.78rc1 → open_edison-0.1.79}/prompt_permissions.json +0 -0
  29. {open_edison-0.1.78rc1 → open_edison-0.1.79}/resource_permissions.json +0 -0
  30. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/__init__.py +0 -0
  31. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/__main__.py +0 -0
  32. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/cli.py +0 -0
  33. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/config.py +0 -0
  34. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/config.pyi +0 -0
  35. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/events.py +0 -0
  36. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/frontend_dist/assets/index-D05VN_1l.css +0 -0
  37. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/frontend_dist/assets/index-D6ziuTsl.js +0 -0
  38. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/frontend_dist/index.html +0 -0
  39. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/frontend_dist/sw.js +0 -0
  40. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/__init__.py +0 -0
  41. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/__main__.py +0 -0
  42. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/api.py +0 -0
  43. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/cli.py +0 -0
  44. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/export_cli.py +0 -0
  45. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/exporters.py +0 -0
  46. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/import_api.py +0 -0
  47. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/importers.py +0 -0
  48. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/merge.py +0 -0
  49. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/parsers.py +0 -0
  50. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/paths.py +0 -0
  51. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/quick_cli.py +0 -0
  52. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_importer/types.py +0 -0
  53. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/mcp_stdio_capture.py +0 -0
  54. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/middleware/data_access_tracker.py +0 -0
  55. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/middleware/session_tracking.py +0 -0
  56. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/oauth_manager.py +0 -0
  57. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/oauth_override.py +0 -0
  58. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/permissions.py +0 -0
  59. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/server.py +0 -0
  60. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/setup_tui/__init__.py +0 -0
  61. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/setup_tui/main.py +0 -0
  62. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/telemetry.py +0 -0
  63. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/tools/io.py +0 -0
  64. {open_edison-0.1.78rc1 → open_edison-0.1.79}/src/vulture_whitelist.py +0 -0
  65. {open_edison-0.1.78rc1 → open_edison-0.1.79/test_config}/tool_permissions.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-edison
3
- Version: 0.1.78rc1
3
+ Version: 0.1.79
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "open-edison"
3
- version = "0.1.78rc1"
3
+ version = "0.1.79"
4
4
  description = "Open-source MCP security, aggregation, and monitoring. Single-user, self-hosted MCP proxy."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -115,10 +115,10 @@ class SingleUserMCP(FastMCP[Any]):
115
115
  )
116
116
 
117
117
  # Validate and normalize all results
118
- tools = self._validate_server_result(tools, "tools", server.name)
119
- resources = self._validate_server_result(resources, "resources", server.name)
120
- templates = self._validate_server_result(templates, "templates", server.name)
121
- prompts = self._validate_server_result(prompts, "prompts", server.name)
118
+ tools = self._validate_server_result(tools, "tools", prefix)
119
+ resources = self._validate_server_result(resources, "resources", prefix)
120
+ templates = self._validate_server_result(templates, "templates", prefix)
121
+ prompts = self._validate_server_result(prompts, "prompts", prefix)
122
122
 
123
123
  # Import all components
124
124
  self._import_tools(tools, prefix)
@@ -132,9 +132,13 @@ class SingleUserMCP(FastMCP[Any]):
132
132
  self, result: Any, result_type: str, server_name: str
133
133
  ) -> dict[str, Any]:
134
134
  """Validate and normalize server result from asyncio.gather with return_exceptions=True."""
135
+ if isinstance(result, RuntimeError):
136
+ log.debug(f'Server {server_name} does not appear to contain "{result_type}"')
137
+ return {}
135
138
  if isinstance(result, Exception):
136
- log.warning(f'Server {server_name} does not appear to contain "{result_type}"')
137
- log.debug(f"Server {server_name} _validate_server_result exception result: {result}")
139
+ log.error(
140
+ f'Server {server_name} received and unexpected exception when feetching "{result_type}". result: {result}'
141
+ )
138
142
  return {}
139
143
  if not isinstance(result, dict):
140
144
  log.warning(f"Server {server_name} returned an unexpected response")
@@ -0,0 +1,145 @@
1
+ {
2
+ "server": {
3
+ "host": "0.0.0.0",
4
+ "port": 3000,
5
+ "api_key": "dev-api-key-change-me"
6
+ },
7
+ "autoconfig_url": "https://api.edison.watch/api/config-perms",
8
+ "logging": {
9
+ "level": "INFO",
10
+ "database_path": "sessions.db"
11
+ },
12
+ "edison-watch-api-key": "change-me",
13
+ "mcp_servers": [
14
+ {
15
+ "name": "filesystem",
16
+ "command": "npx",
17
+ "args": [
18
+ "-y",
19
+ "@modelcontextprotocol/server-filesystem",
20
+ "/tmp"
21
+ ],
22
+ "env": {},
23
+ "enabled": true,
24
+ "roots": []
25
+ },
26
+ {
27
+ "name": "fetch",
28
+ "command": "npx",
29
+ "args": [
30
+ "-y",
31
+ "@modelcontextprotocol/server-everything"
32
+ ],
33
+ "env": {},
34
+ "enabled": false
35
+ },
36
+ {
37
+ "name": "github",
38
+ "command": "npx",
39
+ "args": [
40
+ "-y",
41
+ "@github/mcp-server-github"
42
+ ],
43
+ "env": {
44
+ "GITHUB_TOKEN": "your-github-token-here"
45
+ },
46
+ "enabled": false
47
+ },
48
+ {
49
+ "name": "sqlite",
50
+ "command": "npx",
51
+ "args": [
52
+ "-y",
53
+ "mcp-sqlite",
54
+ "./test.db"
55
+ ],
56
+ "env": {},
57
+ "enabled": true,
58
+ "roots": []
59
+ },
60
+ {
61
+ "name": "supabase",
62
+ "command": "npx",
63
+ "args": [
64
+ "-y",
65
+ "@supabase/mcp-server-supabase@latest"
66
+ ],
67
+ "env": {
68
+ "SUPABASE_ACCESS_TOKEN": "your-supabase-access-token"
69
+ },
70
+ "enabled": false
71
+ },
72
+ {
73
+ "name": "atlassian",
74
+ "command": "npx",
75
+ "args": [
76
+ "-y",
77
+ "mcp-remote",
78
+ "https://mcp.atlassian.com/v1/sse"
79
+ ],
80
+ "env": {},
81
+ "enabled": false
82
+ },
83
+ {
84
+ "name": "figma",
85
+ "command": "npx",
86
+ "args": [
87
+ "-y",
88
+ "figma-developer-mcp",
89
+ "--stdio"
90
+ ],
91
+ "env": {
92
+ "FIGMA_API_KEY": "your-figma-api-key"
93
+ },
94
+ "enabled": false
95
+ },
96
+ {
97
+ "name": "figma_dev_mode",
98
+ "command": "npx",
99
+ "args": [
100
+ "-y",
101
+ "mcp-remote",
102
+ "http://127.0.0.1:3845/sse"
103
+ ],
104
+ "env": {},
105
+ "enabled": false
106
+ },
107
+ {
108
+ "name": "playwright",
109
+ "command": "npx",
110
+ "args": [
111
+ "-y",
112
+ "@automatalabs/mcp-server-playwright"
113
+ ],
114
+ "env": {},
115
+ "enabled": false
116
+ },
117
+ {
118
+ "name": "google_drive",
119
+ "command": "npx",
120
+ "args": [
121
+ "-y",
122
+ "@modelcontextprotocol/server-gdrive"
123
+ ],
124
+ "env": {
125
+ "GOOGLE_CLIENT_ID": "your-client-id",
126
+ "GOOGLE_CLIENT_SECRET": "your-client-secret",
127
+ "GOOGLE_REFRESH_TOKEN": "your-refresh-token"
128
+ },
129
+ "enabled": false
130
+ },
131
+ {
132
+ "name": "zapier",
133
+ "command": "npx",
134
+ "args": [
135
+ "-y",
136
+ "mcp-remote",
137
+ "https://mcp.zapier.com/api/mcp/s/REPLACE_WITH_ACCESS_TOKEN/mcp",
138
+ "--header",
139
+ "Accept: application/json, text/event-stream"
140
+ ],
141
+ "env": {},
142
+ "enabled": false
143
+ }
144
+ ]
145
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "_metadata": {
3
+ "description": "Prompt security classifications for Open Edison data access tracker",
4
+ "last_updated": "2025-08-07"
5
+ },
6
+ "builtin": {
7
+ "summarize_text": {
8
+ "enabled": true,
9
+ "write_operation": false,
10
+ "read_private_data": false,
11
+ "read_untrusted_public_data": false
12
+ }
13
+ },
14
+ "sqlite": {}
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "_metadata": {
3
+ "description": "Resource security classifications for Open Edison data access tracker",
4
+ "last_updated": "2025-08-07"
5
+ },
6
+ "builtin": {
7
+ "config://app": {
8
+ "enabled": true,
9
+ "write_operation": false,
10
+ "read_private_data": false,
11
+ "read_untrusted_public_data": false
12
+ }
13
+ },
14
+ "sqlite": {}
15
+ }
@@ -0,0 +1,245 @@
1
+ {
2
+ "_metadata": {
3
+ "description": "Tool security classifications for Open Edison data access tracker",
4
+ "last_updated": "2025-08-07"
5
+ },
6
+ "builtin": {
7
+ "echo": {
8
+ "enabled": true,
9
+ "write_operation": false,
10
+ "read_private_data": false,
11
+ "read_untrusted_public_data": false,
12
+ "acl": "PUBLIC"
13
+ },
14
+ "get_server_info": {
15
+ "enabled": true,
16
+ "write_operation": false,
17
+ "read_private_data": false,
18
+ "read_untrusted_public_data": false,
19
+ "acl": "PUBLIC"
20
+ },
21
+ "get_security_status": {
22
+ "enabled": true,
23
+ "write_operation": false,
24
+ "read_private_data": false,
25
+ "read_untrusted_public_data": false,
26
+ "acl": "PUBLIC"
27
+ },
28
+ "get_available_tools": {
29
+ "enabled": true,
30
+ "write_operation": false,
31
+ "read_private_data": false,
32
+ "read_untrusted_public_data": false,
33
+ "acl": "PUBLIC"
34
+ },
35
+ "tools_changed": {
36
+ "enabled": true,
37
+ "write_operation": false,
38
+ "read_private_data": false,
39
+ "read_untrusted_public_data": false,
40
+ "acl": "PUBLIC"
41
+ }
42
+ },
43
+ "filesystem": {
44
+ "read_file": {
45
+ "enabled": true,
46
+ "write_operation": false,
47
+ "read_private_data": true,
48
+ "read_untrusted_public_data": false,
49
+ "acl": "PRIVATE"
50
+ },
51
+ "read_text_file": {
52
+ "enabled": true,
53
+ "write_operation": false,
54
+ "read_private_data": true,
55
+ "read_untrusted_public_data": false,
56
+ "acl": "PRIVATE"
57
+ },
58
+ "read_media_file": {
59
+ "enabled": true,
60
+ "write_operation": false,
61
+ "read_private_data": true,
62
+ "read_untrusted_public_data": false,
63
+ "acl": "PRIVATE"
64
+ },
65
+ "read_multiple_files": {
66
+ "enabled": true,
67
+ "write_operation": false,
68
+ "read_private_data": true,
69
+ "read_untrusted_public_data": false,
70
+ "acl": "PRIVATE"
71
+ },
72
+ "write_file": {
73
+ "enabled": true,
74
+ "write_operation": true,
75
+ "read_private_data": false,
76
+ "read_untrusted_public_data": false,
77
+ "acl": "PUBLIC"
78
+ },
79
+ "edit_file": {
80
+ "enabled": true,
81
+ "write_operation": true,
82
+ "read_private_data": true,
83
+ "read_untrusted_public_data": false,
84
+ "acl": "PRIVATE"
85
+ },
86
+ "create_directory": {
87
+ "enabled": true,
88
+ "write_operation": true,
89
+ "read_private_data": false,
90
+ "read_untrusted_public_data": false,
91
+ "acl": "PRIVATE"
92
+ },
93
+ "list_directory": {
94
+ "enabled": true,
95
+ "write_operation": false,
96
+ "read_private_data": true,
97
+ "read_untrusted_public_data": false,
98
+ "acl": "PRIVATE"
99
+ },
100
+ "list_directory_with_sizes": {
101
+ "enabled": true,
102
+ "write_operation": false,
103
+ "read_private_data": true,
104
+ "read_untrusted_public_data": false,
105
+ "acl": "PRIVATE"
106
+ },
107
+ "directory_tree": {
108
+ "enabled": true,
109
+ "write_operation": false,
110
+ "read_private_data": true,
111
+ "read_untrusted_public_data": false,
112
+ "acl": "PRIVATE"
113
+ },
114
+ "move_file": {
115
+ "enabled": true,
116
+ "write_operation": true,
117
+ "read_private_data": true,
118
+ "read_untrusted_public_data": false,
119
+ "acl": "PRIVATE"
120
+ },
121
+ "search_files": {
122
+ "enabled": true,
123
+ "write_operation": false,
124
+ "read_private_data": true,
125
+ "read_untrusted_public_data": false,
126
+ "acl": "PRIVATE"
127
+ },
128
+ "get_file_info": {
129
+ "enabled": true,
130
+ "write_operation": false,
131
+ "read_private_data": true,
132
+ "read_untrusted_public_data": false,
133
+ "acl": "PRIVATE"
134
+ },
135
+ "list_allowed_directories": {
136
+ "enabled": true,
137
+ "write_operation": false,
138
+ "read_private_data": false,
139
+ "read_untrusted_public_data": false,
140
+ "acl": "PUBLIC"
141
+ }
142
+ },
143
+ "sqlite": {
144
+ "db_info": {
145
+ "enabled": true,
146
+ "write_operation": false,
147
+ "read_private_data": true,
148
+ "read_untrusted_public_data": false,
149
+ "description": "Get information about the database",
150
+ "acl": "PRIVATE"
151
+ },
152
+ "query": {
153
+ "enabled": true,
154
+ "write_operation": true,
155
+ "read_private_data": true,
156
+ "read_untrusted_public_data": false,
157
+ "description": "Execute a raw SQL query against the database with optional parameter values",
158
+ "acl": "PRIVATE"
159
+ },
160
+ "list_tables": {
161
+ "enabled": true,
162
+ "write_operation": false,
163
+ "read_private_data": true,
164
+ "read_untrusted_public_data": false,
165
+ "description": "List all user tables in the SQLite database (excludes system tables)",
166
+ "acl": "PRIVATE"
167
+ },
168
+ "get_table_schema": {
169
+ "enabled": true,
170
+ "write_operation": false,
171
+ "read_private_data": true,
172
+ "read_untrusted_public_data": false,
173
+ "description": "Get the schema information for a specific table including column details",
174
+ "acl": "PRIVATE"
175
+ },
176
+ "create_record": {
177
+ "enabled": true,
178
+ "write_operation": true,
179
+ "read_private_data": true,
180
+ "read_untrusted_public_data": false,
181
+ "description": "Insert a new record into a table with specified data",
182
+ "acl": "PRIVATE"
183
+ },
184
+ "read_records": {
185
+ "enabled": true,
186
+ "write_operation": false,
187
+ "read_private_data": true,
188
+ "read_untrusted_public_data": false,
189
+ "description": "Read records from a table with optional conditions, limit, and offset",
190
+ "acl": "PRIVATE"
191
+ },
192
+ "update_records": {
193
+ "enabled": true,
194
+ "write_operation": true,
195
+ "read_private_data": true,
196
+ "read_untrusted_public_data": false,
197
+ "description": "Update records in a table based on specified conditions",
198
+ "acl": "PRIVATE"
199
+ },
200
+ "delete_records": {
201
+ "enabled": true,
202
+ "write_operation": true,
203
+ "read_private_data": true,
204
+ "read_untrusted_public_data": false,
205
+ "description": "Delete records from a table based on specified conditions",
206
+ "acl": "PRIVATE"
207
+ }
208
+ },
209
+ "test_server": {
210
+ "test_server/*": {
211
+ "enabled": true,
212
+ "write_operation": false,
213
+ "read_private_data": true,
214
+ "read_untrusted_public_data": false,
215
+ "acl": "PRIVATE"
216
+ }
217
+ },
218
+ "atlassian": {
219
+ "getAccessibleAtlassianResources": {
220
+ "enabled": true,
221
+ "write_operation": false,
222
+ "read_private_data": true,
223
+ "read_untrusted_public_data": true,
224
+ "acl": "PUBLIC"
225
+ }
226
+ },
227
+ "zapier": {
228
+ "add_tools": {
229
+ "enabled": true,
230
+ "write_operation": false,
231
+ "read_private_data": false,
232
+ "read_untrusted_public_data": false,
233
+ "acl": "PUBLIC",
234
+ "description": "Adds a new tool to the tool registry. Caution: Do not disable it is required for zapier to work properly"
235
+ },
236
+ "edit_tools": {
237
+ "enabled": true,
238
+ "write_operation": false,
239
+ "read_private_data": false,
240
+ "read_untrusted_public_data": false,
241
+ "acl": "PUBLIC",
242
+ "description": "Edit your existing MCP provider actions. TODO: Unknown side-effects"
243
+ }
244
+ }
245
+ }
File without changes
File without changes
File without changes
File without changes