Skip to content
Merged
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
2 changes: 2 additions & 0 deletions src/mcpm/clients/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
from mcpm.clients.client_config import ClientConfigManager
from mcpm.clients.client_registry import ClientRegistry
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
from mcpm.clients.managers.claude_code import ClaudeCodeManager
from mcpm.clients.managers.cursor import CursorManager
from mcpm.clients.managers.trae import TraeManager
from mcpm.clients.managers.windsurf import WindsurfManager

__all__ = [
"BaseClientManager",
"ClaudeDesktopManager",
"ClaudeCodeManager",
"WindsurfManager",
"CursorManager",
"TraeManager",
Expand Down
2 changes: 2 additions & 0 deletions src/mcpm/clients/client_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from mcpm.clients.client_config import ClientConfigManager

# Import all client managers
from mcpm.clients.managers.claude_code import ClaudeCodeManager
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
from mcpm.clients.managers.cline import ClineManager, RooCodeManager
from mcpm.clients.managers.continue_extension import ContinueManager
Expand All @@ -34,6 +35,7 @@ class ClientRegistry:

# Dictionary mapping client keys to manager instances
_CLIENT_MANAGERS = {
"claude-code": ClaudeCodeManager(),
"claude-desktop": ClaudeDesktopManager(),
"windsurf": WindsurfManager(),
"cursor": CursorManager(),
Expand Down
2 changes: 2 additions & 0 deletions src/mcpm/clients/managers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
This package contains specific implementations of client managers for MCP clients.
"""

from mcpm.clients.managers.claude_code import ClaudeCodeManager
from mcpm.clients.managers.claude_desktop import ClaudeDesktopManager
from mcpm.clients.managers.cline import ClineManager
from mcpm.clients.managers.continue_extension import ContinueManager
Expand All @@ -14,6 +15,7 @@
from mcpm.clients.managers.windsurf import WindsurfManager

__all__ = [
"ClaudeCodeManager",
"ClaudeDesktopManager",
"CursorManager",
"WindsurfManager",
Expand Down
59 changes: 59 additions & 0 deletions src/mcpm/clients/managers/claude_code.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
"""
Claude Code CLI integration utilities for MCP
"""

import logging
import os
import shutil
from typing import Any, Dict

from mcpm.clients.base import JSONClientManager

logger = logging.getLogger(__name__)


class ClaudeCodeManager(JSONClientManager):
"""Manages Claude Code CLI MCP server configurations"""

# Client information
client_key = "claude-code"
display_name = "Claude Code"
download_url = "https://docs.anthropic.com/en/docs/claude-code"

def __init__(self, config_path=None):
"""Initialize the Claude Code client manager

Args:
config_path: Optional path to the config file. If not provided, uses default path.
"""
super().__init__()

if config_path:
self.config_path = config_path
else:
self.config_path = os.path.expanduser("~/.claude.json")

def _get_empty_config(self) -> Dict[str, Any]:
"""Get empty config structure for Claude Code"""
return {"mcpServers": {}}

def is_client_installed(self) -> bool:
"""Check if Claude Code CLI is installed
Returns:
bool: True if claude command is available, False otherwise
"""
claude_executable = "claude.exe" if self._system == "Windows" else "claude"
return shutil.which(claude_executable) is not None

def get_client_info(self) -> Dict[str, str]:
"""Get information about this client

Returns:
Dict: Information about the client including display name, download URL, and config path
"""
return {
"name": self.display_name,
"download_url": self.download_url,
"config_file": self.config_path,
"description": "Anthropic's Claude Code CLI tool"
}
2 changes: 1 addition & 1 deletion src/mcpm/router/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
Router implementation for aggregating multiple MCP servers into a single server.
"""

import asyncio
import logging
import typing as t
from collections import defaultdict
from contextlib import asynccontextmanager
from typing import Literal, Optional, Sequence, TextIO
import asyncio

import uvicorn
from deprecated import deprecated
Expand Down