From 3af254213b20c8d0540490eaa0476a77dc57910c Mon Sep 17 00:00:00 2001 From: juandresrodca Date: Sat, 27 Jun 2026 21:42:39 +0100 Subject: [PATCH] fix(mcp): repackage transilience-vuln to avoid bare 'server' module - Fixes #19 The package shipped a top-level `server` module (`py-modules = ["server"]` + `transilience-vuln-mcp = "server:cli"`), which installs a bare `server` module into site-packages and collides with anything else that does the same. Repackage as a proper namespace package: - Move `server.py` -> `transilience_vuln_mcp/server.py`. - Add `transilience_vuln_mcp/__init__.py` re-exporting `cli`/`main`/`server`. - `[project.scripts]`: `server:cli` -> `transilience_vuln_mcp:cli`. - `[tool.setuptools]`: replace `py-modules = ["server"]` with the explicit `packages = ["transilience_vuln_mcp"]`. - README + claude_desktop_config.snippet.json: update the `server.py` path and the smoke-test command (`python -m transilience_vuln_mcp.server`). No behavior change for end users beyond the file path in the Claude Desktop config. Verified `from transilience_vuln_mcp import cli` resolves and `cli` is callable, so the console-script entry point is intact. --- mcp/transilience-vuln/README.md | 7 ++++--- .../claude_desktop_config.snippet.json | 2 +- mcp/transilience-vuln/pyproject.toml | 4 ++-- .../transilience_vuln_mcp/__init__.py | 10 ++++++++++ .../{ => transilience_vuln_mcp}/server.py | 0 5 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 mcp/transilience-vuln/transilience_vuln_mcp/__init__.py rename mcp/transilience-vuln/{ => transilience_vuln_mcp}/server.py (100%) diff --git a/mcp/transilience-vuln/README.md b/mcp/transilience-vuln/README.md index d0067eb..8d4ed0d 100644 --- a/mcp/transilience-vuln/README.md +++ b/mcp/transilience-vuln/README.md @@ -60,7 +60,7 @@ two `/ABSOLUTE/PATH/TO/...` placeholders and your API key: "mcpServers": { "transilience-vuln": { "command": "/ABSOLUTE/PATH/TO/communitytools/mcp/transilience-vuln/.venv/bin/python", - "args": ["/ABSOLUTE/PATH/TO/communitytools/mcp/transilience-vuln/server.py"], + "args": ["/ABSOLUTE/PATH/TO/communitytools/mcp/transilience-vuln/transilience_vuln_mcp/server.py"], "env": { "TRANSILIENCE_API_KEY": "your-actual-key-here", "TRANSILIENCE_RATE_LIMIT": "18" @@ -72,7 +72,8 @@ two `/ABSOLUTE/PATH/TO/...` placeholders and your API key: Use absolute paths for both `command` and `args` — Claude Desktop does not honor your shell's `PATH`. On Windows the Python binary is -`...\.venv\Scripts\python.exe`. +`...\.venv\Scripts\python.exe` and the server module is +`...\transilience_vuln_mcp\server.py`. Quit Claude Desktop completely (not just close the window) and relaunch. @@ -92,7 +93,7 @@ The most common failure is a wrong path to Python or to `server.py`. ## Smoke test from the command line ```bash -TRANSILIENCE_API_KEY=your-key python server.py +TRANSILIENCE_API_KEY=your-key python -m transilience_vuln_mcp.server ``` The server will sit on stdio waiting for JSON-RPC. You should see diff --git a/mcp/transilience-vuln/claude_desktop_config.snippet.json b/mcp/transilience-vuln/claude_desktop_config.snippet.json index c7e2227..3bf8532 100644 --- a/mcp/transilience-vuln/claude_desktop_config.snippet.json +++ b/mcp/transilience-vuln/claude_desktop_config.snippet.json @@ -2,7 +2,7 @@ "mcpServers": { "transilience-vuln": { "command": "/ABSOLUTE/PATH/TO/communitytools/mcp/transilience-vuln/.venv/bin/python", - "args": ["/ABSOLUTE/PATH/TO/communitytools/mcp/transilience-vuln/server.py"], + "args": ["/ABSOLUTE/PATH/TO/communitytools/mcp/transilience-vuln/transilience_vuln_mcp/server.py"], "env": { "TRANSILIENCE_API_KEY": "PUT-YOUR-KEY-HERE", "TRANSILIENCE_RATE_LIMIT": "18" diff --git a/mcp/transilience-vuln/pyproject.toml b/mcp/transilience-vuln/pyproject.toml index ac85b78..8cf5caa 100644 --- a/mcp/transilience-vuln/pyproject.toml +++ b/mcp/transilience-vuln/pyproject.toml @@ -28,11 +28,11 @@ Issues = "https://github.com/transilienceai/communitytools/issues" API = "https://transilienceapi.com" [project.scripts] -transilience-vuln-mcp = "server:cli" +transilience-vuln-mcp = "transilience_vuln_mcp:cli" [build-system] requires = ["setuptools>=61"] build-backend = "setuptools.build_meta" [tool.setuptools] -py-modules = ["server"] +packages = ["transilience_vuln_mcp"] diff --git a/mcp/transilience-vuln/transilience_vuln_mcp/__init__.py b/mcp/transilience-vuln/transilience_vuln_mcp/__init__.py new file mode 100644 index 0000000..3769218 --- /dev/null +++ b/mcp/transilience-vuln/transilience_vuln_mcp/__init__.py @@ -0,0 +1,10 @@ +"""Transilience Vulnerability MCP server package. + +Re-exports the console-script entry point (`cli`) and the underlying +`main` coroutine / `server` instance so they are importable from the +package root, e.g. `from transilience_vuln_mcp import cli`. +""" + +from .server import cli, main, server + +__all__ = ["cli", "main", "server"] diff --git a/mcp/transilience-vuln/server.py b/mcp/transilience-vuln/transilience_vuln_mcp/server.py similarity index 100% rename from mcp/transilience-vuln/server.py rename to mcp/transilience-vuln/transilience_vuln_mcp/server.py