From 69ab73dc7f3cff6747d47cb7218006dba24b21b9 Mon Sep 17 00:00:00 2001 From: Yu-0312 <2.66498311e+08+Yu-0312@users.noreply.github.com> Date: Mon, 24 Aug 2026 07:25:32 +0000 Subject: [PATCH] fix(mcp): report Serena version in initialize --- CHANGELOG.md | 1 + src/serena/mcp.py | 4 ++++ test/serena/test_mcp.py | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6dec0e2a..8d062e28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Status of the `main` branch. Changes prior to the next official version change will appear here. * General: + - Fix: MCP `initialize` now reports Serena's version instead of the installed mcp SDK version (#1889) - Fix: Parallel agents auto-registering projects could overwrite each other's changes to the global project list in `serena_config.yml` - Fix: `read_only` restriction in project definition was not applied to base tool set when in single-project context (#1938) diff --git a/src/serena/mcp.py b/src/serena/mcp.py index 12aa3312..9d3da8f2 100644 --- a/src/serena/mcp.py +++ b/src/serena/mcp.py @@ -20,6 +20,7 @@ from mcp.types import ToolAnnotations from pydantic_settings import SettingsConfigDict from sensai.util import logging +from serena import __version__ from serena.agent import ( SerenaAgent, ) @@ -390,6 +391,9 @@ class SerenaMCPFactory: port=port, instructions=instructions, ) + # FastMCP currently falls back to the installed mcp SDK version when no version is set. + # Set the low-level server value explicitly so MCP clients identify Serena correctly. + mcp._mcp_server.version = __version__ return mcp @asynccontextmanager diff --git a/test/serena/test_mcp.py b/test/serena/test_mcp.py index 731a1cc6..db1923fd 100644 --- a/test/serena/test_mcp.py +++ b/test/serena/test_mcp.py @@ -3,8 +3,10 @@ import pytest from mcp.server.fastmcp.tools.base import Tool as MCPTool +from serena import __version__ from serena.agent import Tool, ToolRegistry from serena.config.context_mode import SerenaAgentContext +from serena.config.serena_config import SerenaConfig from serena.mcp import SerenaMCPFactory make_tool = SerenaMCPFactory.make_mcp_tool @@ -50,6 +52,24 @@ class BasicTool(BaseMockTool): return self.apply(**kwargs) +def test_create_mcp_server_reports_serena_version(monkeypatch: pytest.MonkeyPatch) -> None: + """MCP initialize must report Serena's version, not the installed mcp SDK version.""" + + class MinimalAgent: + def create_connection_prompt(self) -> str: + return "" + + monkeypatch.setattr(SerenaConfig, "from_config_file", classmethod(lambda cls: SerenaConfig())) + factory = SerenaMCPFactory(transport="stdio") + monkeypatch.setattr(factory, "_create_serena_agent", lambda *args, **kwargs: MinimalAgent()) + + mcp_server = factory.create_mcp_server() + initialization_options = mcp_server._mcp_server.create_initialization_options() + + assert initialization_options.server_name == "Serena" + assert initialization_options.server_version == __version__ + + def test_make_tool_basic() -> None: """Test that make_tool correctly creates an MCP tool from a Tool object.""" mock_tool = BasicTool()