DEV Community

Saras Growth Space
Saras Growth Space

Posted on

Designing Good MCP Tools (This Is Where Most Systems Fail)

By now, you understand how MCP works.

But here’s the reality:

Most MCP systems don’t fail because of the protocol…
they fail because of bad tool design.


🧠 The Core Truth

The model makes decisions based on:

  • tool name
  • description
  • input structure

👉 It does NOT see your implementation.


⚠️ What This Means

If your tools are poorly designed:

  • the model gets confused
  • wrong tools are selected
  • incorrect arguments are generated

🧩 Start With This Question

Before creating a tool, ask:

“What clear action does this represent?”


❌ Bad Tool Design

process_request(data)
Enter fullscreen mode Exit fullscreen mode

Problems:

  • unclear purpose
  • vague input
  • no decision signal for the model

✅ Good Tool Design

get_user_orders(user_id, limit)
cancel_order(order_id)
search_products(query)
Enter fullscreen mode Exit fullscreen mode

Now:

  • each tool has one responsibility
  • the model can easily choose

🔥 Rule #1 — One Tool = One Action

Avoid combining multiple responsibilities into a single tool.


❌ Example

manage_order(user_id, order_id, action_type)
Enter fullscreen mode Exit fullscreen mode

✅ Better

create_order(...)
cancel_order(...)
update_order(...)
Enter fullscreen mode Exit fullscreen mode

🔥 Rule #2 — Naming Matters More Than You Think

The model reads names like humans read headings.


❌ Weak Names

handle_data
process
do_task
Enter fullscreen mode Exit fullscreen mode

✅ Strong Names

get_user_orders
search_products
send_email
Enter fullscreen mode Exit fullscreen mode

👉 Use: verb + object


🔥 Rule #3 — Write Clear Descriptions

Descriptions help the model decide when to use a tool.


❌ Bad

"Handles orders"
Enter fullscreen mode Exit fullscreen mode

✅ Good

"Fetches recent orders for a given user ID"
Enter fullscreen mode Exit fullscreen mode

🔥 Rule #4 — Use Explicit Input Schemas

Avoid generic inputs.


❌ Bad

{ "data": "string" }
Enter fullscreen mode Exit fullscreen mode

✅ Good

{
  "user_id": "string",
  "limit": "number"
}
Enter fullscreen mode Exit fullscreen mode

👉 Clear inputs → better decisions


🔥 Rule #5 — Don’t Design for Backend Convenience

Your backend might support complex operations, but:

Tools should be designed for clarity, not internal efficiency.


🧠 Advanced Insight

Tools define:

What the model is capable of doing

If a tool doesn’t exist:

👉 The model cannot perform that action


⚠️ Common Mistakes


Too many tools

  • harder to choose
  • lower accuracy

Overloaded tools

  • unclear responsibility
  • poor decisions

Missing descriptions

  • model guesses → often wrong

🧠 Real Example (E-commerce)


❌ Bad Design

handle_ecommerce(data)
Enter fullscreen mode Exit fullscreen mode

✅ Good Design

search_products(query)
get_product_details(product_id)
create_order(user_id, product_id)
cancel_order(order_id)
Enter fullscreen mode Exit fullscreen mode

👉 Clear actions → better system behavior


🧭 Why This Matters

Good tool design leads to:

  • better model decisions
  • fewer errors
  • scalable architecture

🧭 What’s Next

Now that we know how to design tools properly,
there’s one more critical aspect:

How do we make these systems safe?

In the next post, we’ll cover security, validation, and guardrails —
the part that makes MCP systems production-ready.

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.