open-edison 0.1.42__py3-none-any.whl → 0.1.44__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.
- {open_edison-0.1.42.dist-info → open_edison-0.1.44.dist-info}/METADATA +10 -34
- {open_edison-0.1.42.dist-info → open_edison-0.1.44.dist-info}/RECORD +15 -11
- src/cli.py +8 -41
- src/frontend_dist/assets/index-BUUcUfTt.js +51 -0
- src/frontend_dist/assets/index-o6_8mdM8.css +1 -0
- src/frontend_dist/index.html +16 -6
- src/frontend_dist/sw.js +71 -0
- src/mcp_importer/api.py +115 -17
- src/mcp_importer/quick_cli.py +12 -15
- src/oauth_manager.py +1 -1
- src/setup_tui/__init__.py +5 -0
- src/setup_tui/main.py +157 -0
- frontend_dist/index.html +0 -11
- {open_edison-0.1.42.dist-info → open_edison-0.1.44.dist-info}/WHEEL +0 -0
- {open_edison-0.1.42.dist-info → open_edison-0.1.44.dist-info}/entry_points.txt +0 -0
- {open_edison-0.1.42.dist-info → open_edison-0.1.44.dist-info}/licenses/LICENSE +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.44
|
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
|
@@ -17,6 +17,7 @@ Requires-Dist: opentelemetry-exporter-otlp>=1.36.0
|
|
17
17
|
Requires-Dist: opentelemetry-sdk>=1.36.0
|
18
18
|
Requires-Dist: python-dotenv>=1.0.1
|
19
19
|
Requires-Dist: pyyaml>=6.0.2
|
20
|
+
Requires-Dist: questionary>=2.1.1
|
20
21
|
Requires-Dist: sqlalchemy>=2.0.41
|
21
22
|
Requires-Dist: starlette>=0.47.1
|
22
23
|
Requires-Dist: uvicorn>=0.35.0
|
@@ -72,11 +73,11 @@ curl -fsSL https://raw.githubusercontent.com/Edison-Watch/open-edison/main/curl_
|
|
72
73
|
|
73
74
|
Run locally with uvx: `uvx open-edison`
|
74
75
|
|
75
|
-
Optionally,
|
76
|
+
Optionally, run the setup wizard to import/configure MCP:
|
76
77
|
|
77
78
|
```bash
|
78
|
-
|
79
|
-
|
79
|
+
uv run python -m src.setup_tui.main
|
80
|
+
# add --dry-run to preview without writing
|
80
81
|
```
|
81
82
|
|
82
83
|
<details>
|
@@ -131,38 +132,13 @@ OPEN_EDISON_CONFIG_DIR=~/edison-config open-edison run
|
|
131
132
|
<details>
|
132
133
|
<summary>🔄 Import from Cursor/VS Code/Claude Code</summary>
|
133
134
|
|
134
|
-
|
135
|
+
Run the interactive setup wizard to detect clients, import servers, and configure your editor:
|
135
136
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
```bash
|
141
|
-
# From source (no install)
|
142
|
-
uv run python -m mcp_importer.quick_cli --yes
|
143
|
-
```
|
144
|
-
|
145
|
-
- Preview what will be imported (no writes):
|
146
|
-
|
147
|
-
```bash
|
148
|
-
uv run python -m mcp_importer --source cursor --dry-run
|
149
|
-
```
|
150
|
-
|
151
|
-
- Import servers into Open Edison `config.json` (merge policy defaults to `skip`):
|
152
|
-
|
153
|
-
```bash
|
154
|
-
uv run python -m mcp_importer --source cursor
|
155
|
-
uv run python -m mcp_importer --source vscode
|
156
|
-
uv run python -m mcp_importer --source claude-code
|
157
|
-
```
|
158
|
-
|
159
|
-
- Point your editor to Open Edison (backup original config and replace with a single Open Edison server):
|
137
|
+
```bash
|
138
|
+
uv run python -m src.setup_tui.main
|
139
|
+
```
|
160
140
|
|
161
|
-
|
162
|
-
uv run python -m mcp_importer export --target cursor --yes
|
163
|
-
uv run python -m mcp_importer export --target vscode --yes
|
164
|
-
uv run python -m mcp_importer export --target claude-code --yes
|
165
|
-
```
|
141
|
+
Use `--dry-run` to preview without writing.
|
166
142
|
|
167
143
|
</details>
|
168
144
|
|
@@ -1,18 +1,21 @@
|
|
1
1
|
src/__init__.py,sha256=bEYMwBiuW9jzF07iWhas4Vb30EcpnqfpNfz_Q6yO1jU,209
|
2
2
|
src/__main__.py,sha256=kQsaVyzRa_ESC57JpKDSQJAHExuXme0rM5beJsYxFeA,161
|
3
|
-
src/cli.py,sha256=
|
3
|
+
src/cli.py,sha256=fqX-HuRDePRasexpnURQ_pVYeycJuWxllMcwfqDxMQw,8490
|
4
4
|
src/config.py,sha256=RSsAYzl8cj6eaDN1RORMcfKKWBcp4bKTQp2BdhAL9mg,10258
|
5
5
|
src/config.pyi,sha256=FgehEGli8ZXSjGlANBgMGv5497q4XskQciOc1fUcxqM,2033
|
6
6
|
src/events.py,sha256=aFQrVXDIZwt55Dz6OtyoXu2yi9evqo-8jZzo3CR2Tto,4965
|
7
|
-
src/oauth_manager.py,sha256=
|
7
|
+
src/oauth_manager.py,sha256=W9QSo0vfGDQ_i-QWCngkv7YLSL3Rk5jfPmqjU1J2rnU,9911
|
8
8
|
src/permissions.py,sha256=NGAnlG_z59HEiVA-k3cYvwmmiuHzxuNb5Tbd5umbL00,10483
|
9
9
|
src/server.py,sha256=cnO5bgxT-lrfuwk9AIvB_HBV8SWOtFClfGUn5_zFWyo,45652
|
10
10
|
src/single_user_mcp.py,sha256=rJrlqHcIubGkos_24ux5rb3OoKYDzvagCHghhfDeXTI,18535
|
11
11
|
src/telemetry.py,sha256=-RZPIjpI53zbsKmp-63REeZ1JirWHV5WvpSRa2nqZEk,11321
|
12
|
-
src/frontend_dist/index.html,sha256=
|
12
|
+
src/frontend_dist/index.html,sha256=s95FMkH8VLisvawLH7bZxbLzRUFvMhHkH6ZMzpVBngs,673
|
13
|
+
src/frontend_dist/sw.js,sha256=rihX1es-vWwjmtnXyaksJjs2dio6MVAOTAWwQPeJUYw,2164
|
14
|
+
src/frontend_dist/assets/index-BUUcUfTt.js,sha256=awoyPI6u0v6ao2iarZdSkrSDUvyU8aNkMLqHMvgVgyY,257666
|
15
|
+
src/frontend_dist/assets/index-o6_8mdM8.css,sha256=nwmX_6q55mB9463XN2JM8BdeihjkALpQK83Fc3_iGvE,15936
|
13
16
|
src/mcp_importer/__init__.py,sha256=Mk59pVr7OMGfYGWeSYk8-URfhIcrs3SPLYS7fmJbMII,275
|
14
17
|
src/mcp_importer/__main__.py,sha256=0jVfxKzyr6koVu1ghhWseah5ilKIoGovE6zkEZ-u-Og,515
|
15
|
-
src/mcp_importer/api.py,sha256=
|
18
|
+
src/mcp_importer/api.py,sha256=47tur0xgl1NBI1Vnh3cpScEmDS64bKMYcWjZDuqx7HQ,6644
|
16
19
|
src/mcp_importer/cli.py,sha256=Pe0GLWm1nMd1VuNXOSkxIrFZuGNFc9dNvfBsvf-bdBI,3487
|
17
20
|
src/mcp_importer/export_cli.py,sha256=daEadB6nL8P4OpEGFx0GshuN1a091L7BhiitpV1bPqA,6294
|
18
21
|
src/mcp_importer/exporters.py,sha256=fSgl6seduoXFp7YnKH26UEaC1sFBnd4whSut7CJLBQs,11348
|
@@ -21,13 +24,14 @@ src/mcp_importer/importers.py,sha256=zGN8lT7qQJ95jDTd-ck09j_w5PSvH-uj33TILoHfHbs
|
|
21
24
|
src/mcp_importer/merge.py,sha256=KIGT7UgbAm07-LdyoUXEJ7ABSIiPTFlj_qjz669yFxg,1569
|
22
25
|
src/mcp_importer/parsers.py,sha256=JRE7y_Gg-QmlAARvZdrI9CmUyy-ODvDPbS695pb3Aw8,4856
|
23
26
|
src/mcp_importer/paths.py,sha256=4L-cPr7KCM9X9gAUP7Da6ictLNrPWuQ_IM419zqY-2I,2700
|
24
|
-
src/mcp_importer/quick_cli.py,sha256=
|
27
|
+
src/mcp_importer/quick_cli.py,sha256=4mJe10q_lZCYLm75QBt1rYy2j8mGEsRZoAqA0agjfSM,1834
|
25
28
|
src/mcp_importer/types.py,sha256=h03TbAnJbap6OWWd0dT0QcFWNvSaiVFWH9V9PD6x4s0,138
|
26
29
|
src/middleware/data_access_tracker.py,sha256=bArBffWgYmvxOx9z_pgXQhogvnWQcc1m6WvEblDD4gw,15039
|
27
30
|
src/middleware/session_tracking.py,sha256=5W1VH9HNqIZeX0HNxDEm41U4GY6SqKSXtApDEeZK2qo,23084
|
28
|
-
|
29
|
-
|
30
|
-
open_edison-0.1.
|
31
|
-
open_edison-0.1.
|
32
|
-
open_edison-0.1.
|
33
|
-
open_edison-0.1.
|
31
|
+
src/setup_tui/__init__.py,sha256=mDFrQoiOtQOHc0sFfGKrNXVLEDeB1S0O5aISBVzfxYo,184
|
32
|
+
src/setup_tui/main.py,sha256=892X2KVKOYmKzUu1Ok8SnApNYxpcFHFHmFLvpPZP4qY,5501
|
33
|
+
open_edison-0.1.44.dist-info/METADATA,sha256=hY2fd8IeT-YeBAUjg_FBtpGf50VGOpgRp4xdBhx7ED4,12375
|
34
|
+
open_edison-0.1.44.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
35
|
+
open_edison-0.1.44.dist-info/entry_points.txt,sha256=YiGNm9x2I00hgT10HDyB4gxC1LcaV_mu8bXFjolu0Yw,171
|
36
|
+
open_edison-0.1.44.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
37
|
+
open_edison-0.1.44.dist-info/RECORD,,
|
src/cli.py
CHANGED
@@ -8,15 +8,15 @@ import argparse
|
|
8
8
|
import asyncio
|
9
9
|
import os
|
10
10
|
import subprocess as _subprocess
|
11
|
-
import sys
|
12
11
|
from contextlib import suppress
|
13
12
|
from pathlib import Path
|
14
|
-
from typing import Any, NoReturn
|
13
|
+
from typing import Any, NoReturn
|
15
14
|
|
16
15
|
from loguru import logger as _log # type: ignore[reportMissingImports]
|
17
16
|
|
18
|
-
from .config import Config, get_config_dir, get_config_json_path
|
19
|
-
from .
|
17
|
+
from src.config import Config, get_config_dir, get_config_json_path
|
18
|
+
from src.mcp_importer.cli import run_cli
|
19
|
+
from src.server import OpenEdisonProxy
|
20
20
|
|
21
21
|
log: Any = _log
|
22
22
|
|
@@ -45,7 +45,7 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
|
45
45
|
# import-mcp: import MCP servers from other tools into config.json
|
46
46
|
sp_import = subparsers.add_parser(
|
47
47
|
"import-mcp",
|
48
|
-
help="Import MCP servers from other tools (Cursor,
|
48
|
+
help="Import MCP servers from other tools (Cursor, VS Code, Claude Code)",
|
49
49
|
description=(
|
50
50
|
"Import MCP server configurations from other tools into Open Edison config.json.\n"
|
51
51
|
"Use --source to choose the tool and optional flags to control merging."
|
@@ -55,16 +55,10 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
|
55
55
|
"--source",
|
56
56
|
choices=[
|
57
57
|
"cursor",
|
58
|
-
"windsurf",
|
59
|
-
"cline",
|
60
|
-
"claude-desktop",
|
61
58
|
"vscode",
|
62
59
|
"claude-code",
|
63
|
-
"gemini-cli",
|
64
|
-
"codex",
|
65
|
-
"interactive",
|
66
60
|
],
|
67
|
-
default="
|
61
|
+
default="cursor",
|
68
62
|
help="Source application to import from",
|
69
63
|
)
|
70
64
|
sp_import.add_argument(
|
@@ -226,35 +220,8 @@ def main(argv: list[str] | None = None) -> NoReturn: # noqa: C901
|
|
226
220
|
raise SystemExit(exit_code)
|
227
221
|
|
228
222
|
if getattr(args, "command", None) == "import-mcp":
|
229
|
-
|
230
|
-
|
231
|
-
try:
|
232
|
-
if str(importer_pkg) not in sys.path:
|
233
|
-
sys.path.insert(0, str(importer_pkg))
|
234
|
-
from mcp_importer.cli import run_cli # type: ignore
|
235
|
-
except Exception as imp_exc: # noqa: BLE001
|
236
|
-
log.error(
|
237
|
-
"Failed to load MCP importer package from {}: {}",
|
238
|
-
importer_pkg,
|
239
|
-
imp_exc,
|
240
|
-
)
|
241
|
-
raise SystemExit(1) from imp_exc
|
242
|
-
|
243
|
-
importer_argv: list[str] = []
|
244
|
-
if args.source:
|
245
|
-
importer_argv += ["--source", str(args.source)]
|
246
|
-
if getattr(args, "config_dir", None):
|
247
|
-
importer_argv += [
|
248
|
-
"--config-dir",
|
249
|
-
str(Path(args.config_dir).expanduser().resolve()),
|
250
|
-
]
|
251
|
-
if args.merge:
|
252
|
-
importer_argv += ["--merge", str(args.merge)]
|
253
|
-
if bool(getattr(args, "dry_run", False)):
|
254
|
-
importer_argv += ["--dry-run"]
|
255
|
-
|
256
|
-
rc_val: int = int(cast(Any, run_cli)(importer_argv))
|
257
|
-
raise SystemExit(rc_val)
|
223
|
+
result_code = run_cli(argv)
|
224
|
+
raise SystemExit(result_code)
|
258
225
|
|
259
226
|
# default: run server (top-level flags)
|
260
227
|
try:
|