Skip to main content
Glama
sh-aidev

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

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

–Maintainers
–Response time
–Release cycle
–Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • -
    license
    -
    quality
    -
    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.
    Last updated
  • -
    license
    -
    quality
    -
    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.
    Last updated
  • -
    license
    -
    quality
    -
    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.
    Last updated

View all related MCP servers

Related MCP Connectors

  • Primarily to be used as a template repository for developing MCP servers with FastMCP in Python, P…

  • A very simple remote MCP server that greets you, with a custom icon.

  • A basic MCP server to operate on the Postman API.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sh-aidev/autoplot-ai-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server