Make tools match real tasks

A good tool names the job, not the plumbing behind it.

Is Agenticis-agentic.com
The score is an at-a-glance summary; the individual checks and evidence are the useful part of the report.
MethodologyRead docs ↗

Notes from the Is Agentic checks and report format.

Pick a tool for the request

Change the request and compare the plans.

Generic primitivesBad
  • get_record
  • patch_record
  • send_request

send_request(method, path, body)
Task-shaped toolsGood
  • refund_order
  • get_order_status
  • reschedule_delivery

refund_order(orderId, reason)
const refundOrder = tool({
  description: 'Refund one paid order after checking eligibility.',
  inputSchema: z.object({
    orderId: z.string().describe('The public order ID'),
    reason: z.enum(['duplicate', 'late', 'customer_request']),
  }),
  outputSchema: z.object({
    refundId: z.string(),
    status: z.literal('pending'),
  }),
  needsApproval: true,
});

Why it matters, pros and cons

Why it matters

Generic primitives expose your database shape and make the model reconstruct business rules. A task-shaped tool keeps those rules on your side.

Pros

  • Fewer calls and fewer invented fields.
  • Descriptions can state real preconditions.
  • Authorization sits behind one business action.

Cons

  • Huge tools can become vague mini-APIs.
  • New tasks still need new capabilities.
  • Read-only primitives can be useful for exploration.