Skip to main content
Glama
CLAUDE.md8.33 kB
# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is a Model Context Protocol (MCP) server for the game "鸣潮" (Wuthering Waves) that provides character and artifact information in Markdown format, optimized for Large Language Model consumption. The project uses **uv** for package management and requires Python ≥3.12. ## Development Commands ### Setup and Installation ```bash # Install dependencies using uv uv sync # Install development dependencies (including ruff for linting) uv sync --extra dev # Install in development mode using uv uv pip install -e . # Alternative: Install directly from PyPI using uv uv pip install wuwa-mcp-server ``` ### Running the Server ```bash # Run the MCP server locally for testing uv run python -m wuwa_mcp_server.server # Or run with uvx (recommended for end users) uvx wuwa-mcp-server ``` ### Build and Package ```bash # Build the package using uv uv build # Alternative: Build using standard Python tools python -m pip install build python -m build ``` ### Code Quality ```bash # Format all Python code uv run ruff format . # Check for code issues uv run ruff check . # Automatically fix fixable issues uv run ruff check --fix . ``` ### Docker ```bash # Build Docker image docker build -t wuwa-mcp-server . # Run Docker container (HTTP mode) docker run -p 8081:8000 wuwa-mcp-server # Run Docker container (STDIO mode) docker run -e TRANSPORT=stdio wuwa-mcp-server ``` ### Publishing - Releases are automatically published to PyPI via GitHub Actions when a release is created - Package is available via Smithery registry for easy installation ## Architecture Overview The project follows a **Domain-Driven Design (DDD)** architecture with clear separation of concerns: ### Core Components 1. **Server (`server.py`)** - FastMCP-based MCP server with three main tools - Dependency Injection container for service management - Handles both STDIO and HTTP transport modes - Main entry point: `main()` function 2. **Core Layer (`core/`)** - **Configuration**: Application settings and HTTP client configuration - **Dependency Injection**: DIContainer for managing service dependencies - **Interfaces**: Protocols defining contracts for repositories and services - **Exceptions**: Custom exception hierarchy for error handling - **Logging**: Structured logging configuration 3. **Domain Layer (`domain/`)** - **Entities**: Character, Artifact, and MarkdownDocument domain objects - **Value Objects**: Strongly-typed identifiers and data structures - Pure business logic with no external dependencies 4. **Infrastructure Layer (`infrastructure/`)** - **API Client**: KuroAPIClient for Kuro BBS Wiki API communication - **HTTP Client**: Low-level HTTP communication with retry logic - **Repositories**: Data access implementations for characters and artifacts 5. **Services Layer (`services/`)** - **Character Service**: Business logic for character data processing - **Artifact Service**: Business logic for artifact data processing - **Markdown Service**: Converts processed data to optimized Markdown 6. **Parsers (`parsers/`)** - **Content Parser**: Converts JSON/HTML data to structured format - **HTML Converter**: BeautifulSoup-based HTML to Markdown conversion - **Strategy Pattern**: Different parsing strategies for various content types 7. **Builders (`builders/`)** - **Markdown Builder**: Builder pattern for flexible document construction - **Markdown Formatter**: Handles tables, lists, and formatting ### Data Flow 1. **Character Info**: `get_character_info()` → Fetch character list → Find match → Get profile data → Extract strategy ID → Parallel fetch strategy + parse profile → Combine Markdown 2. **Artifact Info**: `get_artifact_info()` → Fetch artifact list → Find match → Get detail data → Parse → Generate Markdown 3. **Character Profile**: `get_character_profile()` → Same as character info but only profile data ### Key Design Patterns - **Async Context Managers**: `KuroWikiApiClient` uses `__aenter__`/`__aexit__` - **Parallel Processing**: Character info fetches strategy data while parsing profile - **Thread Pool**: CPU-intensive parsing uses `asyncio.to_thread()` - **Error Handling**: Graceful fallbacks with Chinese error messages ## MCP Tools Available ### 1. get_character_info ```python async def get_character_info(character_name: str) -> str ``` - Comprehensive character data including skills, development guides, and strategy - Combines profile and strategy content in single response - **Parameter**: `character_name` - Chinese name of the character to query - **Returns**: Markdown string with character information ### 2. get_artifact_info ```python async def get_artifact_info(artifact_name: str) -> str ``` - Detailed artifact set (声骸) information and stats - **Parameter**: `artifact_name` - Chinese name of the artifact set to query - **Returns**: Markdown string with artifact information ### 3. get_character_profile ```python async def get_character_profile(character_name: str) -> str ``` - Character profile/档案 information only (subset of full character info) - Lighter weight alternative to full character info - **Parameter**: `character_name` - Chinese name of the character to query - **Returns**: Markdown string with character profile information ## Installation for End Users ### Via Smithery (Recommended) ```bash npx -y @smithery/cli@latest install @jacksmith3888/wuwa-mcp-server --client claude --key YOUR_SMITHERY_KEY ``` ### Via uv ```bash uv pip install wuwa-mcp-server ``` ### Claude Desktop Configuration Add to `claude_desktop_config.json`: ```json { "mcpServers": { "wuwa-mcp": { "command": "uvx", "args": ["wuwa-mcp-server"] } } } ``` ### Cherry Studio Configuration ```json { "mcpServers": { "wuwa-mcp": { "command": "uvx", "args": ["wuwa-mcp-server"] } } } ``` ## Configuration Files - **pyproject.toml**: Python packaging with uv support, requires Python ≥3.12 - **uv.lock**: Dependency lock file for reproducible builds - **.python-version**: Specifies Python 3.12 requirement - **smithery.yaml**: Smithery MCP registry configuration - **Dockerfile**: Multi-stage build with uv optimization for containerized deployment - **.github/workflows/python-publish.yml**: Automated PyPI publishing on release ## Development Notes - Project uses **uv** for package management, not pip - **Code Quality**: Uses **ruff** for linting and formatting with Python 3.12+ modern syntax - Line length: 120 characters - Modern type annotations (dict/list instead of Dict/List) - Import sorting with single-line imports - Comprehensive rule set: pycodestyle, pyflakes, isort, naming, pyupgrade, bugbear, etc. - Multi-stage Docker build optimized with uv for faster builds and smaller images - Smithery deployment configured for custom container runtime with HTTP transport - No tests currently exist in the codebase - Error messages are in Chinese for user-facing responses - Debug prints are in English for development - All API responses use Chinese field names and content - FastMCP handles the MCP protocol implementation - HTTP timeout set to 30 seconds for API calls - Data source: 库街区 (Kujiequ) API at `https://api.kurobbs.com/wiki/core/catalogue/item` ## Recent Updates (v2.0.1) - **Architecture Refactor**: Complete rewrite using Domain-Driven Design (DDD) with layered architecture - **Code Quality**: Added ruff for linting and formatting with comprehensive rule set - **Modern Python**: Updated to use Python 3.12+ features and modern type annotations - **Dependency Injection**: Implemented DI container for better service management - **Legacy Cleanup**: Removed old implementation files and consolidated functionality - **Smithery Configuration**: Fixed `smithery.yaml` for proper custom container deployment - **Docker Optimization**: Updated Dockerfile to use uv with multi-stage build for better performance - **Port Configuration**: Fixed HTTP server to bind to `0.0.0.0:8081` for container compatibility - **Transport Handling**: Improved environment variable handling for both STDIO and HTTP modes

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jacksmith3888/wuwa-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server