Jussi Hallila
Part 2 of a 3-part series exploring how MCP revolutionizes AI integration
Here's the most counterintuitive truth about building tools for AI: everything you know about good API design will lead you astray. The patterns that make APIs elegant for human developers can confuse AI models and lead to poor results. Modularity, minimal descriptions, consistent naming are better to be left for humans.
We need to remember that AI and LLMs operate fundamentally differently than human intelligence and our tools need to respect those differences.
When you encounter a new API as a developer, you have powerful advantages:
You can engage in persistent learning by reading documentation once, experimenting with endpoints, and building mental models that carry forward to future projects. You also have contextual exploration capabilities that allow you to browse Stack Overflow, read blog posts, examine code examples, and ask colleagues for guidance.
When things go wrong, you can perform systematic error recovery by debugging methodically, reading error logs, and iterating until solutions work. Most importantly, you can develop conceptual understanding of the business logic behind an API and make intelligent assumptions about how it should work.
AI models, despite their impressive capabilities, operate under completely different constraints:
They have no memory between sessions, meaning every conversation starts from scratch and the model can't "learn" your API over time. Their exploration is limited since models can't browse documentation or search for examples—they only have what you provide in tool descriptions.
Models are entirely context dependent, relying on pattern matching from their training data and your specific descriptions without true understanding. Their operation is stateless, with each tool call being independent and no ability to build on previous learning or gradually improve their usage. Unless you want to spend fortunes over and over again to fine-tune or retrain the models.
Every tool you create for an AI model consumes precious context tokens. Here's the brutal math:
A typical API with 50 endpoints converted directly to MCP tools could consume from 15k to 25k tokens just for tool definitions. And after that we need to start prompting the LLM to use those tools which starts the second token slurping, doing the actual work.
This introduces a chicken and an egg problem. More tools, more capabilities. More tools, less context space to do actual work.
Consider this common scenario: You're building MCP tools for a project management platform that has these API endpoints:
/api/projects/list
/api/workspaces/list
/api/teams/list
/api/groups/list
/api/spaces/list
To human, these endpoints paint an ok picture of what is possible. Each of them represents a different organizational concept. But to an AI model seeing these for the first time, this is a bunch of unrelated endpoints and introduces conceptual chaos. What's the difference between a "workspace" and a "space"? When should it use "teams" vs. "groups"?
The model has no context for these words. It will guess based on names and descriptions, often incorrectly.
Here's where the differences become most noticeable. Consider this user request:
"Find the top-selling products in our e-commerce platform over the past month that were not included in the recent marketing campaigns."
A human developer would approach this systematically:
An AI model using direct API translations would need to:
Each step requires precise execution because the AI model cannot iteratively build knowledge across the conversation.
Traditional APIs often return simple error messages designed for developers to debug systematically:
{
"error": "Invalid parameters: startDate",
"code": 400
}
This is precise for a developer but problematic for an AI model. The model needs additional guidance to make sense of the error:
startDate
parameter?APIs typically expect developers to discover capabilities through documentation. But AI models only know what you tell them in tool descriptions.
That means that if you don't explain everything upfront, the model can't discover it later. But if you try to explain everything, you blow up the token budget and create information overload.
Understanding these limitations leads to a fundamentally new approach to tool design:
Instead of exposing API endpoints directly, design tools around specific user goals:
getSalesData
, getProductDetails
, and getMarketingExclusions
, create one tool: analyzeProductPerformance
that manages the entire process from start to finish.Each response should include clear instructions to guide the model's next steps:
{
"result": "Identified 5 top-selling products",
"next_steps": "Use excludeFromMarketing() to add these products to the exclusion list",
"top_selling_products": [
"Product A",
"Product B",
"Product C"
]
}
Errors should provide actionable insights rather than just reporting issues:
{
"error": "No sales data found for the given date range.",
"suggestion": "Check the date format or use getAvailableDates() for a valid range.",
"available_date_ranges": [
"2025-06-01 to 2025-06-30",
"2025-05-01 to 2025-05-31"
]
}
Group related operations that serve the same user intent but keep destructive operations separate for safety.
The core insight is this: you're not building for a superintelligent being that will figure out your API. You're building for a powerful but constrained system that needs clear guidance, complete context, and intelligent assistance.
This doesn't mean treating AI models as "dumb." It means designing tools that work with their strengths while compensating for their limitations.
The best MCP tools feel almost magical to use because they anticipate what the AI needs at each step, provide exactly the right amount of context, and guide the model toward successful outcomes.
In traditional API design, good practice focuses on creating minimal and focused endpoints with consistent naming conventions. Detailed documentation is usually kept separate from the API itself, enabling developers to explore and figure out workflows on their own. This conventional approach works well for human developers who can use their intuition and problem-solving skills.
In contrast, MCP tool design takes a different path. It prioritizes intent-based tools that handle complete workflows rather than breaking them into fragmented operations. These tools are self-documenting, providing responses that guide the model's next actions along the way. They come with built-in context and meaningful suggestions to assist the AI in navigating tasks. Furthermore, they anticipate common mistakes and aim to prevent them wherever possible.
This shift in mindset is not about simplifying APIs to the point of inefficiency but about optimizing them for a completely different type of intelligence. AI models require a fundamentally new design philosophy to effectively use the tools they are provided.
In Part 3, we'll explore specific strategies for designing MCP tools that AI models can use effectively, including real examples of tool consolidation and response design.