diff --git a/src/everos_mcp/server.py b/src/everos_mcp/server.py index 3b3fc65..3c3034c 100644 --- a/src/everos_mcp/server.py +++ b/src/everos_mcp/server.py @@ -19,6 +19,7 @@ from starlette.responses import JSONResponse, PlainTextResponse, Response from starlette.types import ASGIApp, Message, Receive, Scope, Send +from . import __version__ from .client import EverOSClient, EverOSError, now_ms from .config import ConfigError, Settings, base_url_from_env from .conversation import Conversation, ConversationRegistry @@ -88,6 +89,9 @@ def _data(body: str) -> str: _registry: ConversationRegistry | None = None mcp = FastMCP(name="everos", instructions=INSTRUCTIONS) +# FastMCP takes no version, so without this the handshake reports the mcp +# library's own version as ours. +mcp._mcp_server.version = __version__ def _local_conversation() -> Conversation: diff --git a/tests/test_everos_mcp.py b/tests/test_everos_mcp.py index 7e98b4c..44c0a7f 100644 --- a/tests/test_everos_mcp.py +++ b/tests/test_everos_mcp.py @@ -11,7 +11,7 @@ import httpx import pytest -from everos_mcp import server +from everos_mcp import __version__, server from everos_mcp.client import EverOSClient, EverOSError from everos_mcp.config import ConfigError, Settings from everos_mcp.conversation import Conversation, ConversationRegistry @@ -406,6 +406,12 @@ def test_tools_registered_with_annotations(): assert tools["add_memory"].annotations.destructiveHint is False +def test_handshake_reports_package_version(): + options = mcp._mcp_server.create_initialization_options() + assert options.server_name == "everos" + assert options.server_version == __version__ + + def test_tool_descriptions_keep_model_guidance(): """Tool descriptions are our API to the model — losing a guidance phrase is a regression nothing else would catch."""