Skip to main content
Glama
MCP Server Template

MCP Server Template

by sh-aidev

Autoplot AI MCP

python mcp uv license

An MCP (Model Context Protocol) server, managed with uv, that lets an MCP client discover public datasets (currently World Bank Open Data) by keyword — the first step of an automated data-fetching and visualization pipeline.

šŸ“Œ Features

  • uv for dependency management

  • TOML + Pydantic based config, with API sources defined declaratively in configs/api_config.toml

  • get_datasets_list tool — keyword search over a configured data source's datasets

  • Multi-source ready: add new APIs by editing config, no code changes

  • Centralized logging (loguru)

  • Custom exception handling

  • Standalone stdio client for manual testing

Related MCP server: DDG MCP1234

šŸ“ Project Structure

The directory structure of the project looks like this:

ā”œā”€ā”€ LICENSE
ā”œā”€ā”€ Makefile
ā”œā”€ā”€ README.md
ā”œā”€ā”€ client.py
ā”œā”€ā”€ main.py
ā”œā”€ā”€ configs
│   ā”œā”€ā”€ config.toml
│   └── api_config.toml
ā”œā”€ā”€ outputs
ā”œā”€ā”€ pyproject.toml
└── src
    ā”œā”€ā”€ __init__.py
    ā”œā”€ā”€ app.py
    ā”œā”€ā”€ server
    │   ā”œā”€ā”€ __init__.py
    │   └── server.py
    ā”œā”€ā”€ tools
    │   ā”œā”€ā”€ __init__.py
    │   ā”œā”€ā”€ api_sources.py
    │   └── dataset_discovery.py
    └── utils
        ā”œā”€ā”€ __init__.py
        ā”œā”€ā”€ config.py
        ā”œā”€ā”€ exceptions.py
        ā”œā”€ā”€ logger.py
        └── models.py

šŸ—ļø Architecture

main.py boots an App, which loads config and hands it to a Server that wraps FastMCP. Tool implementations live under src/tools/ (one module per tool, or tool family), each exposing a register(mcp, config) function; src/tools/__init__.py calls all of them so Server stays a thin wrapper. MCP clients (like client.py or the MCP Inspector) talk to the server over stdio; the tools in turn call out to whichever external data API is configured (e.g. the World Bank REST API).

flowchart LR
    subgraph Client
        C["client.py<br/>(MCP client)"]
    end

    subgraph "Autoplot AI MCP Server"
        M["main.py"] --> A["App"]
        A --> CFG["Config"]
        A --> S["Server<br/>(FastMCP)"]
        S --> R["tools.register_all"]
        R -->|registers| T["dataset_discovery.get_datasets_list"]
        T -->|resolves source| API["tools.api_sources.get_api_source"]
    end

    subgraph "Config Files"
        CT["config.toml<br/>(logger, server)"]
        AT["api_config.toml<br/>(API sources)"]
    end

    subgraph "External Data Sources"
        WB["World Bank Open Data API"]
    end

    CFG --> CT
    CFG --> AT
    C <-->|stdio / MCP protocol| S
    T -->|HTTP GET| WB

šŸ” Sequence: get_datasets_list

sequenceDiagram
    participant U as User
    participant Cl as client.py
    participant Sv as Server (FastMCP)
    participant WB as World Bank API

    U->>Cl: Enter search text
    Cl->>Cl: Split input into keywords
    Cl->>Sv: call_tool("get_datasets_list", {keywords, source, limit})
    loop each result page
        Sv->>WB: GET discovery_endpoint (page, per_page)
        WB-->>Sv: indicators (name, sourceNote, id)
        Sv->>Sv: match keywords against name / description
    end
    Sv->>Sv: rank name-matches above description-matches,<br/>shorter names first
    Sv-->>Cl: top `limit` matching datasets
    Cl-->>U: print dataset id / name / description

šŸš€ Getting Started

Step 1: Install dependencies

uv sync

Step 2: Run the server

uv run python main.py
# or
make run

The server communicates over stdio and is meant to be launched by an MCP client (see Step 3), not run standalone in a terminal.

Step 3: Try it with the bundled client

uv run python client.py
# or
make client

This spawns main.py as a subprocess over stdio, lists the available tools, then prompts you for search text (e.g. population growth), splits it into keywords, and calls get_datasets_list to print matching datasets.

Step 4 (optional): Inspect it with the MCP Inspector

uv run mcp dev main.py:mcp

Opens a browser UI to browse and call the registered tools interactively. main.py exposes a lazily-built mcp attribute for this purpose (see __getattr__ at the bottom of the file) — normal runs via make run / make client don't trigger it.

āš™ļø Configuration

  • configs/config.toml — logger environment (dev / prod) and the MCP server's advertised name.

  • configs/api_config.toml — a list of [[apis]], each describing an external data source: its name, description, discovery_endpoint (lists datasets), data_endpoint (downloads one dataset), response format, and per_page page size. Add a new source by appending another [[apis]] block — no code changes required.

šŸ“œ References

Available Tools

5 tools
addB

Add two integers

Inputs: a (required), b (required). Returns: result

divideB

Divide the first integer by the second

Inputs: a (required), b (required). Returns: result

multiplyB

Multiply two integers

Inputs: a (required), b (required). Returns: result

reverse_stringA

Reverse a given string

Inputs: text (required). Returns: result

subtractA

Subtract the second integer from the first

Inputs: a (required), b (required). Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool has a clear and distinct purpose. The arithmetic tools (add, subtract, multiply, divide) are well-differentiated, and reverse_string operates on an entirely different domain.

    Naming Consistency5/5

    All tool names follow a consistent pattern: simple, lowercase, with underscores for multi-word names (reverse_string). No mixed styles or confusing abbreviations.

    Tool Count5/5

    Five tools is a reasonable count for a small utility server. It's neither too few to be useful nor too many to manage.

    Completeness3/5

    The arithmetic set covers basic operations but misses common ones like modulus or exponentiation. The string domain has only one operation, leaving gaps for typical string manipulations.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server template with example tools for echoing messages and retrieving server information. Built with FastMCP framework and supports both stdio and HTTP transports.
      -
    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server template with example tools for echoing messages and retrieving server information. Built with FastMCP framework and supports both stdio and HTTP transports.
      -
    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server template with example tools for echoing messages and retrieving server information. Built with FastMCP framework and supports both stdio and HTTP transports.
      -