# Do stricter MCP tool schemas increase agent reliability?

DevFeed: [Do stricter MCP tool schemas increase agent reliability?](<https://devfeed.tech/articles/do-stricter-mcp-tool-schemas-increase-agent-reliability-21747.md>)

Original publisher: [Read original article](<http://blog.pamelafox.org/2026/03/do-stricter-mcp-tool-schemas-increase.html>)

Author: Pamela Fox (noreply@blogger.com)

Published: 2026-03-17T06:13:00Z

Content type: article

Language: en

Sources: [Pamela Fox](<https://devfeed.tech/sources/pamela-fox.md>)

Topics: [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [Python](<https://devfeed.tech/topics/python.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Prompt Engineering](<https://devfeed.tech/topics/prompt-engineering.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [llms](<https://devfeed.tech/tags/llms.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [python](<https://devfeed.tech/tags/python.md>), [schema](<https://devfeed.tech/tags/schema.md>)

## AI overview

The article investigates whether stricter MCP tool schemas make agents more reliable. It describes an expense-tracking MCP server built with Python FastMCP and examines how metadata, parameter descriptions, and type constraints affect tool-calling behavior.

## Source excerpt

MCP servers contain tools, and each tool is described by its name, description, input parameters, and return type. When an agent is calling a tool, it formulates its call based on only that metadata; it does not know anything about the internals of a tool. For my PyAI talk last week, I investigated this hypothesis: If we use stricter types for MCP tool schemas, then agents calling those tools will be more successful. This was a hypothesis based on my personal experience over the last year of developing with agents and MCP servers, where I'd started with MCP servers with very minimal schemas, witnessed agents failing to call them correctly, and then iterated on the schemas to improve tool-calling success. I thought for sure that my hypothesis would be validated with flying colors. Let's see what I discovered instead... Table of contents: A basic MCP tool and schema Annotating parameters with descriptions Constraining parameters with types Setting up evaluations Evaluation results: category Evaluation results: date Cross-model evaluations Impact of reasoning effort Comparing agent frameworks Takeaways A basic MCP tool and schema For this experiment, I built an MCP server that can add expenses to a database. My add_expense tool needs four pieces of information: date: The date that the expense was incurred amount: The amount of the expense category: The category of the expense description: A free-form description of the expense This is what a first attempt at the tool might look like, using the Python FastMCP framework, and a Python type annotation for each parameter: @mcp.tool async def add_expense( expense_date: str, amount: float, category: str, description: str, ): """Add a new expense.""" ... See full code in expenses_mcp.py. When FastMCP generates the schema based on that function signature, it produces this JSON schema: { "name": "add_expense", "description": "Add a new expense.", "inputSchema": { "properties": { "expense_date": {"type": "string"}, "amount": {"ty