Skip to main content
Glama
srgsanky

Personal Library MCP Server

by srgsanky
README.md
# Personal Library MCP Server Demo

## What is this?
This is a functional **Model Context Protocol (MCP)** server built with the `FastMCP` framework. It provides a structured interface for an AI model to interact with a local SQLite database that tracks a personal reading list.

## Why use it?
This project is a **very simple demo** designed to see the Model Context Protocol (MCP) in action. It serves as a minimal, "Hello World" style example to help you nail the basics of:
- **Resources**: Exposing data (like a list of books) as readable URI-based resources.
- **Tools**: Providing actionable functions (like adding or searching books) that an AI can call.
- **Client-Server Communication**: Demonstrating how a client and server interact using the standard `stdio` transport.

## Getting Started

### Prerequisites
- [uv](https://github.com/astral-sh/uv) installed on your system.
- Python 3.10 or later.

### Setup and Running the Demo

1. **Initialize the Database**: 
   Create the SQLite database and populate it with sample data:
   ```bash
   uv run python init_db.py
   ```

2. **Run the Smoke Test**:
   This script acts as a **smoke test** for your MCP server. It starts the server in the background and simulates how an AI model would interact with it (reading resources, calling tools) without needing an actual AI model connected:
   ```bash
   uv run python main.py
   ```

## Project Structure
- `server.py`: The MCP server implementation using `FastMCP`.
- `main.py`: A **smoke test** script that demonstrates how to interact with the server.
- `init_db.py`: A setup script to create the local `books.db` SQLite database.
- `pyproject.toml`: Project configuration and dependencies (managed by `uv`).
- `books.db`: The local SQLite database (created after running `init_db.py`).

## Using as a Tool with AI Assistants

You can connect this server to any MCP-compatible client. Replace `/absolute/path/to/mcp-demo` with `/Users/sanka/Documents/workspace/mcp-demo` in the examples below.

### 1. Gemini CLI
You can add the server automatically using the Gemini CLI:
```bash
gemini mcp add --scope project personal-library uv --directory $(pwd) run python server.py
```
Or manually add this to `.gemini/settings.json`:
```json
{
  "mcpServers": {
    "personal-library": {
      "command": "uv",
      "args": ["--directory", "/Users/sanka/Documents/workspace/mcp-demo", "run", "python", "server.py"],
      "trust": true
    }
  }
}
```

### 2. Claude Desktop
Add this to your `claude_desktop_config.json` (typically in `~/Library/Application Support/Claude/` on macOS):
```json
{
  "mcpServers": {
    "personal-library": {
      "command": "uv",
      "args": ["--directory", "/Users/sanka/Documents/workspace/mcp-demo", "run", "python", "server.py"]
    }
  }
}
```

### 3. Cline (VS Code Extension)
Open the MCP Settings in Cline or edit `cline_mcp_settings.json`:
```json
{
  "mcpServers": {
    "personal-library": {
      "command": "uv",
      "args": ["--directory", "/Users/sanka/Documents/workspace/mcp-demo", "run", "python", "server.py"]
    }
  }
}
```

## Sample Prompts for AI Agents
Once you've connected the server to your favorite AI assistant, try these prompts:

- **List Resources**: "What books are currently in my reading list?"
- **Search**: "Find 'The Martian' in my library." or "Do I have any books by Frank Herbert?"
- **Add a Book**: "Add 'Project Hail Mary' by Andy Weir to my library. It's a Sci-Fi book from 2021."
- **Update Status**: "I just finished reading 'Dune', can you mark it as read?" or "I just bought 'The Road', mark it as owned."
- **Check Details**: "Show me the full metadata for 'The Lord of the Rings'."
- **Combined Task**: "Look at my library and tell me which Sci-Fi books I haven't read yet."

## Naming Conventions
- **Server Name (Configuration)**: The key used in `settings.json` (e.g., `"personal-library"`) is a unique identifier for your AI client to manage multiple servers. 
- **Display Name (Code)**: The name passed to `FastMCP("Personal Library Manager")` in `server.py` is what appears in the UI of apps like Claude Desktop.
- **Tool/Resource Names**: These (e.g., `add_book`, `library://...`) must match exactly between `server.py` and `main.py`. 

You don't need to use these names in your prompts! The AI assistant automatically discovers all available tools and resources once the server is connected.

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no ambiguity: add_book, delete_book, list_books, search_books, and update_book_status each target specific operations in the library domain. The descriptions reinforce this clarity, such as list_books filtering unread books and update_book_status handling status changes, preventing misselection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., add_book, delete_book, list_books). There are no deviations in style or convention, making the set predictable and easy to understand for an agent.

Tool Count5/5

With 5 tools, this server is well-scoped for a personal library domain. Each tool earns its place by covering core operations like adding, deleting, listing, searching, and updating books, without being overly sparse or bloated.

Completeness4/5

The tool set provides strong coverage for basic CRUD operations in a library context, including create (add_book), read (list_books, search_books), update (update_book_status), and delete (delete_book). A minor gap is the lack of a tool for editing book details beyond status (e.g., title or author), but agents can work around this with the existing tools.

Maintenance

ActivityInactive
ResponsivenessNo issues