|
6 | 6 | import subprocess |
7 | 7 | import sys |
8 | 8 | from pathlib import Path |
9 | | -from typing import Annotated, Any |
| 9 | +from typing import Annotated, Any, Literal |
10 | 10 |
|
11 | 11 | from mcp.server import MCPServer |
12 | 12 | from mcp.server import Server as LowLevelServer |
|
19 | 19 |
|
20 | 20 | try: |
21 | 21 | from mcp.cli import claude |
22 | | - from mcp.server.mcpserver.utilities.logging import get_logger |
| 22 | + from mcp.server.mcpserver.utilities.logging import configure_logging, get_logger |
23 | 23 | except ImportError: # pragma: no cover |
24 | 24 | print("Error: mcp.server is not installed or not in PYTHONPATH") |
25 | 25 | sys.exit(1) |
|
31 | 31 |
|
32 | 32 | logger = get_logger("cli") |
33 | 33 |
|
| 34 | +LogLevel = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] |
| 35 | + |
34 | 36 | app = typer.Typer( |
35 | 37 | name="mcp", |
36 | 38 | help="MCP development tools", |
@@ -116,6 +118,14 @@ def _parse_file_path(file_spec: str) -> tuple[Path, str | None]: |
116 | 118 | return file_path, server_object |
117 | 119 |
|
118 | 120 |
|
| 121 | +def _get_server_log_level(server: Any) -> LogLevel: |
| 122 | + settings = getattr(server, "settings", None) |
| 123 | + log_level = getattr(settings, "log_level", "INFO") |
| 124 | + if log_level in ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"): |
| 125 | + return log_level |
| 126 | + return "INFO" |
| 127 | + |
| 128 | + |
119 | 129 | def _import_server(file: Path, server_object: str | None = None): # pragma: no cover |
120 | 130 | """Import an MCP server from a file. |
121 | 131 |
|
@@ -340,6 +350,8 @@ def run( |
340 | 350 | # Import and get server object |
341 | 351 | server = _import_server(file, server_object) |
342 | 352 |
|
| 353 | + configure_logging(_get_server_log_level(server)) |
| 354 | + |
343 | 355 | # Run the server |
344 | 356 | kwargs = {} |
345 | 357 | if transport: |
|
0 commit comments