Skip to main content
Glama

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 Inspector

Connect it to a host

claude mcp add todos -- uv --directory "<path to this repo>" run python todo_server.py

Available Tools

3 tools
add_todoA

Add a new todo item.

Use when the user asks to add, create, or note down a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
doneYes
textYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_todoA
Idempotent

Mark a todo as done, by id.

Read todos://all first if you do not already know the id.

ParametersJSON Schema
NameRequiredDescriptionDefault
todo_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
doneYes
textYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_todoA
Destructive

Permanently delete a todo, after asking the user to confirm.

Use when the user asks to delete or remove a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
todo_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv0.1.0
    • First observedadd_todo
    • First observedcomplete_todo
    • First observedremove_todo

TDQS

A4.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct action on todos: adding, completing, and removing. There is no overlap or ambiguity between them.

Naming Consistency5/5

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.

Tool Count5/5

With only 3 tools, the set is appropriately scoped for a minimal todo server. Each tool is essential and there is no unnecessary complexity.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal demonstration server showcasing MCP protocol capabilities including tools, resources, and prompts with basic examples like hello world functionality.
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    7
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    A sample MCP server that exposes tools, resources, and prompts for managing users and todos, supporting both stdio and Streamable HTTP transports.
    -