Tool Design Checklist for Agents and MCP
How to name, describe, and shape tools so models call them correctly and safely.
Setup time30 minutes per tool (estimate)
Estimated costFree.
VerificationNot yet independently verified
Checklist
- Few, purposeful tools: prefer
search_customers(query)over exposing raw CRUD on every table. - Clear names: verb_noun, namespaced if many (
github_create_issue). - Descriptions say when to use it and when not to, plus important constraints.
- Strict schemas: enums for fixed choices, required fields, formats (
date,email), sensible defaults. - Concise, high-signal results: return IDs and human-readable fields; paginate or truncate large outputs and say so.
- Actionable errors:
"Invalid date '2024-13-01'; use YYYY-MM-DD"beats a stack trace. - Idempotency for writes (accept a client-generated key) so retries do not duplicate.
- Annotate risk: MCP tool annotations like
readOnlyHintanddestructiveHintlet clients ask for confirmation.
Example definition
{
"name": "calendar_find_free_slots",
"description": "Find open meeting slots for the given attendees. Use before proposing times. Does not create events.",
"inputSchema": {
"type": "object",
"properties": {
"attendees": {"type": "array", "items": {"type": "string", "format": "email"}, "minItems": 1},
"duration_minutes": {"type": "integer", "enum": [15, 30, 45, 60], "default": 30},
"window_start": {"type": "string", "format": "date-time"},
"window_end": {"type": "string", "format": "date-time"}
},
"required": ["attendees", "window_start", "window_end"]
},
"annotations": {"readOnlyHint": true}
}Failure modes
- Overlapping tools confuse the model about which to call.
- Free-text parameters where enums fit lead to invalid arguments.
- Errors returned without guidance prevent the model from recovering.
Markdown version: /blueprints/mcp-tool-design-checklist.md
Want a deeper build of this?
Vote for an extended, fully tested version (more tools, a full workflow file). Votes decide what we build next.
Get one fully built blueprint a week
A weekly email: one blueprint with config, cost, setup time and failure modes, plus a vote on what we build next.
Related blueprints
MCP & Tool Use
Build a Custom MCP Server in Python (MCPServer, formerly FastMCP)
Expose your own functions as MCP tools and resources using the official Python SDK in about 20 lines.
MCP & Tool Use
Build a Custom MCP Server in TypeScript
A minimal stdio MCP server using @modelcontextprotocol/sdk with a zod-validated tool.
MCP & Tool Use
GitHub MCP Server with a Scoped Token
Run GitHub's official MCP server in Docker with a fine-grained, least-privilege personal access token.