Quick read · 7 min read
This guide gives technology leaders a practical, phased path to connecting AI agents to company data without exposing legacy systems, sensitive information, or audit trails to unnecessary risk.
Key takeaways
- Start with read-only access to non-sensitive data before letting any agent change records.
- Wrap old systems in adapter layers instead of connecting agents directly to legacy databases.
- Require per-tool permissions and full audit logs for every agent connection, not just at the server level.
- Measure success by how much custom code you delete and how fast new data sources go live. <!-- omnithium-quick-read:end -->
MCP only works in the enterprise if you treat it as a governed context-routing layer, not a plug-and-play integration standard. Start read-only, wrap legacy systems in adapters, require human approval for writes, and measure by deleted code and onboarding time. The protocol itself is the easy part. Authorization, auditability, and schema evolution are where teams fail.
What MCP changes
Anthropic published the Model Context Protocol in late 2024. The spec defines a JSON-RPC contract. MCP replaces bespoke tool wrappers with that contract. Servers expose tools, resources, and prompts. Clients discover and call them. The win isn't "AI can now talk to everything." The win is one MCP server per system, policy enforced at that server, and multiple agents consuming it without reimplementing auth, retries, or output parsing. The cost is another network hop, another process to operate, and a new prompt-injection surface if tool descriptions or results are attacker-controlled.
A concrete trade-off: a read-only MCP server for Jira adds 80 to 150 ms p50 latency versus a direct REST call. You accept that because you delete per-agent Jira clients and centralize rate limiting, schema mapping, and PII redaction. If your agent runs in a latency-sensitive loop, batch tool calls or cache resource reads.
Phase 0: inventory and threat model
Before deploying any MCP server, list the systems agents will touch. Classify each by data sensitivity and write capability. The decision isn't "MCP yes or no." It's "which tools, with which scopes, under which approval workflow."
For each candidate system, ask:
- Does the agent need read, write, or both?
- What's the blast radius of a bad tool call? Read-only docs versus delete customer records.
- Can the underlying API enforce per-tool, per-tenant, or per-field permissions?
- Do you have audit logs that capture tool arguments and results, not just HTTP 200s?
- What's the token cost of a typical result? A 10 MB PDF returned as a resource will blow the context window.
Practitioner write-ups on EnterpriseAI raise the same legacy adapter and security review concerns. Use this matrix to assign each integration to a phase. The diagram below is the decision flow we use internally.
Rollout decision matrix
Compare rollout choices by operational fit, risk, and the level of control the team needs.
Phase 1: read-only, non-sensitive
Start with systems where a wrong answer is annoying but not catastrophic: internal wikis, code search, build logs, read-only ticket views. Deploy MCP servers in an isolated namespace with no egress to production write APIs. Enforce per-tool allowlists at the MCP gateway, not just at the server. For example, if your GitHub MCP server exposes create_issue, disable that tool in the gateway config for all Phase 1 clients.
Require every tool call to include a traceparent or equivalent correlation ID. Log the tool name, arguments, principal, and a hash of the result. Don't log raw result bodies unless you have a legal and storage reason. They often contain PII or secrets.
Measure two things in Phase 1:
- Time-to-first-tool: how long from "we want agent access to system X" to a working, governed MCP server. If it's more than a few days, your adapter pattern is too heavy.
- Token cost per task: how many tokens of tool output the agent consumes per successful task. If a simple question pulls 50k tokens of wiki pages, you need result summarization or resource filtering.
Phase 2: adapter layers for legacy systems
Don't point an MCP server at a legacy database or a 20-year-old SOAP API. Build an adapter that translates the legacy interface into a small set of typed tools. A manufacturer connecting SAP ERP to an AI assistant for maintenance queries builds an MCP adapter that translates proprietary APIs into MCP tools without modifying the legacy system. The adapter should:
- Enforce a strict output schema (JSON Schema, not free text).
- Apply rate limits and timeouts that match the legacy system's actual capacity.
- Redact or mask PII before returning results to the model.
- Version its tool definitions. Changing a tool signature breaks agents that have learned the old schema.
The trade-off is extra code and latency. A legacy mainframe call may take 2 to 5 seconds. Adding an adapter and MCP serialization adds another 100 to 300 ms. That's acceptable when the alternative is a model hallucinating a SQL query against a production replica. The adapter is also where you implement idempotency keys for any write path you later enable.
Phase 3: write paths with human approval
Only after read-only tools have run for weeks without an incident should you consider write tools. Even then, start with low-risk writes: creating a draft, adding a comment, updating a status field. Require:
- Per-tool permissions: a client that can read Jira issues can't necessarily create them. MCP servers often expose all tools to any authenticated client. You must enforce finer-grained authorization at the gateway or in the server.
-
Dry-run mode: every write tool should accept a
dry_runparameter that returns the exact payload and target without executing. Agents should call dry-run first, then a human approves the real call. - Idempotency keys: network retries must not create duplicate records. The adapter should generate or accept a client-supplied key and deduplicate.
-
Audit log with decision context: log the agent's reasoning or the human approval event alongside the tool call. A log that says
update_ticket(123, status=closed)isn't enough. You need to know why and who approved.
A common failure is treating MCP server authentication as sufficient. It isn't. A single long-lived API key on the MCP server means any prompt injection that convinces the agent to call delete_customer will succeed. Use short-lived, scoped credentials per tool call, or a policy engine that evaluates each call against the principal, resource, and action. A security lead at a healthcare company evaluating a third-party MCP server for EHR integration requires a red-team exercise and a signed software bill of materials before allowing it in staging.
Phase 4: scale and measure
Once you have a dozen MCP servers, the bottleneck shifts to operations. You need a registry of servers, their tool schemas, versions, and owners. You need canary deployments for tool definition changes. You need to measure:
- Custom code deleted: count the lines of bespoke API client code removed from agent frameworks. This is the primary ROI.
- New data source onboarding time: from request to production read-only tool. If it's not decreasing, your adapter templates aren't reusable.
- Incident rate per tool call: track tool-level errors, timeouts, and policy denials. A high denial rate means your agents are attempting things they shouldn't. Fix the prompts or the tool descriptions.
The operating model below shows how the MCP gateway, policy engine, and audit store fit together.
Enterprise agent operating model
Click each stage to inspect the controls that keep an agent workflow reliable after launch.
Anti-patterns to avoid
- MCP server sprawl: one server per microservice is fine. One server per agent isn't. Consolidate by domain.
- Long-lived tokens: rotate credentials per server, and use per-tool scopes.
- No schema versioning: changing a tool's input schema silently breaks agents. Use semantic versioning and deprecation warnings.
- Treating MCP as an ESB: MCP isn't a message bus or an orchestration engine. Don't route all enterprise traffic through it.
- Ignoring context budget: every tool result consumes tokens. Add a result size limit and a summarizer for large resources.
Bottom line
MCP is a useful contract for connecting agents to enterprise systems, but the hard part isn't the protocol. The hard part is per-tool authorization, auditability, schema evolution, and operational discipline. Start read-only, wrap legacy systems in adapters, require human approval for writes, and measure by deleted code and onboarding time. If you do that, MCP becomes a governed context-routing layer instead of another unmanaged integration surface.


Top comments (0)