small-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@small-mcp Count words in 'Hello world'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 syncRun
uv run python main.pyThe 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 two numbers |
| Count words, characters, and lines |
| Return the current UTC time |
| Log a message via MCP context (demonstrates progress + logging) |
Resources
Static data the LLM can read.
URI | Description |
| Basic info about this server |
| A Python Hello World snippet |
Resource Templates
Dynamic resources resolved from a URI pattern.
Template | Description |
| Hello World snippet for |
Prompts
Reusable prompt templates the LLM can request by name.
Prompt | Args | Description |
|
| Ask for a summary in a given style |
|
| Request a code review |
|
| 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.pyThen 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.lockAvailable Tools
6 toolscall_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_resourcesARead-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_resourceARead-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
Scored across 6 tools
Each tool has a clear, distinct role: search vs call, list vs read, list vs get. There is no overlap in purpose.
All tool names follow a consistent verb_noun pattern (search_tools, call_tool, list_resources, read_resource, list_prompts, get_prompt).
With 6 tools covering three resource types (tools, resources, prompts), the count is well-scoped and appropriate for a small MCP utility server.
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
Related MCP Connectors
A simple MCP server built with FastMCP and python
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn 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.-
- FlicenseNot gradedqualityDmaintenanceA 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.-
- FlicenseNot gradedqualityCmaintenanceA 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.-
- FlicenseNot gradedqualityDmaintenanceEducational example of an MCP server built with FastMCP, demonstrating how to expose tools, resources, and prompts for AI clients.-