Skip to main content
Glama
chambtai-sys

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