Get baseline 100% clean coverage (#1553)

This commit is contained in:
Max Isbey 2025-11-11 13:09:32 +00:00 • committed by GitHub
commit 89e9c43acf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 1032 additions and 1084 deletions

View file

@ -2,5 +2,5 @@
from .cli import app
if __name__ == "__main__":
if __name__ == "__main__": # pragma: no cover
app()

View file

@ -14,7 +14,7 @@ logger = get_logger(__name__)
MCP_PACKAGE = "mcp[cli]"
def get_claude_config_path() -> Path | None:
def get_claude_config_path() -> Path | None: # pragma: no cover
"""Get the Claude config directory based on platform."""
if sys.platform == "win32":
path = Path(Path.home(), "AppData", "Roaming", "Claude")
@ -33,7 +33,7 @@ def get_claude_config_path() -> Path | None:
def get_uv_path() -> str:
"""Get the full path to the uv executable."""
uv_path = shutil.which("uv")
if not uv_path:
if not uv_path: # pragma: no cover
logger.error(
"uv executable not found in PATH, falling back to 'uv'. Please ensure uv is installed and in your PATH"
)
@ -65,14 +65,14 @@ def update_claude_config(
"""
config_dir = get_claude_config_path()
uv_path = get_uv_path()
if not config_dir:
if not config_dir: # pragma: no cover
raise RuntimeError(
"Claude Desktop config directory not found. Please ensure Claude Desktop"
" is installed and has been run at least once to initialize its config."
)
config_file = config_dir / "claude_desktop_config.json"
if not config_file.exists():
if not config_file.exists(): # pragma: no cover
try:
config_file.write_text("{}")
except Exception:
@ -90,7 +90,7 @@ def update_claude_config(
config["mcpServers"] = {}
# Always preserve existing env vars and merge with new ones
if server_name in config["mcpServers"] and "env" in config["mcpServers"][server_name]:
if server_name in config["mcpServers"] and "env" in config["mcpServers"][server_name]: # pragma: no cover
existing_env = config["mcpServers"][server_name]["env"]
if env_vars:
# New vars take precedence over existing ones
@ -103,14 +103,14 @@ def update_claude_config(
# Collect all packages in a set to deduplicate
packages = {MCP_PACKAGE}
if with_packages:
if with_packages: # pragma: no cover
packages.update(pkg for pkg in with_packages if pkg)
# Add all packages with --with
for pkg in sorted(packages):
args.extend(["--with", pkg])
if with_editable:
if with_editable: # pragma: no cover
args.extend(["--with-editable", str(with_editable)])
# Convert file path to absolute before adding to command
@ -118,7 +118,7 @@ def update_claude_config(
if ":" in file_spec:
file_path, server_object = file_spec.rsplit(":", 1)
file_spec = f"{Path(file_path).resolve()}:{server_object}"
else:
else: # pragma: no cover
file_spec = str(Path(file_spec).resolve())
# Add fastmcp run command
@ -127,7 +127,7 @@ def update_claude_config(
server_config: dict[str, Any] = {"command": uv_path, "args": args}
# Add environment variables if specified
if env_vars:
if env_vars: # pragma: no cover
server_config["env"] = env_vars
config["mcpServers"][server_name] = server_config
@ -138,7 +138,7 @@ def update_claude_config(
extra={"config_file": str(config_file)},
)
return True
except Exception:
except Exception: # pragma: no cover
logger.exception(
"Failed to update Claude config",
extra={

View file

@ -13,20 +13,20 @@ from mcp.server import Server as LowLevelServer
try:
import typer
except ImportError:
except ImportError: # pragma: no cover
print("Error: typer is required. Install with 'pip install mcp[cli]'")
sys.exit(1)
try:
from mcp.cli import claude
from mcp.server.fastmcp.utilities.logging import get_logger
except ImportError:
except ImportError: # pragma: no cover
print("Error: mcp.server.fastmcp is not installed or not in PYTHONPATH")
sys.exit(1)
try:
import dotenv
except ImportError:
except ImportError: # pragma: no cover
dotenv = None
logger = get_logger("cli")
@ -53,7 +53,7 @@ def _get_npx_command():
return "npx" # On Unix-like systems, just use npx
def _parse_env_var(env_var: str) -> tuple[str, str]:
def _parse_env_var(env_var: str) -> tuple[str, str]: # pragma: no cover
"""Parse environment variable string in format KEY=VALUE."""
if "=" not in env_var:
logger.error(f"Invalid environment variable format: {env_var}. Must be KEY=VALUE")
@ -77,7 +77,7 @@ def _build_uv_command(
if with_packages:
for pkg in with_packages:
if pkg:
if pkg: # pragma: no cover
cmd.extend(["--with", pkg])
# Add mcp run command
@ -116,7 +116,7 @@ def _parse_file_path(file_spec: str) -> tuple[Path, str | None]:
return file_path, server_object
def _import_server(file: Path, server_object: str | None = None):
def _import_server(file: Path, server_object: str | None = None): # pragma: no cover
"""Import an MCP server from a file.
Args:
@ -209,7 +209,7 @@ def _import_server(file: Path, server_object: str | None = None):
@app.command()
def version() -> None:
def version() -> None: # pragma: no cover
"""Show the MCP version."""
try:
version = importlib.metadata.version("mcp")
@ -243,7 +243,7 @@ def dev(
help="Additional packages to install",
),
] = [],
) -> None:
) -> None: # pragma: no cover
"""Run an MCP server with the MCP Inspector."""
file, server_object = _parse_file_path(file_spec)
@ -316,7 +316,7 @@ def run(
help="Transport protocol to use (stdio or sse)",
),
] = None,
) -> None:
) -> None: # pragma: no cover
"""Run an MCP server.
The server can be specified in two ways:\n
@ -411,7 +411,7 @@ def install(
resolve_path=True,
),
] = None,
) -> None:
) -> None: # pragma: no cover
"""Install an MCP server in the Claude desktop app.
Environment variables are preserved once added and only updated if new values