Skip to content
Closed
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
11 changes: 10 additions & 1 deletion analytics_mcp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"""Entry point for the Google Analytics MCP server."""

import asyncio
from importlib import metadata
import sys
import analytics_mcp.coordinator as coordinator
from mcp.server.lowlevel import NotificationOptions
Expand All @@ -26,6 +27,14 @@
import traceback


def _server_version() -> str:
"""Returns the installed package version with a safe fallback."""
try:
return metadata.version("analytics-mcp")
except metadata.PackageNotFoundError:
return "unknown"


async def run_server_async():
"""Runs the MCP server over standard I/O."""
print("Starting MCP Stdio Server:", coordinator.app.name, file=sys.stderr)
Expand All @@ -35,7 +44,7 @@ async def run_server_async():
write_stream,
InitializationOptions(
server_name=coordinator.app.name, # Use the server name defined above
server_version="1.0.0",
server_version=_server_version(),
capabilities=coordinator.app.get_capabilities(
# Define server capabilities - consult MCP docs for options
notification_options=NotificationOptions(),
Expand Down
21 changes: 21 additions & 0 deletions tests/server_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import unittest
from unittest.mock import patch

from analytics_mcp import server


class ServerVersionTest(unittest.TestCase):
@patch("analytics_mcp.server.metadata.version", return_value="0.6.0")
def test_server_version_uses_installed_package_version(self, version_mock):
self.assertEqual(server._server_version(), "0.6.0")
version_mock.assert_called_once_with("analytics-mcp")

@patch(
"analytics_mcp.server.metadata.version",
side_effect=server.metadata.PackageNotFoundError,
)
def test_server_version_falls_back_when_package_metadata_missing(
self, version_mock
):
self.assertEqual(server._server_version(), "unknown")
version_mock.assert_called_once_with("analytics-mcp")