Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docker/pyproject.deps.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "mcp-plex"
version = "2.0.16"
version = "2.0.17"
requires-python = ">=3.11,<3.13"
dependencies = [
"fastmcp>=2.11.2",
Expand Down
21 changes: 21 additions & 0 deletions mcp_plex/server/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from __future__ import annotations

import argparse
import logging
import os
from dataclasses import dataclass

Expand Down Expand Up @@ -33,6 +34,17 @@ def to_kwargs(self) -> dict[str, object]:
return kwargs


def _resolve_log_level(cli_value: str | None) -> str:
"""Return the desired log level name based on CLI or environment input."""

env_value = os.getenv("LOG_LEVEL")
if cli_value:
return cli_value
if env_value:
return env_value.lower()
return "info"


def main(argv: list[str] | None = None) -> None:
"""CLI entrypoint for running the MCP server."""

Expand Down Expand Up @@ -61,6 +73,12 @@ def main(argv: list[str] | None = None) -> None:
default=settings.reranker_model,
help="Cross-encoder reranker model name (env: RERANKER_MODEL)",
)
parser.add_argument(
"--log-level",
type=str.lower,
choices=["critical", "error", "warning", "info", "debug", "notset"],
help="Logging verbosity (env: LOG_LEVEL)",
)
args = parser.parse_args(argv)

env_transport = os.getenv("MCP_TRANSPORT")
Expand Down Expand Up @@ -112,6 +130,9 @@ def main(argv: list[str] | None = None) -> None:
settings.sparse_model = args.sparse_model
settings.reranker_model = args.reranker_model

log_level_name = _resolve_log_level(args.log_level)
logging.basicConfig(level=getattr(logging, log_level_name.upper(), logging.INFO))

plex_server.run(transport=transport, **run_config.to_kwargs())


Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "mcp-plex"
version = "2.0.16"
version = "2.0.17"

description = "Plex-Oriented Model Context Protocol Server"
requires-python = ">=3.11,<3.13"
Expand Down
16 changes: 16 additions & 0 deletions tests/test_server_cli.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from unittest.mock import patch

import logging
import asyncio
import importlib
import pytest
Expand Down Expand Up @@ -125,3 +126,18 @@ def test_run_config_reexport():
from mcp_plex.server import RunConfig as ExportedRunConfig

assert ExportedRunConfig is server.RunConfig


def test_main_configures_log_level(monkeypatch):
configured: dict[str, object] = {}

def fake_basic_config(**kwargs):
configured["level"] = kwargs.get("level")

monkeypatch.setattr("logging.basicConfig", fake_basic_config)

with patch.object(server.server, "run") as mock_run:
server.main(["--log-level", "debug"])

assert configured["level"] == logging.DEBUG
mock_run.assert_called_once_with(transport="stdio")
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.