CatMCP
by chambtai-sys
README.md
# CatMCP
```text
/\_/\
( o.o ) [ BETA ]
> ^ <
_ / \ _
( ) ( )
` ` ` `
\__/\_/
```
**CatMCP** is a lightweight, playful, and fully standard-compliant **Model Context Protocol (MCP)** server that serves a curated collection of hilarious cat jokes to LLM clients (like Claude Desktop, Cursor, and more). Whether you need tech puns, classic question-and-answers, silly scenarios, or workplace meow-ments, CatMCP has you covered!
---
## ๐ Features
- **Purr-fect Joke Database**: Hand-crafted collection of 24 cat jokes categorized by themes.
- **Categorized Selections**: Easily request jokes filtered by category (`tech`, `classic`, `puns`, `silly`, `work`).
- **Flexible Searching**: Full-text case-insensitive search across the entire joke database.
- **Rich Resources**:
- `jokes://all`: Read the complete dataset in JSON format.
- `jokes://categories`: Read a summary of all categories and their joke counts.
- `jokes://random`: Fetch a dynamic random joke in raw text format.
- **Creative Prompts**: Integrate interactive prompt templates like `tell_cat_joke` to turn LLMs into cat-loving stand-up comedians.
- **Robustly Tested**: Built using `fastmcp` with comprehensive unit tests for high reliability.
---
## ๐ Quick Start
### Prerequisites
- **Python**: `>=3.12`
- **uv** (Recommended package manager): [Install uv](https://github.com/astral-sh/uv)
### Installation
Clone the repository and install dependencies using `uv`:
```bash
# Clone the repository
git clone https://github.com/Perseu/catmcp.git
cd catmcp
# Install dependencies and create a virtual environment
uv sync
```
### Running the Server
You can start the MCP server using standard IO (stdio) transport:
```bash
uv run python main.py
```
---
## ๐ ๏ธ MCP Capabilities
### 1. Tools
- **`get_random_joke(category: Optional[str])`**: Retrieve a random cat joke. You can filter by category: `tech`, `classic`, `puns`, `silly`, or `work`.
- **`list_categories()`**: Get a sorted list of all available joke categories.
- **`search_jokes(keyword: str)`**: Case-insensitive text search across joke setups, punchlines, and categories.
### 2. Resources
- **`jokes://all`**: Serves the entire joke database as a static JSON resource.
- **`jokes://categories`**: Serves the category distribution and count summary as a JSON resource.
- **`jokes://random`**: Serves a dynamic random cat joke in plain text format.
### 3. Prompts
- **`tell_cat_joke(category: Optional[str], tone: Optional[str])`**: Generates a standard instruction set directing the AI client to perform the joke under a specified persona (e.g. `CatComedian`) and tone (e.g. `sarcastic`, `enthusiastic`, `dry`).
---
## โ๏ธ Host Configuration
To integrate CatMCP with your favorite LLM client, add the server to your configuration file.
### Claude Desktop
Add this to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"catmcp": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/catmcp",
"run",
"python",
"main.py"
]
}
}
}
```
### Cursor
1. Go to **Settings** > **Features** > **MCP**.
2. Click **+ Add New MCP Server**.
3. Fill in the fields:
- **Name**: `CatMCP`
- **Type**: `command`
- **Command**: `uv --directory "/absolute/path/to/catmcp" run python main.py`
---
## ๐งช Testing
CatMCP uses `pytest` for testing. You can run all 11 unit tests to verify server tools, resources, and prompts:
```bash
uv run pytest
```
---
## ๐ License
This project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for details.
---
*Created with ๐พ by Perseu.*
TDQS
A4.2/5.0
Scored across 3 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: retrieving a random joke, listing categories, and searching jokes by keyword. There is no overlap or ambiguity between them.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern: get_random_joke, list_categories, search_jokes. This makes the API predictable and easy to navigate.
Tool Count5/5
With only 3 tools, the server is tightly scoped and each tool earns its place. The count is appropriate for a focused cat joke service.
Completeness5/5
The tool set covers the core needs of a joke API: random access, category browsing, and keyword search. There are no obvious missing operations for the stated purpose.
Maintenance
ActivityStale
ResponsivenessNo issues