Skip to content

Commit e959ecf

Browse files
authored
added claude code suppport (#180)
added claude code client
1 parent 1b05b55 commit e959ecf

File tree

5 files changed

+66
-1
lines changed

5 files changed

+66
-1
lines changed

src/mcpm/clients/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
from mcpm.clients.client_config import ClientConfigManager
99
from mcpm.clients.client_registry import ClientRegistry
1010
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
11+
from mcpm.clients.managers.claude_code import ClaudeCodeManager
1112
from mcpm.clients.managers.cursor import CursorManager
1213
from mcpm.clients.managers.trae import TraeManager
1314
from mcpm.clients.managers.windsurf import WindsurfManager
1415

1516
__all__ = [
1617
"BaseClientManager",
1718
"ClaudeDesktopManager",
19+
"ClaudeCodeManager",
1820
"WindsurfManager",
1921
"CursorManager",
2022
"TraeManager",

src/mcpm/clients/client_registry.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from mcpm.clients.client_config import ClientConfigManager
1111

1212
# Import all client managers
13+
from mcpm.clients.managers.claude_code import ClaudeCodeManager
1314
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
1415
from mcpm.clients.managers.cline import ClineManager, RooCodeManager
1516
from mcpm.clients.managers.continue_extension import ContinueManager
@@ -34,6 +35,7 @@ class ClientRegistry:
3435

3536
# Dictionary mapping client keys to manager instances
3637
_CLIENT_MANAGERS = {
38+
"claude-code": ClaudeCodeManager(),
3739
"claude-desktop": ClaudeDesktopManager(),
3840
"windsurf": WindsurfManager(),
3941
"cursor": CursorManager(),

src/mcpm/clients/managers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
This package contains specific implementations of client managers for MCP clients.
55
"""
66

7+
from mcpm.clients.managers.claude_code import ClaudeCodeManager
78
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
89
from mcpm.clients.managers.cline import ClineManager
910
from mcpm.clients.managers.continue_extension import ContinueManager
@@ -14,6 +15,7 @@
1415
from mcpm.clients.managers.windsurf import WindsurfManager
1516

1617
__all__ = [
18+
"ClaudeCodeManager",
1719
"ClaudeDesktopManager",
1820
"CursorManager",
1921
"WindsurfManager",
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
Claude Code CLI integration utilities for MCP
3+
"""
4+
5+
import logging
6+
import os
7+
import shutil
8+
from typing import Any, Dict
9+
10+
from mcpm.clients.base import JSONClientManager
11+
12+
logger = logging.getLogger(__name__)
13+
14+
15+
class ClaudeCodeManager(JSONClientManager):
16+
"""Manages Claude Code CLI MCP server configurations"""
17+
18+
# Client information
19+
client_key = "claude-code"
20+
display_name = "Claude Code"
21+
download_url = "https://docs.anthropic.com/en/docs/claude-code"
22+
23+
def __init__(self, config_path=None):
24+
"""Initialize the Claude Code client manager
25+
26+
Args:
27+
config_path: Optional path to the config file. If not provided, uses default path.
28+
"""
29+
super().__init__()
30+
31+
if config_path:
32+
self.config_path = config_path
33+
else:
34+
self.config_path = os.path.expanduser("~/.claude.json")
35+
36+
def _get_empty_config(self) -> Dict[str, Any]:
37+
"""Get empty config structure for Claude Code"""
38+
return {"mcpServers": {}}
39+
40+
def is_client_installed(self) -> bool:
41+
"""Check if Claude Code CLI is installed
42+
Returns:
43+
bool: True if claude command is available, False otherwise
44+
"""
45+
claude_executable = "claude.exe" if self._system == "Windows" else "claude"
46+
return shutil.which(claude_executable) is not None
47+
48+
def get_client_info(self) -> Dict[str, str]:
49+
"""Get information about this client
50+
51+
Returns:
52+
Dict: Information about the client including display name, download URL, and config path
53+
"""
54+
return {
55+
"name": self.display_name,
56+
"download_url": self.download_url,
57+
"config_file": self.config_path,
58+
"description": "Anthropic's Claude Code CLI tool"
59+
}

src/mcpm/router/router.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
Router implementation for aggregating multiple MCP servers into a single server.
33
"""
44

5+
import asyncio
56
import logging
67
import typing as t
78
from collections import defaultdict
89
from contextlib import asynccontextmanager
910
from typing import Literal, Optional, Sequence, TextIO
10-
import asyncio
1111

1212
import uvicorn
1313
from deprecated import deprecated

0 commit comments

Comments
 (0)