minimal-mcp
Click on "Install 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., "@minimal-mcpAdd a todo to buy groceries"
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.
minimal mcp server
A single file MCP server backed by an in memory todo list. It touches all three MCP primitives (tools, resources, prompts) plus elicitation, in about 250 lines.
Architecture
The list lives in memory only. Nothing is written to disk, so every restart starts fresh with two seeded todos.
Three tools let Claude add a todo, mark one done, or delete one. Deleting is the only action that pauses mid call and asks you to confirm first, since it can't be undone; the other two just run.
Two resources expose the same data as read only content instead of actions. One returns the whole list as a markdown checklist. The other takes an id through a URI template and returns just that one item, converting the id from text to a number itself since URI segments always arrive as strings.
One prompt, plan_my_day, bundles the full list with an instruction asking
Claude to pick the three most important undone items. Triggering it attaches
the resource and sends the request in a single click instead of doing both by
hand.
Related MCP server: Basic MCP Server
Run it
uv sync
uv run python smoke_test.py # drives the server as a real client, 13 checks
uv run mcp dev todo_server.py # opens the MCP InspectorConnect it to a host
claude mcp add todos -- uv --directory "<path to this repo>" run python todo_server.pyAvailable Tools
3 toolsadd_todoA
Add a new todo item.
Use when the user asks to add, create, or note down a task.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| done | Yes | |
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation nature is known. The description adds little behavioral detail beyond the usage context, but it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences, front-loaded with the core action ('Add a new todo item') followed by a usage note. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter tool with an output schema present, the description covers the essential information: action and usage trigger. No complex behaviors or prerequisites need explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explicitly explain the 'text' parameter. While the tool's purpose implies 'text' is the content of the todo item, this is left to inference rather than clearly documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Add') and resource ('todo item'). It distinguishes itself from sibling tools (complete_todo, remove_todo) by focusing on the creation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit usage trigger: 'Use when the user asks to add, create, or note down a task.' This gives clear context for when to invoke the tool, though it does not explicitly mention alternative tools for different actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_todoAIdempotent
Mark a todo as done, by id.
Read todos://all first if you do not already know the id.
| Name | Required | Description | Default |
|---|---|---|---|
| todo_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| done | Yes | |
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey idempotentHint=true and destructiveHint=false, so the description does not need to repeat those. It adds a useful instruction about reading todos://all for the id, but no new behavioral disclosure beyond what annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and immediately followed by the key usage hint. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with annotations and an output schema, the description fully covers what an agent needs to correctly invoke it. It states the action, the parameter, and the prerequisite for obtaining the id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter todo_id is described by name and reinforced with 'by id' in the description. The schema provides integer type and required status, so the parameter is sufficiently clear even with 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-object structure ('Mark a todo as done, by id') that clearly identifies the action and target resource. It naturally distinguishes itself from sibling tools add_todo and remove_todo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit prerequisite: read todos://all first if the id is unknown. It does not explicitly contrast with add/remove, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_todoADestructive
Permanently delete a todo, after asking the user to confirm.
Use when the user asks to delete or remove a task.
| Name | Required | Description | Default |
|---|---|---|---|
| todo_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds crucial context: 'Permanently delete' clarifies irreversibility, and 'after asking the user to confirm' explains the confirmation workflow. These details go beyond the simple destructive flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the core action in the first sentence and the usage context in the second. No redundant information; everything earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter and an output schema, the description covers the action, the confirmation requirement, and the usage trigger. It omits details about the parameter or return values, but the output schema likely handles returns. The main gap is parameter clarity, which is scored separately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a type for todo_id (integer) with no description, and the description does not mention this parameter at all. With 0% schema description coverage, the description fails to compensate, leaving the parameter's meaning and format unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Permanently delete'), the resource ('a todo'), and key behavior ('after asking the user to confirm'). It distinguishes itself from siblings (add_todo, complete_todo) by focusing on deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit usage trigger: 'Use when the user asks to delete or remove a task.' This gives clear context for when to invoke the tool, but it does not explicitly mention when not to use it or name alternative tools, so it stops short of a 5.
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.
3 tool updates
v0.1.0- First observed
add_todo - First observed
complete_todo - First observed
remove_todo
TDQS
Scored across 3 tools
Each tool targets a distinct action on todos: adding, completing, and removing. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern: add_todo, complete_todo, remove_todo. This makes the tool set predictable and easy to navigate.
With only 3 tools, the set is appropriately scoped for a minimal todo server. Each tool is essential and there is no unnecessary complexity.
The tools cover create (add), update (complete), and delete (remove) operations. Reading is handled via a resource (todos://all), but there is no dedicated update for task text; still, the core lifecycle is covered for a minimal todo server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA minimal demonstration server showcasing MCP protocol capabilities including tools, resources, and prompts with basic examples like hello world functionality.7MIT
- AlicenseNot gradedqualityDmaintenanceA minimal template MCP server demonstrating basic tools, resources, and prompts functionality. Includes example implementations like a hello tool, history resource, and greet prompt for learning MCP development.7ISC
- FlicenseNot gradedqualityDmaintenanceA sample MCP server that exposes tools, resources, and prompts for managing users and todos, supporting both stdio and Streamable HTTP transports.-
- FlicenseCqualityCmaintenanceA simple MCP server demonstrating resources, tools, and prompts using a local task list. It enables reading, creating, and analyzing tasks through MCP.1-