← All writing
5 min read

What makes an MCP agent production-grade?

The difficult part is not giving a model tools. It is designing the permissions, evidence, evaluation, and operating model around those tools.

AI systemsMCPEngineering operations

An agent that can call a tool is easy to demonstrate. An agent that engineers can trust inside a real workflow is a systems problem.

The difference appears as soon as the agent leaves a controlled demo. Production systems contain ambiguous names, stale documentation, partial outages, sensitive data, and permissions that exist for a reason. Tool calls can time out. APIs disagree. The user may ask a reasonable question whose answer requires access they should not have.

MCP is useful because it gives AI applications a consistent way to discover and invoke tools. It does not remove the need to decide what should be exposed, who may invoke it, or what evidence is required before anyone acts on the result.

Start with the workflow, not the model

The first design question is not “which model should we use?” It is “which decision or task are we trying to improve?”

A useful operational workflow has a recognizable trigger, a bounded set of inputs, and an outcome someone can evaluate. Examples include:

  • assembling the evidence needed to begin an incident investigation;
  • identifying the owner and recent changes for a failing service;
  • drafting a change plan from an approved runbook;
  • checking a deployment against production-readiness requirements.

This framing exposes whether an agent is even the right tool. A fixed transformation, approval rule, or API orchestration is usually better implemented deterministically. An agent earns its place when the work requires interpreting incomplete context, selecting among tools, or composing evidence into a useful explanation.

Treat every tool as a capability

An MCP server is not merely a convenient wrapper around APIs. It is a capability boundary.

Each tool should have a narrow purpose, explicit inputs, a predictable response, and an owner. Avoid generic tools such as run_query when the real workflow only needs get_service_health or list_recent_deployments. Narrow tools are easier to authorize, observe, evaluate, and explain.

Read and write capabilities should be separated. A production agent may be allowed to gather logs and deployment metadata while requiring a person to approve any rollback or configuration change. That separation should exist in the tool and authorization design, not only in the prompt.

Useful questions for every tool include:

  1. Which identity is used when the tool runs?
  2. Is authorization evaluated for the requesting user or for a shared service account?
  3. What is the smallest scope the tool needs?
  4. What sensitive data can appear in the result?
  5. Is the operation idempotent, reversible, or destructive?
  6. What is recorded for later investigation?

If these answers are unclear, adding an agent makes the ambiguity harder to see, not safer.

Preserve evidence, not just prose

Operational answers should carry their provenance.

If an agent claims that a deployment caused an incident, the useful output is not a confident paragraph. It is a statement connected to the deployment record, relevant telemetry, timestamps, and the uncertainty in the inference. Engineers must be able to inspect the underlying evidence without recreating the entire tool sequence.

A practical response model separates:

  • observations returned directly by systems;
  • inferences made by the model;
  • recommended actions that still require judgment;
  • sources a responder can open and verify.

This also improves evaluation. A fluent answer with incorrect attribution should fail even when it sounds plausible.

Build evaluation around the workflow

Generic language-model benchmarks say little about whether an operational agent is useful.

Create a set of representative workflow cases instead. Include ordinary requests, missing data, permission failures, conflicting sources, tool timeouts, stale documentation, and requests that should be refused. For each case, record the properties that matter:

Property Example question
Tool selection Did the agent choose the relevant source without unnecessary calls?
Evidence quality Are important claims supported by inspectable sources?
Authorization Did access remain within the requesting user’s permissions?
Uncertainty Did the response distinguish missing evidence from a negative result?
Safety Did a risky action require the intended approval?
Usefulness Could an engineer take the next step faster and with adequate context?

Some checks can be automated. Others need reviewers who understand the workflow. The goal is not a single score; it is a repeatable way to see whether a change improved or weakened the system.

Instrument the agent as a production system

Agents need ordinary operational discipline. Capture request identifiers, tool names, latency, result status, retry behavior, token usage, and evaluation outcomes. Do not place raw secrets, credentials, or unrestricted tool output into logs.

Tracing should make it possible to answer:

  • Which tools were attempted, and in what order?
  • Where did time accumulate?
  • Which source supported a claim?
  • Was a result filtered because of authorization?
  • Did a human approve the final action?
  • Which prompt, model, and tool versions produced the behavior?

The trace is not only for debugging. It is part of the evidence that the system is behaving within its intended boundary.

Design failure as deliberately as success

Operational systems are most valuable when conditions are already abnormal. That is exactly when tools are slow, telemetry is incomplete, and documentation is least reliable.

A production-grade agent must be able to stop cleanly. It should report when a source is unavailable, avoid converting missing data into certainty, and preserve the user’s ability to continue manually. Retries need limits. Timeouts need meaning. Partial results should be labeled as partial.

For write operations, require explicit confirmation near the moment of action. Show the proposed change, target, expected effect, and rollback path. Re-check authorization at execution time rather than treating an earlier conversation turn as permanent consent.

The operating model is part of the product

Someone must own tool definitions, access policy, evaluation cases, incident response, and changes to the agent. A prototype can be owned by its creator. A production system needs a team that can answer why it behaved a certain way and safely change that behavior.

The durable value of an MCP agent is not that it can call many tools. It is that it can improve a specific engineering workflow while remaining understandable when systems, data, and assumptions are imperfect.

That requires less magic than most demonstrations suggest—and more careful engineering.

Start a conversation

Have an expensive engineering problem?

Tell me what you are dealing with. If it is within my area of experience, I will tell you whether I think I can materially help.

Discuss an engagement