Skip to content

Commit 4dc6cd5

Browse files
test: add test case
1 parent da3a2f3 commit 4dc6cd5

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

src/mcpm/clients/managers/claude_desktop.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
import logging
66
import os
7-
from typing import Any, Dict, override
7+
from typing import Any, Dict
88

99
from mcpm.clients.base import JSONClientManager
10-
from mcpm.schemas.server_config import ServerConfig, SSEServerConfig, STDIOServerConfig
10+
from mcpm.schemas.server_config import ServerConfig, SSEServerConfig
1111
from mcpm.utils.router_server import format_server_url_with_proxy_headers
1212

1313
logger = logging.getLogger(__name__)
@@ -116,18 +116,8 @@ def is_server_disabled(self, server_name: str) -> bool:
116116
def _format_router_server(self, profile_name, base_url) -> ServerConfig:
117117
return format_server_url_with_proxy_headers(self.client_key, profile_name, base_url)
118118

119-
@override
120119
def to_client_format(self, server_config: ServerConfig) -> Dict[str, Any]:
121120
if isinstance(server_config, SSEServerConfig):
122121
# use mcp proxy to convert to stdio as sse is not supported for claude desktop yet
123-
return self.to_client_format(
124-
STDIOServerConfig(
125-
name=server_config.name,
126-
command="uvx",
127-
args=[
128-
"mcp-proxy",
129-
server_config.url,
130-
],
131-
)
132-
)
122+
return self.to_client_format(server_config.to_mcp_proxy_stdio())
133123
return super().to_client_format(server_config)

src/mcpm/schemas/server_config.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,22 @@ class SSEServerConfig(BaseServerConfig):
5757
url: str
5858
headers: Dict[str, Any] = {}
5959

60+
def to_mcp_proxy_stdio(self) -> STDIOServerConfig:
61+
proxy_args = [
62+
"mcp-proxy",
63+
self.url,
64+
]
65+
if self.headers:
66+
proxy_args.append("--headers")
67+
for key, value in self.headers.items():
68+
proxy_args.append(f"{key}")
69+
proxy_args.append(f"{value}")
70+
71+
return STDIOServerConfig(
72+
name=self.name,
73+
command="uvx",
74+
args=proxy_args,
75+
)
76+
6077

6178
ServerConfig = Union[STDIOServerConfig, SSEServerConfig]

tests/conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# Add the src directory to the path for all tests
1414
sys.path.insert(0, str(Path(__file__).parent.parent))
1515

16+
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
1617
from mcpm.clients.managers.windsurf import WindsurfManager
1718
from mcpm.utils.config import ConfigManager
1819

@@ -67,3 +68,9 @@ def windsurf_manager(temp_config_file):
6768
def empty_windsurf_manager(empty_config_file):
6869
"""Create a WindsurfManager instance with an empty config"""
6970
return WindsurfManager(config_path=empty_config_file)
71+
72+
73+
@pytest.fixture
74+
def claude_desktop_manager(temp_config_file):
75+
"""Create a ClaudeDesktopManager instance with the temp config"""
76+
return ClaudeDesktopManager(config_path=temp_config_file)

tests/test_add.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from mcpm.clients.client_registry import ClientRegistry
66
from mcpm.commands.server_operations.add import add
7+
from mcpm.schemas.server_config import SSEServerConfig
78
from mcpm.utils.repository import RepositoryManager
89

910

@@ -186,3 +187,22 @@ def test_add_server_with_empty_args(windsurf_manager, monkeypatch):
186187
"API_KEY": "test-api-key",
187188
"OPTIONAL_ENV": "", # Optional env var should be empty string
188189
}
190+
191+
192+
def test_add_sse_server_to_claude_desktop(claude_desktop_manager, monkeypatch):
193+
"""Test add sse server to claude desktop"""
194+
server_config = SSEServerConfig(
195+
name="test-sse-server", url="http://localhost:8080", headers={"Authorization": "Bearer test-api-key"}
196+
)
197+
claude_desktop_manager.add_server(server_config)
198+
stored_config = claude_desktop_manager.get_server("test-sse-server")
199+
assert stored_config is not None
200+
assert stored_config.name == "test-sse-server"
201+
assert stored_config.command == "uvx"
202+
assert stored_config.args == [
203+
"mcp-proxy",
204+
"http://localhost:8080",
205+
"--headers",
206+
"Authorization",
207+
"Bearer test-api-key",
208+
]

0 commit comments

Comments
 (0)