DEV Community

Cover image for Your Small Business Agent Does Not Need Every Tool
Stephen Phillips
Stephen Phillips

Posted on

Your Small Business Agent Does Not Need Every Tool

A small business usually does not need a smarter agent first. It needs an agent with fewer ways to get lost.

That sounds backwards when the default pitch is “connect everything”: email, CRM, database, website, accounting, calendars, search, social, and a dozen specialist services. MCP makes those connections easier. A client can discover tools from servers instead of shipping a custom integration for each one.

The temptation is to expose the whole toolbox and let the model choose.

For a five-person business, that is the wrong default. The first useful agent should see a small, task-specific set of tools. It should prepare work before it performs side effects. When the tool list changes, that change should be visible and reviewable.

The problem with a giant toolbox

Tool descriptions sit in the agent’s working context. A large catalogue costs tokens. The bigger cost is ambiguity. If an agent can search five systems, update three records, send messages, and edit a workflow, every request becomes a routing problem before it becomes a business problem.

Familiar failure modes:

  • The agent picks a tool that is technically valid but operationally wrong.
  • A read-only request shares context with write-capable tools.
  • Similarly named tools point at the wrong account or environment.
  • A server update adds a tool and quietly changes the agent’s choices.
  • Nobody can reconstruct why a particular action was selected.

The MCP tools specification supports discovery through tools/list and lets a server notify clients when the tool list changes. That is useful for growth. It also means the action surface is not static. Treat tool exposure as configuration, not a one-time onboarding step.

The question is not “Can this agent access the system?” It is “Which two or three capabilities does this job need right now?”

Route by job, not by vendor

Imagine a local company that receives quote requests through a WordPress form. The owner wants an assistant to sort them each morning and prepare replies.

A broad setup might expose WordPress, email, CRM, calendar, files, web search, and accounting. Plenty of options for the model. Plenty of permissions for the owner to worry about.

A routed setup gives the quote-triage task only:

  1. read_new_quote_requests
  2. lookup_customer_record
  3. prepare_quote_reply
  4. queue_reply_for_approval

The underlying services can stay the same. A routing layer presents a narrow contract for this task. Email-send is not available while the agent is classifying requests. Accounting tools are not in context at all.

This is not a claim that models stop making mistakes. It makes the mistakes smaller. A wrong choice from four tools is easier to inspect than a wrong choice from forty.

A useful router can select by:

  • the user’s task (“triage today’s enquiries”)
  • data sensitivity
  • whether the next step is read-only or changes state
  • business hours or approval policy
  • how complete the request is

The router should return a tool set plus a short reason. That reason becomes part of the run record: quote_triage -> read_quotes, lookup_customer, prepare_reply.

Keep read and write paths separate

The cleanest first boundary is between gathering information and changing something.

A read path can collect a form submission, retrieve the matching customer record, and draft a response. A write path can create a CRM task or send an email, but only after a person approves the proposed action or a clearly defined policy allows it.

That separation matters more than a clever system prompt. A prompt can say “do not send email without approval.” A permission boundary can make sending unavailable until approval exists.

In an MCP system that can mean separate servers, separate credentials, or a proxy that filters tools based on workflow state. Implementation varies. The operating rule does not: do not give a classification step the ability to perform the final action.

n8n’s human-in-the-loop tool patterns are a practical model here. The workflow can pause at a sensitive tool call, ask for approval in Slack/Telegram/chat, then resume with the approved action. That bridges “assistant only drafts” and “assistant runs unattended.”

Make tool changes boring and visible

Dynamic discovery is useful when a business adds a service. It becomes dangerous when the tool list changes and nobody notices.

Put the exposed tool set in a versioned config file, even if the underlying MCP servers are dynamic. For each workflow, record something like:

workflow: morning-quote-triage
allowed_tools:
  - read_new_quote_requests
  - lookup_customer_record
  - prepare_quote_reply
  - queue_reply_for_approval
blocked_tools:
  - send_email
  - edit_wordpress
  - create_invoice
policy: approval-required-for-external-messages
Enter fullscreen mode Exit fullscreen mode

When a tool is added, removed, or renamed, write a small change record. Test the workflow with a fixture, then ship the new set. Ordinary release hygiene. An agent’s tool catalogue is part of its application surface.

The same applies with a local model. Ollama supports tool calling, but a local model does not remove the need for boundaries. It can make the data path more private and cost more predictable. It cannot decide whether send_customer_email is appropriate just because the schema is valid.

Store a receipt for every route

A useful run record does not need private customer content. Store the operational facts:

  • workflow name and version
  • request category
  • tools made available
  • selected tool and redacted arguments
  • approval state
  • duration and result status
  • final human or system outcome

That record answers the questions an owner eventually asks: Why that action? Which tools were available? Did a person approve it? Was the failure in the model, the router, or the downstream service?

Do not log full email threads or customer records by default. Prefer identifiers, hashes, and small redacted summaries. Debug the workflow without creating a second copy of the business’s sensitive data.

A small pilot you can finish in a week

Start with one repetitive workflow that has a clear finish line. Quote triage, appointment requests, or a daily content queue beat “run the business.”

Day one: write the desired outcome and the actions that stay human-approved.

Day two: expose only read and draft tools; run a few representative examples.

Day three: add the approval queue and a receipt record.

Then measure the boring things: time saved, wrong classifications, approval turnaround, failed tool calls.

If the workflow is reliable, add one capability at a time. If it is not, shrink the tool set before you change the model.

That last step is easy to skip. People often respond to bad choices with another instruction, another retrieval step, or a larger model. Sometimes the fix is removing seven tools the task never needed.

MCP makes connected tools easier to build. Good routing makes them easier to operate. For a small business, the practical win is not an agent that can do everything. It is an assistant with just enough access to finish one job, that asks before it crosses a boundary, and leaves evidence when something goes wrong.

Source notes

Top comments (0)