Skip to main content
Glama
safayet9009

FastMCP Demo Server

by safayet9009

FastMCP Demo Server

A beginner-friendly Model Context Protocol (MCP) server built with FastMCP. This project demonstrates how to create custom MCP tools and connect them to AI clients such as Claude Desktop.

šŸš€ Features

This server currently provides two simple MCP tools:

  • add — Adds two numbers

  • multiply — Multiplies two numbers

The project is designed as a simple starting point for learning how MCP servers work.

Related MCP server: Calculator MCP Server

🧠 How It Works

The basic architecture is:

User
  ↓
AI Client (Claude Desktop)
  ↓
MCP Protocol
  ↓
FastMCP Server
  ↓
Custom Tools
  ↓
Python Functions

For example, when Claude needs to calculate 10 + 20, it can call the add MCP tool:

Claude
  ↓
add(10, 20)
  ↓
FastMCP Server
  ↓
Python function
  ↓
30

šŸ“ Project Structure

fastmcp-demo-server/
│
ā”œā”€ā”€ main.py
ā”œā”€ā”€ README.md
ā”œā”€ā”€ LICENSE
ā”œā”€ā”€ pyproject.toml
ā”œā”€ā”€ uv.lock
ā”œā”€ā”€ .python-version
└── .gitignore

šŸ› ļø Tools

1. add

Adds two numbers.

add(a, b)

Example:

add(10, 20)
→ 30

2. multiply

Multiplies two numbers.

multiply(a, b)

Example:

multiply(10, 20)
→ 200

āš™ļø Requirements

  • Python

  • uv

  • FastMCP

  • An MCP-compatible client such as Claude Desktop

šŸ“¦ Installation

Clone the repository:

git clone https://github.com/safayet9009/fastmcp-demo-server.git

Go to the project directory:

cd fastmcp-demo-server

Install the project dependencies:

uv sync

ā–¶ļø Run the Server

Run the MCP server with:

uv run fastmcp run main.py:mcp

The server uses stdio transport, so it can communicate directly with MCP clients such as Claude Desktop.

šŸ” Test with FastMCP Inspector

You can also inspect and test the server using FastMCP's development tools:

uv run fastmcp dev inspector main.py:mcp

This allows you to explore the available MCP tools and test them interactively.

šŸ¤– Connect with Claude Desktop

Add the following configuration to your Claude Desktop MCP configuration:

{
  "mcpServers": {
    "Demo Server": {
      "command": "/home/shafayet/.local/bin/uv",
      "args": [
        "run",
        "--directory",
        "/home/shafayet/Desktop/fastmcp-demo-server",
        "fastmcp",
        "run",
        "main.py:mcp"
      ],
      "env": {},
      "transport": "stdio"
    }
  }
}

Note: Update the paths according to your own system.

After adding the configuration, restart Claude Desktop.

Claude should then be able to discover the available tools:

add
multiply

You can test it by asking Claude:

Use the add tool to calculate 25 + 75.

or:

Use the multiply tool to calculate 12 Ɨ 8.

šŸŽÆ Learning Goals

This project helps demonstrate:

  • What an MCP server is

  • How FastMCP works

  • How to create MCP tools

  • How MCP clients discover and call tools

  • How Python functions can become MCP tools

  • How to connect a custom MCP server with Claude Desktop

  • How stdio transport works

šŸ”® Future Improvements

Possible future additions include:

  • Weather tool

  • Calculator tool

  • Web search tool

  • Database tools

  • File management tools

  • API integration

  • Custom AI-powered tools

  • Resources and prompts

  • Authentication

  • More advanced MCP workflows

šŸ“„ License

This project is licensed under the MIT License. See the LICENSE file for details.

šŸ‘Øā€šŸ’» Author

Safayet Hossain

GitHub: @safayet9009


⭐ If you find this project useful for learning MCP, consider giving it a star!

Available Tools

2 tools
add_numbersAdd NumbersB

Add two numbers together.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing explicit (number type, precision, overflow, error handling). However, the operation is a pure, side-effect-free computation implied by its name, so there is little destructive behavior to warn about.

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?

A single short sentence that is front-loaded and wastes nothing. There is no filler, hedging, or redundancy.

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?

An output schema exists, so return values need not be explained, and the two parameters are self-describing. The description is sufficient for calling a trivial arithmetic tool, with the only gap being numeric type/precision expectations.

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?

Schema description coverage is 0%, but the parameters are named a and b and addition is order-independent, so semantics are self-evident. The description's "two numbers" confirms arity but adds no type or format detail beyond the schema.

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

Purpose4/5

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

"Add two numbers together" states a specific verb and resource, and the operation is unambiguous even though it largely restates the tool name. No sibling differentiation is present, but the sibling (roll_dice) is unrelated, so the risk of confusion is near zero.

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?

There is no when-to-use guidance and no mention of alternatives. For a trivial arithmetic helper this is low-stakes, but the description provides no routing signal at all.

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

roll_diceRoll DiceA

Roll n_dice 6-sided dice and return the results.

ParametersJSON Schema
NameRequiredDescriptionDefault
n_diceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations exist, so the description carries the disclosure burden. It does reveal the die type (6-sided) and that results are returned, but says nothing about randomness/non-determinism, value range (1-6), or any upper bound on n_dice.

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?

One front-loaded sentence with zero filler; the action and scope come before any qualifying detail.

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?

An output schema exists, so return formatting need not be described, and the description covers purpose and the sole parameter. Only minor gaps remain (default value, dice-count limits).

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it does implicitly define n_dice as the number of dice to roll. It omits the default of 1 and any valid range, though the core semantics of the single parameter are conveyed.

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

Purpose4/5

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

States a specific verb (roll) plus resource (dice) and scope (6-sided, count n_dice), so the agent knows exactly what happens. It does not need to differentiate from add_numbers since the domains are unrelated, but it also makes no explicit sibling contrast.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: nothing tells the agent when to prefer this over alternatives or any preconditions, but for a trivial RNG utility the intent ('need random dice') is self-evident from the sentence.

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. 2 tool updatesv0.1.0
    • First observedadd_numbers
    • First observedroll_dice

TDQS

A3.6/5.0

Scored across 2 tools

Disambiguation5/5

roll_dice and add_numbers target completely different operations with no overlap; an agent can easily tell them apart.

Naming Consistency5/5

Both names follow a consistent snake_case verb_noun pattern (roll_dice, add_numbers), making the convention predictable.

Tool Count3/5

Two tools is borderline thin even for a demo server; while each is distinct, the set lacks enough surface to demonstrate a coherent toolkit.

Completeness3/5

There is no clear domain, so completeness is hard to assess; each tool is self-contained but the surface is minimal and offers no lifecycle or related operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables basic arithmetic operations (addition, subtraction, multiplication, division) with 64-bit precision and matrix multiplication capabilities. Provides mathematical computation tools for AI assistants through the Model Context Protocol.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides basic arithmetic operations (add, multiply, divide) for AI assistants through the Model Context Protocol.
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to perform mathematical calculations through natural language by integrating an AI model with calculator tools via the Model Context Protocol.
    25 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes add, subtract, multiply, and divide tools for performing arithmetic operations over stdio via the Model Context Protocol.
    17 npm
    MIT