33 lines
1.4 KiB
Markdown
33 lines
1.4 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
# Install dependencies
|
|
uv sync
|
|
|
|
# Run the MCP server
|
|
python src/jellyfin_mcp/server.py
|
|
|
|
# Run tests
|
|
pytest
|
|
|
|
# Run a single test
|
|
pytest tests/test_server.py::test_search_items_tool
|
|
```
|
|
|
|
## Architecture
|
|
|
|
This is a Python MCP server that wraps the Jellyfin media server REST API using the `FastMCP` framework.
|
|
|
|
**Two-layer design:**
|
|
|
|
- [`src/jellyfin_mcp/client.py`](src/jellyfin_mcp/client.py) — `JellyfinClient`: low-level async HTTP client using `httpx`. Handles auth via `MediaBrowser Token` header, constructs URLs, and maps Jellyfin API responses to Python types.
|
|
- [`src/jellyfin_mcp/server.py`](src/jellyfin_mcp/server.py) — MCP tool definitions via `@mcp.tool()` decorators. Each tool calls `JellyfinClient` methods and formats results as plain strings for AI consumption. The `client` instance is a module-level singleton initialized at import time from env vars.
|
|
|
|
**Configuration:** `JELLYFIN_URL` and `JELLYFIN_API_KEY` must be set (via `.env` file or environment). The server raises `ValueError` at startup if either is missing.
|
|
|
|
**Testing:** Tests mock `jellyfin_mcp.server.client` at the module level and patch individual `JellyfinClient` methods with `AsyncMock`. The `mock_env` fixture is `autouse=True` so env vars are always set during tests.
|