Skip to main content
Glama
small-mcp

small-mcp

by Nishant-IIT

small-mcp

A minimal FastMCP server in Python that demonstrates all four MCP primitives: tools, resources, resource templates, and prompts — including how to use the context object for logging and progress reporting.

Requirements

  • uv (package manager)

  • Python 3.14+

Related MCP server: MCPServer (FastMCP)

Setup

uv sync

Run

uv run python main.py

The server starts in stdio mode, ready to be connected to any MCP client.

Primitives

Tools

Functions the LLM can call to perform actions.

Tool

Description

add(a, b)

Add two numbers

word_count(text)

Count words, characters, and lines

current_time(timezone)

Return the current UTC time

log_message(message)

Log a message via MCP context (demonstrates progress + logging)

Resources

Static data the LLM can read.

URI

Description

resource://server/info

Basic info about this server

resource://snippets/hello-world

A Python Hello World snippet

Resource Templates

Dynamic resources resolved from a URI pattern.

Template

Description

resource://snippets/{language}/hello

Hello World snippet for python, javascript, go, or rust

Prompts

Reusable prompt templates the LLM can request by name.

Prompt

Args

Description

summarize

text, style

Ask for a summary in a given style

code_review

code, language

Request a code review

explain_concept

concept, audience

Explain a concept to a target audience

Context

The log_message tool shows how to inject ctx: Context into a tool to:

  • Send log messages back to the client via ctx.info()

  • Report progress via ctx.report_progress(progress, total)

Inspect with MCP Inspector

uv run fastmcp dev inspector main.py

Then open the URL printed in the terminal to browse and call tools, read resources, and render prompts interactively.

Connect to Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "small-mcp": {
      "command": "uv",
      "args": ["run", "--directory", "/Users/nishantbhagat/Study/Projects/small mcp", "python", "main.py"]
    }
  }
}

Project Structure

small mcp/
├── main.py          # MCP server (all primitives in one file)
├── pyproject.toml   # uv project config
└── uv.lock

Available Tools

6 tools
call_toolA

Call a tool by name with the given arguments.

Use this to execute tools discovered via search_tools.

Inputs: name (required), arguments.

get_promptA

Get a prompt by name with optional arguments.

Returns the rendered prompt as JSON with a messages array. Arguments should be provided as a dict mapping argument names to values.

Inputs: name (required), arguments. Returns: result

list_promptsA

List all available prompts.

Returns JSON with prompt metadata including name, description, and optional arguments.

Inputs: no named parameters. Returns: result

list_resourcesA
Read-only

List all available resources and resource templates.

Returns JSON with resource metadata. Static resources have a 'uri' field, while templates have a 'uri_template' field with placeholders like {name}.

Inputs: no named parameters. Returns: result

read_resourceA
Read-only

Read a resource by its URI.

For static resources, provide the exact URI. For templated resources, provide the URI with template parameters filled in.

Returns the resource content as a string. Binary content is base64-encoded.

Inputs: uri (required). Returns: result

search_toolsA

Search for tools using natural language.

Returns matching tool definitions ranked by relevance, in the same format as list_tools.

Inputs: query (required). Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool has a clear, distinct role: search vs call, list vs read, list vs get. There is no overlap in purpose.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern (search_tools, call_tool, list_resources, read_resource, list_prompts, get_prompt).

    Tool Count5/5

    With 6 tools covering three resource types (tools, resources, prompts), the count is well-scoped and appropriate for a small MCP utility server.

    Completeness3/5

    The server covers tools, resources, and prompts, but misses a list_tools tool, which is a notable gap since search_tools cannot enumerate all tools. This could cause agent failures when trying to discover the full tool surface.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      An educational MCP server example built with FastMCP that demonstrates how to expose tools, resources, and prompts to AI clients. Provides a learning foundation for building MCP servers with Python and integrating them with AI applications like IDEs and chatbots.
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      A minimal Model Context Protocol server built with FastMCP that provides basic utility tools including user greetings, number addition, and file listing operations. Includes examples of exposing tools, resources, and prompts for MCP-aware clients.
      -
    • F
      license
      Not graded
      quality
      C
      maintenance
      A basic MCP server implementation using the FastMCP framework that provides utility tools for greetings and mathematical calculations. It is designed to demonstrate tool integration for AI-assisted development workflows like Cline.
      -