AIflowiz
All posts

Stop Installing MCP Servers. Start Designing an Integration Layer.

MCP solved the problem of connecting AI to your systems. It did not solve the problem of deciding what your AI should be allowed to touch, and that second problem is what stalls most AI pilots.

AAIflowiz Team
Jul 27, 202617 min read
Stop Installing MCP Servers. Start Designing an Integration Layer.

MCP solved the problem of connecting AI to your systems. It did not solve the problem of deciding what your AI should be allowed to touch, and that second problem is the one killing your pilot.

Here is the thesis, stated once and narrowed on purpose, because a sweeping claim is easier to dismiss than a specific one:

For any company past the demo stage, MCP is necessary and not sufficient. Adopting it as a shopping list of servers produces an agent that is slower, less accurate, and more dangerous than the three-tool version you started with.

That is not an argument against MCP. We build on MCP. It is an argument against the way most teams are adopting it right now, and against the assumption that a protocol can make an architectural decision on your behalf.

If you are evaluating MCP for your business, read the next ten minutes before you approve the first integration ticket.

First, the part MCP genuinely fixed

Give the technology its due before criticizing it. Anything less is a rant.

Before MCP, connecting an AI application to a business system meant writing a custom connector, in a format specific to whichever framework you had chosen, that nobody else could reuse. Five AI applications and five systems meant twenty-five connectors. Ten applications and fifty systems meant five hundred.

Engineers call this the N times M problem. It has two costs, and the second is the one that hurts.

The build cost is visible. Someone writes five hundred connectors. Fine, that is a budget line, and you can see it coming.

The maintenance cost is invisible until it lands. Every connector is coupled to an upstream API you do not control. When that API changes, and it will, every connector built against it breaks at once. Thousands of engineers across thousands of companies then discover the same break, read the same changelog, and write the same fix, in parallel, forever.

MCP, the Model Context Protocol, replaced this with a single agreed shape for the conversation. It is not software and there is nothing to install at the protocol level. It is a specification: if you are an AI application requesting capability, here is how you ask. If you are a system offering capability, here is how you describe yourself and how you respond.

The arithmetic changes from multiplication to addition. Five applications plus five tools is ten pieces of work instead of twenty-five. Ten and fifty is sixty instead of five hundred.

The MCP model: one AI application at the centre, every external system reached through the same connection

And maintenance shifts to the party with the knowledge. The team that owns the system writes and maintains its MCP server. When they change their API, they fix their server, and every consumer is fixed without touching anything.

That is a real win, it is large, and it is why MCP won. Anthropic released it as an open standard in late 2024, designed by David Soria Parra and Justin Spahr-Summers, which meant competitors could adopt it without asking permission. They did. Any protocol owned by one vendor is just a dependency wearing a costume. This one is not.

The adoption is not theoretical either, and the timeline is worth putting on record because it answers the "will this last" question better than any argument could.

Microsoft shipped MCP support in Copilot Studio on 19 March 2025. A week later, on 26 March, Sam Altman announced OpenAI was adding it across their products, and the Agents SDK shipped with it the same day. On 9 April, Demis Hassabis committed Google's Gemini models and SDK to it. By 19 May, Microsoft and GitHub had joined the MCP steering committee, with OpenAI joining days later. VS Code moved MCP from preview to generally available on 10 July 2025.

Read that order carefully. Microsoft adopted it before OpenAI did. Every major competitor of the company that wrote the protocol adopted the protocol, inside four months, without needing anyone's permission. That is the strongest possible signal that the standard is real.

Then, on 9 December 2025, Anthropic gave the protocol away for good. MCP was donated to the Agentic AI Foundation, established under the Linux Foundation and co-founded with Block and OpenAI. Its founding platinum members include AWS, Bloomberg, Cloudflare, Google, Microsoft and OpenAI. The protocol now has a neutral legal home, and the company that wrote it can no longer unilaterally change its licence or governance.

The usage numbers match the governance. The official TypeScript SDK is pulled from npm more than 176 million times a month. The reference server repository has passed 88,000 GitHub stars. The protocol has moved through five dated specification revisions, from November 2024 through June 2026, and there is an official registry for discovering servers.

If you were waiting to see whether MCP would stick before committing, that question is answered. This is settled infrastructure, not a bet.

Which is exactly why the failure mode has shifted. Nobody loses now by picking the wrong protocol. They lose by treating the protocol as the whole job.

So the plumbing problem is solved. Good. Now here is what happens when a company treats "solved plumbing" as "solved integration."

Problem #1: Tool sprawl is a context-window tax (Complexity)

Every tool an MCP server exposes has to be described to the model in text: its name, what it does, every parameter, every type, every constraint. That description is not free. It occupies your context window on every single request, before the user has typed a word.

Connect eight servers because each one looked useful in isolation and you are not connecting eight things.

Take a real example rather than a hypothetical. GitHub's own official MCP server documents roughly ninety tools. That is one server, from one vendor, doing one category of work. Add a database server, a Slack server, a ticketing server, and a file server, and you are carrying several hundred tool definitions in context on every request, before the user has typed a character.

The failure here is not a crash. Nothing errors. You just pay for a large block of tokens on every request, the model's working attention is diluted across a hundred options before it reads the actual question, and the useful part of the conversation gets squeezed toward the edge of the window.

Teams notice this as "the agent got worse after we added more integrations" and go looking for a prompt problem. It is not a prompt problem. It is an inventory problem.

The engineering principle underneath is old and boring: an interface with a hundred methods is a bad interface. Nothing about the interface being consumed by a model instead of a human changes that.

Problem #2: More tools means worse selection (Reliability)

This is the failure mode that costs the most and gets diagnosed the least.

The model does not execute your tools. It picks one and points at it. Selection is a judgment call made from text descriptions, and judgment degrades as options multiply, for the same reason a menu with two hundred items produces worse orders than a menu with twelve.

The specific ways it degrades:

  • Near-duplicate tools. Connect two servers that both touch customer records and you now have get_customer and fetch_customer_profile with overlapping descriptions. The model will pick between them by vibes, inconsistently, and you will get intermittent behavior that is miserable to reproduce.
  • Plausible wrong choices. A tool whose description is adjacent to the task gets selected because it reads relevant. It returns something, so nothing errors, and a wrong answer travels downstream wearing the costume of a right one.
  • Silent scope errors. Right tool, wrong arguments. Confident output built on the wrong record.

Notice the shape of all three: no exception, no stack trace, no alert. Your monitoring says the system is healthy because every call returned 200. Reliability failures that do not announce themselves are the expensive kind, because they are found by customers.

The blunt version: adding a ninth integration can make the other eight less accurate. Nothing in the protocol warns you about this, because it is not the protocol's job.

Problem #3: Every server you add is an attack surface you inherited (Security)

This is the one that should stop the meeting, and it is the least understood.

Your model reads tool descriptions and acts on them. That means text supplied by a server is text that influences model behavior. If a server is compromised, malicious, or merely careless, its tool description is a channel for instructions aimed at your agent.

This is not a fringe concern invented by consultants. The specification ships a dedicated security document, and its contents page reads like a penetration test report: the confused deputy problem, token passthrough, server-side request forgery, session hijacking, local server compromise, OAuth authorization URL validation, and scope minimization. The people who designed the protocol wrote that page because they know what they built.

Three of those deserve translation out of spec language, because they map directly onto decisions you are about to make.

The confused deputy. Your agent holds credentials for several systems. A request that legitimately reaches one server can induce action against another, because from the downstream system's view the call carries your agent's authority, not the requester's. The agent is trusted. The reason it acted is not checked.

Scope minimization, or the lack of it. A server given a broad token to "just make it work in the pilot" keeps that token in production. Nobody scoped it down, because scoping it down was never a ticket. The spec calls this out by name, which tells you how common it is.

Local server compromise. A server running on a developer machine has that machine's access. The spec treats this as its own attack class, separate from remote servers, because the blast radius is different.

To that list add one the spec does not name but the ecosystem has documented repeatedly: a tool description is text your model reads and acts on. A server that advertises itself with wording aimed at the model rather than the human is a real pattern, and the model does not cleanly separate "documentation" from "instruction" the way you assume it does. Treat that as an open risk rather than a solved one.

Now add the supply chain. The value of MCP is that anyone can publish a server. That is also the risk of MCP. Installing a third-party MCP server is a trust decision of the same weight as adding a dependency with network access and credentials, and it is routinely made with less scrutiny than a package upgrade, because it feels like configuration rather than code.

It is not configuration. It is code, with keys.

Problem #4: The protocol standardizes the call, not the policy (Maintainability)

Here is the belief that quietly wastes the most money: that adopting MCP means integration is now handled.

What MCP standardizes is the shape of the conversation. What it deliberately does not standardize is everything your business actually needs around that conversation:

  • Who is allowed to invoke what. Sales asks about a customer's billing. Support asks the same question. Same tool, and they should not be entitled to the same fields. MCP has no concept of your org chart.
  • What requires a human. Reading a record and issuing a refund are both tool calls. One of them needs a person in the loop. The protocol has no idea which.
  • Audit. When a customer disputes an action, you need to know which agent, on whose behalf, with what arguments, against what data, and why. That trail is yours to build.
  • Cost and rate control. An agent in a retry loop against a metered API is a bill, and it will find the loop before you do.
  • Failure behavior. A server times out. Does the agent retry, degrade, or stop and say so? Undefined by default, and the default of "improvise" is the worst option.

None of this is a flaw in MCP. A protocol that dictated your authorization model would be a worse protocol. But it means the work does not disappear, it relocates. You stopped maintaining five hundred connectors and started maintaining one policy layer, which is a very good trade and still a thing somebody has to design, own, and keep correct.

Teams that skip this step do not find out immediately. They find out the first time an agent does something defensible-looking that nobody authorized.

Problem #5: Every hop is latency and spend (Performance)

The economics of an agent loop are not the economics of an API call, and dashboards built for the second do not warn you about the first.

One user question can become a chain: the model reads the question plus a hundred tool definitions, picks a tool, waits for it, reads the result, picks another, waits again, then writes an answer. Three tool calls is four model round-trips, each one re-reading a context that grows with every result appended to it.

Two costs compound here and neither is obvious from a demo.

Latency stacks. Model inference plus network plus the tool's own execution time, multiplied by the number of hops, and users read the total as "the AI is slow" without caring which layer caused it.

Token spend grows non-linearly. The context is re-sent on every hop and it is larger every time, because each tool result was appended to it. A conversation that starts cheap does not stay cheap, and the pricing intuition people carry from single-shot chat is simply wrong here.

This is a solvable engineering problem. It is solved by exposing fewer, better-scoped tools, by returning compact results instead of raw payloads, and by not routing through the model at all when the task is deterministic. None of those are protocol features. All of them are design decisions.

The two ways to adopt MCP

The whole argument compresses into one comparison. Same protocol, two approaches, very different outcomes.

Installing servers

  • Tool inventory: whatever each server ships, all of it enabled
  • Selection: the model chooses from everything, every time
  • Access control: whatever the token allows, usually broad
  • Human approval: none, or bolted on after an incident
  • Audit: application logs, reconstructed under pressure
  • Failure behavior: whatever happens, happens
  • Cost visibility: discovered on the invoice
  • Time to first demo: an afternoon
  • Time to production trust: indefinite

Designing an integration layer

  • Tool inventory: curated, scoped to the job, named to be unambiguous
  • Selection: narrow, deliberate, no near-duplicates in play
  • Access control: per role and per action, least privilege by default
  • Human approval: required on anything that writes, spends, or sends
  • Audit: every invocation recorded with actor, arguments, and result
  • Failure behavior: explicit retry, degrade, and stop paths
  • Cost visibility: budgeted and capped per workflow
  • Time to first demo: about a week
  • Time to production trust: reached, and defensible to a customer or an auditor

The first column ships faster and stalls. It is the column that produces a pilot everyone was excited about in month one and nobody will approve for real customers in month four, because no one can answer what the agent is allowed to do.

The second column is the actual work. MCP makes it possible. It does not make it happen.

What to do instead, concretely

If you are adopting MCP right now, five steps, in order. This is the sequence we run, and none of it requires a large team.

1. Inventory before you integrate. List every system the AI might touch. For each one, write the specific job to be done, not the system name. "Look up order status for a support reply" is a job. "Connect Salesforce" is not. Jobs map to a handful of scoped tools. System names map to sprawl.

2. Cut the tool list, hard. Start with the smallest set that completes the top workflow end to end. If two tools overlap, remove one or rename both until a stranger could tell them apart from the descriptions alone. Fewer, sharper tools beat more tools in every dimension that matters: accuracy, cost, latency, and reviewability.

3. Split read from write. Reads can be broad. Writes, sends, spends, and deletes go behind explicit approval, and the approval is a product decision, not an engineering afterthought. This single split removes most of the risk in most deployments.

4. Scope every credential to the job. Each server gets its own token, permissioned to exactly the operations its tools need and nothing more. If a server would break under least privilege, that is information about the server, and it is better learned now than during an incident.

5. Log every invocation before you go live. Actor, tool, arguments, result, timestamp. Not because it is best practice, but because the first hard question you will be asked about your agent is "what did it do, and why," and you get one chance to have the answer already.

Run those five and MCP delivers what it promised. Skip them and MCP delivers a faster path to a problem you were previously too slow to create.

When the opposite advice is right

Scope matters, so here is where this argument does not apply.

If you are building a personal tool, a prototype, or an internal experiment on non-sensitive data, install whatever servers you want and move fast. The failure cost is a wasted afternoon. Governance overhead on a prototype is its own kind of waste, and treating an experiment like production is how companies never ship anything.

The line is specific and easy to check. The moment an agent touches customer data, moves money, sends anything on your behalf, or reaches a system where a wrong write is expensive to reverse, you are past the demo stage. Every argument above applies from that point forward.

Most teams cross that line without noticing, because the pilot that touched a test database quietly got pointed at the real one.

Where AIFlowiz fits

We build the second column.

Companies come to us in one of two states. Either the AI pilot works in a demo and nobody will approve it for real customers, or the integrations are already sprawling and the agent has gotten less reliable as it gained access to more systems. Both are the same root cause: a protocol was adopted where an architecture was needed.

What we do about it: map the jobs to be done, design the tool surface to be small and unambiguous, build the policy layer that decides who can invoke what and what requires a human, scope every credential, wire the audit trail, and put cost controls in before the invoice teaches you where they should have gone.

Then we hand it over with the reasoning documented, because an integration layer you cannot explain is one you cannot safely change.

If you recognise your own setup in any of this, the fastest useful thing is a conversation about two specific things: your actual tool inventory, and where the write operations are. That pair surfaces the real problem in about an hour, and you will know more about your own risk either way.

Talk to us about your AI integration layer before you approve the next server.

The protocol is settled. The architecture is still yours to get right, and that was always the part that decided whether this works.

[ Written by ]

A

AIflowiz Team

AIflowiz / Production AI Studio

[ Continue reading ]

You might like.

All posts