Skip to main content
Glama
jfposton

Wake County Public Library

by jfposton

Wake County Public Library MCP Server

A Model Context Protocol (MCP) server that provides search capabilities for the Wake County Public Library catalog.

Built with Python using the official MCP Python SDK and uv for dependency management.

Features

  • Search the Wake County Public Library catalog

  • Search local Wake County catalog or all NC Cardinal libraries

  • Returns detailed information including:

    • Title

    • Author

    • Format (book, DVD, audiobook, etc.)

    • Publication year

    • Availability status

    • Direct links to catalog entries

    • Cover images

Related MCP server: Aspen Catalog MCP

Prerequisites

  • Python 3.12 or higher

  • uv - Fast Python package manager

Installing uv

# macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# Or with pip
pip install uv

Installation

# Clone the repository
git clone <repository-url>
cd mcp-wcpl

# Install dependencies
uv sync

Usage

With Claude Desktop

Add this to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "wake-county-library": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/mcp-wcpl",
        "run",
        "python",
        "-m",
        "mcp_wcpl"
      ]
    }
  }
}

Replace /absolute/path/to/mcp-wcpl with the actual path to this project directory.

Running Directly

You can also run the server directly for testing:

# Using uv (recommended)
uv run python -m mcp_wcpl

# Or activate the virtual environment first
source .venv/bin/activate  # Unix/macOS
.venv\Scripts\activate     # Windows
python -m mcp_wcpl

Available Tools

search_library

Search the Wake County Public Library catalog.

Parameters:

  • query (string, required): The search term (book title, author, keyword, etc.)

  • searchSource (string, optional):

    • "local" (default) - Search only Wake County catalog

    • "all" - Search all NC Cardinal libraries

  • limit (number, optional): Maximum number of results to return (default: 10)

Example:

{
  "query": "Foundation Isaac Asimov",
  "searchSource": "local",
  "limit": 5
}

Response:

Returns an array of search results with the following structure:

[
  {
    "title": "Foundation",
    "author": "Asimov, Isaac",
    "format": "Book",
    "publicationYear": "2004",
    "availability": "Available",
    "url": "https://catalog.wake.gov/Union/Record/...",
    "coverImage": "https://..."
  }
]

Development

Testing

Run the test suite:

# Run all tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Run with coverage report
uv run pytest --cov=src/mcp_wcpl --cov-report=html

# Run specific test file
uv run pytest tests/test_server.py

The test suite will include:

  • Unit tests for HTML parsing logic

  • Integration tests for search functionality with mocked HTTP requests

  • Tests for MCP server tool interface

  • Error handling tests

Adding Dependencies

# Add a runtime dependency
uv add <package-name>

# Add a development dependency
uv add --dev <package-name>

Project Structure

mcp-wcpl/
├── src/
│   └── mcp_wcpl/             # Main package
│       ├── __init__.py       # Package initialization
│       ├── __main__.py       # Entry point
│       └── server.py         # MCP server implementation
├── tests/                    # Test files
│   ├── __init__.py
│   └── test_server.py
├── .venv/                    # Virtual environment (created by uv)
├── pyproject.toml            # Project configuration
├── uv.lock                   # Dependency lock file
├── .gitignore
├── README.md
└── CLAUDE.md                 # Instructions for Claude Code

How It Works

The server will:

  1. Construct search URLs for the Wake County library catalog

  2. Fetch search results using httpx with appropriate HTTP headers

  3. Parse the HTML response using BeautifulSoup4

  4. Extract relevant book information from the results

  5. Return structured JSON data via the MCP protocol

License

MIT

Available Tools

1 tool
search_libraryB

Search the Wake County Public Library catalog for books, media, and other materials. Returns information about items including title, author, format, availability, and links to the catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 10)
queryYesThe search term to look for (book title, author, keyword, etc.)
searchSourceNoSearch source: 'local' for Wake County catalog only, or 'all' for all NC Cardinal librarieslocal

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavioral traits. It only mentions it returns information but does not describe safety (e.g., read-only), authentication needs, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. Front-loaded with the action and resource, then return details. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool, the description covers purpose and return fields adequately. However, it lacks usage guidance and behavioral details that would make it fully complete. Given no output schema, the return description adds useful context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage for all three parameters. The description adds no extra parameter meaning beyond the schema; it only adds output details. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool searches the Wake County Public Library catalog for books and media, specifying what is returned (title, author, etc.). It uses a specific verb ('Search') and resource ('Wake County Public Library catalog'), making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use or avoid this tool. With no sibling tools, alternatives are not discussed, and no prerequisites or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observedsearch_library

TDQS

A3.5/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion between tools.

Naming Consistency5/5

The single tool follows a clear verb_noun pattern (search_library), so consistency is perfect.

Tool Count3/5

One tool is on the low end but acceptable for a focused search server; however, the server name implies a broader library scope.

Completeness2/5

Only a search tool is provided, lacking essential operations like fetching item details, browsing, or account management, which are typical for a library server.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI clients to search Aspen Discovery library catalogs and check real-time book availability by keyword, author, or ISBN. This server allows users to verify local library inventory and filter book recommendations accordingly.
    2
    4 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables searching WorldCat's library catalog for bibliographic records, editions, citations, and exports in various formats via natural language.
    -