From c51a93e787033d166311189778684032bfb9a143 Mon Sep 17 00:00:00 2001 From: Jun Zhou Date: Tue, 4 Aug 2026 14:32:32 -0700 Subject: [PATCH] fix(mcp): report our own version in the MCP handshake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `MCPServer`'s `version` parameter defaults to `""`, so the daemon-backed server advertised an empty `serverInfo.version`. Under the v1 SDK the field was auto-filled with the SDK's own version, which was already the wrong number to report — clients saw the MCP SDK release, not ours. Pass `_version.__version__`, the same value `ccc version`, the daemon handshake, and the version-mismatch check already use. --- src/cocoindex_code/server.py | 3 ++- tests/test_server.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cocoindex_code/server.py b/src/cocoindex_code/server.py index ac6eacf..1edba8e 100644 --- a/src/cocoindex_code/server.py +++ b/src/cocoindex_code/server.py @@ -17,6 +17,7 @@ from mcp.server.mcpserver import MCPServer from pydantic import BaseModel, Field +from ._version import __version__ from .settings import DaemonSettings, load_user_settings _MCP_INSTRUCTIONS = ( @@ -60,7 +61,7 @@ class SearchResultModel(BaseModel): def create_mcp_server(project_root: str) -> MCPServer: """Create a lightweight MCP server that delegates to the daemon.""" - mcp = MCPServer("cocoindex-code", instructions=_MCP_INSTRUCTIONS) + mcp = MCPServer("cocoindex-code", instructions=_MCP_INSTRUCTIONS, version=__version__) @mcp.tool( name="search", diff --git a/tests/test_server.py b/tests/test_server.py index c60b74b..4248e39 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -2,6 +2,7 @@ from mcp import Client from cocoindex_code import client as daemon_client +from cocoindex_code._version import __version__ from cocoindex_code.protocol import SearchResponse from cocoindex_code.server import create_mcp_server @@ -29,3 +30,12 @@ async def test_mcp_server_uses_v2_protocol(monkeypatch: pytest.MonkeyPatch) -> N "offset": 0, "message": None, } + + +async def test_mcp_server_reports_own_version() -> None: + """The handshake advertises our version, not the SDK's or an empty string.""" + server = create_mcp_server(".") + async with Client(server, raise_exceptions=True) as client: + assert client.server_info is not None + assert client.server_info.name == "cocoindex-code" + assert client.server_info.version == __version__