MCP Best Practices: Engineering Reliable Agent Tooling at Scale
What Are MCP Best Practices​
MCP Best Practices are the proven engineering principles, architectural patterns, and operational disciplines required to build scalable, secure, and maintainable systems using the Model Context Protocol. While the MCP specification defines the what—JSON‑RPC messages, transports, and capability primitives—best practices define the how: the structural decisions, trade‑offs, and organizational habits that separate a working prototype from a production system.
An MCP server that works on your laptop is not a production MCP server. Production MCP requires governance of outbound calls, identity propagation across clusters, tool versioning, prompt lifecycle management, and observability that spans from the user’s prompt to the tool’s response. The protocol gives you the socket; best practices give you the discipline to keep the building from burning down.
Why MCP Best Practices Matter​
Good MCP design is not about following rules—it is about making trade‑offs that align with how LLMs actually behave in production. Every decision shapes system behavior: naming a tool poorly confuses the LLM; omitting a schema invites parameter hallucination; failing to version a tool breaks every client when you change it.
| Challenge | Without Best Practices | With Best Practices |
|---|---|---|
| Tool catalog scale | 100 tools → LLM context window exhausted before any work happens | Tool catalog filtered intelligently to 8–10 relevant tools |
| Secret management | Credentials stored in .env files, leaked in logs | Secrets stored in vault, injected at runtime, rotated centrally |
| Tool evolution | Breaking changes deployed silently → clients break | Semantic versioning, additive‑only changes for backward compatibility |
| Prompt drift | Prompts scattered in code, no version history | Central registry, Git‑backed, CI validation |
| Cross‑cluster identity | Shared service account tokens, no per‑request identity | OAuth 2.1 with PKCE, per‑request token validation, workload identity |
| Multi‑server coordination | All tools dumped into LLM context indiscriminately | Gateway layer with capability routing, policy enforcement before invocation |
The cost of ignoring best practices is not theoretical. GitHub’s MCP server, after community contributions, supported over 100 tools covering repositories, issues, pull requests, actions, and projects. Rather than improving agent performance, this expansion degraded agent capabilities—agents became confused and forgetful because context windows filled up too quickly. The problem was not the tools themselves, but the approach of dumping large amounts of tool context directly into the LLM’s context window without intelligent filtering or selection.
MCP System Design Principles​
1. Workflow‑Driven Design, Not API Wrapping​
A REST API is designed for a human developer who reads the documentation once, writes integration code, debugs it, and then runs it forever. An MCP server is designed for an LLM agent—a client with no persistent memory of your API, no debugger, and a finite context window. Every tool description is part of the prompt, every intermediate response is part of the conversation history, and every extra round trip is a chance for the model to lose the thread.
Do not wrap each API endpoint individually. Do think in terms of user workflows, combine multiple internal API calls into a single high‑level tool, and clearly outline steps and dependencies. Workflows, not endpoints, should drive design.
2. Single Responsibility, Bounded Context​
From the outset, design each MCP server as a single, bounded context rather than a catch‑all host for disparate tools and resources. MCP is built around concepts like tools, resources, and prompts as first‑class primitives. Focusing your MCP server on one domain keeps tool sets manageable, documentation clear, and authorization boundaries well‑scoped.
A single server that wraps five different APIs will inevitably accumulate dozens of tools, each consuming precious token budget. Teams hitting scaling walls often run into this exact pattern—connecting multiple comprehensive tool catalogs across their entire stack. Each tool definition consumes 400–600 tokens, so five servers with 50 tools each burn 75,000–100,000 tokens just describing what is available before reading the user’s question or doing any work.
3. Capability Separation: Tools vs Resources vs Prompts​
MCP defines three primitives, and using the right one is half the design work:
| Capability | Purpose | Use When |
|---|---|---|
| Tools | Functions the model decides to call | Actions have side effects, or the model needs the result to continue reasoning. Typically coarse‑grained. |
| Resources | Data the model reads when it needs context | Read‑only data that does not change state. Addressed by URI, no side effects. |
| Prompts | Reusable templates for structured workflows | User (or agent) explicitly invokes to start a patterned conversation. |
MCP is not an API wrapper, and a good REST API is not a good MCP server. Treating MCP as a thin wrapper layer—enumerating your endpoints, wrapping each one in a tool, and calling it a day—almost always produces a bad agent. Simple requests take five tool calls, the agent loses track halfway through, and the conversation history balloons with intermediate JSON the user never asked to see.
4. Make Contracts Explicit​
Typed schemas are not optional decorations. They are the contract that prevents ambiguity when AI clients ask for actions or data. Always define clear input/output schemas for tools, using schemas that are both LLM‑friendly and machine‑verifiable. This means structuring schemas with strict typing, documented error cases, consistent naming, and exhaustive validation.
Block emphasizes that tool names, descriptions, and parameters are treated as prompts for the LLM, requiring clear instructions. For complex parameters, use Pydantic models (or equivalents) that support model and field descriptions alongside JSON Schema serialization.
5. Secure from the Ground Up​
Security is not an add‑on. The OWASP MCP Top 10 ranks token mismanagement and secret exposure as the #1 risk, with 88% of MCP servers requiring credentials to operate and 53% relying on static API keys or personal access tokens. These are long‑lived credentials that require manual rotation to stay secure.
Every request crossing the boundary between client and server must be authenticated and authorized. Authentication answers “Who is making this request?” Authorization answers “What can they do once they are identified?”
6. Observability as a First‑Class Concern​
MCP servers have no built‑in observability. Without instrumentation, tool‑call latency, errors, and performance baselines remain invisible. Success in production MCP demands continuous monitoring: visibility into which tools are used, latency distributions, error rates, and security anomalies.
7. Stateless by Default​
Design MCP servers as stateless, focused services. Use containerization, rely on automation and clear schemas to ensure reliable scaling. Stateless servers can be horizontally scaled, survive crashes without losing context, and simplify deployment operations.
MCP Capability Design Best Practices​
Tools: Coarse‑Grained and Workflow‑Focused​
The single most common mistake when building an MCP server from a REST API is treating MCP as a thin wrapper layer, creating one tool per endpoint. The result is a server that technically works but feels frustrating to use through an agent.
Bad practice: Expose separate tools: get_user, get_orders, create_ticket, send_notification, update_user, delete_file, upload_document—each a raw endpoint wrapper.
Good practice: Combine related operations into a single, workflow‑oriented tool that reflects a complete user goal. Instead of chaining get_user → upload_file → update_user, create onboard_user(name, file_path) that does everything needed in one call. This reduces tool count, token consumption, and the number of chances for the model to lose the thread.
Resources: Read‑Only, URI‑Addressed, No Side Effects​
Resources are the right primitive when the model needs to pull a piece of information into its context but does not need to “do” anything. Use resources for reference data, configuration, schemas, policies, and documentation—anything that is read‑only and can be addressed by a stable URI.
Prompts: Stateless, Versioned, User‑Controlled​
Treat prompts as stateless, versioned interfaces. Keep prompts side‑effect‑free and outcome‑predictable; route actions through tools. Define argument schemas and validate types and presence at the server boundary to avoid injection and runtime ambiguity.
Prompts are designed to be user‑controlled, exposed from servers with the intention of the user being able to explicitly select them, not something the agent autonomously decides to call.
MCP Tool Versioning: The Unsolved Problem​
The MCP specification currently lacks a formal versioning system. Tools can be updated on the server side at any time, with changes ranging from minor patches to significant breaking alterations in functionality. This creates instability: a client developed against a specific version may fail unexpectedly, and reproducibility becomes impossible.
Until the protocol standardizes versioning, follow these patterns:
- Additive‑only changes – Never remove parameters, never rename them. Add new optional parameters. This covers 80% of real‑world changes while maintaining backward compatibility.
- Tool name versioning – For breaking changes, create
search_orders_v2while keepingsearch_ordersoperational. Clients that expect the old behaviour continue to work. - Semantic versioning for servers – Use semantic versioning for server version strings. Align the server version with the underlying package version to prevent confusion.
- Tool requirements negotiation – SEP‑1575 proposes adding version metadata to tool definitions and
tool_requirementsto client requests, allowing version constraints similar to package managers. Implement this pattern even before standardization.
MCP Security in Depth​
OAuth 2.1 with PKCE is Mandatory​
MCP now relies on OAuth 2.1, the same protocol that already secures much of the modern web. For all remote MCP servers, OAuth 2.1 with PKCE is required. PKCE protects the authorization code exchange without requiring a client secret and prevents authorization code interception attacks. Public clients MUST use PKCE for OAuth 2.1 compliance.
The MCP specification published on June 18, 2025 implemented comprehensive OAuth 2.1 authentication support, including bearer token authentication capabilities and robust multi‑user session handling.
Token Validation Per Request​
Authentication is not a one‑time event. Tokens must be validated on every request crossing the boundary between client and server—not just at session establishment. Validation steps include: verifying signature, checking issuer (iss) and audience (aud), ensuring expiry (exp) has not passed, and confirming scope includes required permissions.
Least Privilege Scopes​
Design scopes that are fine‑grained enough to enforce meaningful boundaries but coarse enough to be manageable. Each tool should require the minimal OAuth scope necessary. Do not grant payments:write to a server that only needs to read orders.
Secret Management​
Keep credentials out of the server entirely. Store them in a vault, encrypted. Pull at runtime, use, drop. Rotate a password once in the vault, and every instance picks up the new value on the next call. The pattern is: workload identity, a vault, and runtime resolution.
Monitoring and Alerting​
Monitor tool usage patterns for anomalies, authentication failures, parameter validation failures, and path traversal attempts. IronContext is a Rust‑core security and optimization engine that inspects MCP tool manifests for prompt injection and supply chain attack patterns, scoring each tool with a quantitative Reasoning‑Impact Score (RIS) that grades hallucination risk on a 0–100 scale.
MCP Observability​
Observability is not optional. Without instrumentation, MCP servers become blind spots in AI infrastructure.
What to Monitor​
- Tool execution metrics: success rate, P95 latency, error counts by tool, saturation (rate‑limited calls)
- Authentication metrics: token validation success/failure, scope usage
- Resource access metrics: frequency and latency of resource reads
- Prompt usage: invocation counts, argument distributions, error rates
Implementation Guidelines​
- Use strong access controls and authentication – MCP servers should enforce strict authentication and authorization to ensure AI tools only access data they are explicitly permitted to use.
- Monitor and log MCP server activity continuously – Visibility is essential for both security and reliability. Without continuous monitoring, MCP servers quickly become blind spots.
- Protect data with industry‑standard encryption – Use encryption both in transit (TLS 1.2+) and at rest (AES‑256) for sensitive data processed by MCP servers.
- Instrument with OpenTelemetry – Add spans for every tool invocation, every resource read. The same OpenTelemetry infrastructure that monitors your microservices should monitor your MCP servers.
GitHub’s Production Metrics​
GitHub’s MCP server serves approximately 7 million tool calls weekly with over 95% success rate, supporting diverse user security postures while continuously optimizing for reduced token usage and improved agent effectiveness. Their production data demonstrates that with proper observability, MCP can scale to enterprise traffic volumes.
MCP Server Operational Patterns​
Stateless Design with External State​
Design MCP servers as stateless where possible. If state is required (sessions, workflows), store it in an external store (Redis with TTL, database) rather than in‑memory. Stateless servers scale horizontally, survive pod restarts, and simplify deployment.
Transport Selection​
Two main transport options exist for MCP servers:
| Transport | Best For | Characteristics |
|---|---|---|
| Streamable HTTP | Shared, networked access at scale (across teams or tenants) | Stateless scaling, per‑request auth, standard HTTP infrastructure |
| stdio | Local, embedded workflows | Isolation, simplicity, no network exposure |
The transport layer should not dictate your service logic, but getting it right early reduces surface area for bugs and security misconfigurations.
Context Window Management as a Primary Scaling Concern​
When you connect multiple MCP servers—especially five or more—the LLM must process 75,000–100,000 tokens just describing tool definitions before doing any work. This can represent 80–90% of input tokens on a typical query. You are paying for a massive catalog dump when you only need a handful of tools.
Three problems emerge at scale:
- Context window exhaustion – Each tool definition consumes 400–600 tokens.
- Tool selection accuracy degradation – Models struggle to pick the right tool from hundreds of similar‑looking options.
- Tool execution payload bloat – Tools return massive payloads (e.g., emails consuming 17–20k tokens each).
Mitigations:
- Tool catalog filtering – Intelligent routing layers that filter visible tools to 8–10 relevant tools per query
- Progressive tool discovery – Reveal tool schemas only when they are needed
- Token budget awareness – Implement checks inside tools to guard against token overflows: check byte size, character count, or estimate token count before returning text
Horizontal Scaling​
Deploy stateless MCP server replicas behind a load balancer. Use Kubernetes with horizontal pod autoscaling based on CPU, memory, or custom metrics (e.g., requests per second). For Streamable HTTP, the server is naturally stateless; each replica can handle any request without affinity.
Multi‑Agent Coordination​
When multiple agents share the same MCP infrastructure, explicit coordination patterns become necessary.
Shared Capability Boundaries with Isolation​
Use a gateway layer between agents and MCP servers. The gateway aggregates multiple MCP servers behind a single endpoint, handling tool catalog filtering, authentication, policy enforcement, and routing. This prevents the tool sprawl problem—each agent sees only the tools it needs, not the entire enterprise catalog.
Workspace Isolation for State‑Modifying Agents​
For parallel execution where multiple agents might mutate the same resources, extend MCP with a Workspace layer—primitives that any state‑mutating agent can use to get isolation without rewriting tools. Multiple subagents can work simultaneously without stepping on each other; each gets its own workspace, enabling true parallel execution.
Role‑Based Tool Access​
Implement RBAC to control which agents can invoke which tools. A support agent should not see infrastructure deployment tools, and a compliance agent should not see customer support tools. Enforce these boundaries at the gateway or at each MCP server.
Agent Identity Management​
Traditional human‑centric identity systems are insufficient for agents. Tailored agent identity solutions improve security and control. Build agents with limited, well‑defined scopes, implement least privilege, and use observability tools like OpenTelemetry for monitoring and safety.
MCP in the Enterprise​
Enterprises face distinct challenges when scaling MCP from prototype to production. A developer can ship an MCP server in an afternoon, but getting that same server running in regulated production—with credentials provisioned, access controls enforced, and security sign‑off obtained—takes weeks. Enterprise MCP adoption depends on getting five things right: identity, networking, authorization, observability, and security.
The Five Critical Properties​
- Security model enhancement – OAuth 2.1 with PKCE as the baseline, not an afterthought
- Deterministic tool execution – Versioned tools with backward‑compatible evolution
- Token cost management – Context window optimization as a primary design constraint
- Auditability – Complete traceability from user prompt to tool execution
- Governance framework – Policies that give IT oversight without blocking development
Virtual Server Architecture​
In enterprise deployments, “virtual servers” represent isolated MCP environments tailored to specific use cases, teams, or roles. Rather than giving all users access to a single shared server, virtual servers let you carve out purpose‑built environments with their own tool catalogs, permissions, and audit trails.
A finance team might access ERP tools in a read‑only virtual server, while an operations team works within a separate environment connected to supply chain workflows. Neither team can see or invoke the other’s tools. This architecture prevents tool sprawl, supports policy‑based access, and contains the blast radius of any compromise.
Egress Governance​
Traditional governance authenticates external requests and protects exposed endpoints. Agentic systems flip this assumption. A single MCP server might hit internal microservices, CI pipelines, customer databases, and external platforms in the same workflow—all initiated dynamically. That breaks the assumption that governance lives at the perimeter. Lateral movement risk goes up, and there is no point where traffic gets inspected before it leaves.
Teams handle this by adding an egress proxy or outbound governance layer that evaluates policy on every call. The pattern is: an egress proxy that checks policy before allowing outbound traffic.
Cross‑Cluster Identity​
Enterprise deployments rarely stay inside a single cluster. Servers run across multiple Kubernetes clusters, VPCs, and clouds. The solution is a control plane where all servers are registered and can be discovered, secured, and governed consistently, combined with a service mesh for cross‑cluster connectivity.
CData’s Production Recommendations​
CData’s enterprise MCP best practices for 2026 emphasize:
- Use strong access controls and authentication – RBAC, least‑privilege permissions, MFA for administrative actions
- Monitor and log MCP server activity continuously – Visibility is essential for both security and reliability
- Protect data with industry‑standard encryption – TLS 1.2+ in transit, AES‑256 at rest
- Design MCP servers as focused, stateless services – Use containerization, rely on automation and clear schemas to ensure reliable scaling
Common MCP Anti‑Patterns​
Anti‑Pattern 1: The Monolithic Server​
Symptoms: One server that wraps multiple disparate APIs, exposes 50+ tools, no clear ownership boundaries.
Consequences: Context window exhaustion, poor tool selection accuracy, unclear authorization boundaries, difficult to test.
Fix: Decompose into bounded‑context servers. Each server should answer the question: “What domain does this server serve?”
Anti‑Pattern 2: The One‑to‑One API Wrapper​
Symptoms: Each REST endpoint exposed as exactly one MCP tool. Users must chain five tool calls to accomplish one task.
Consequences: High token consumption, the agent loses context across chains, poor user experience.
Fix: Design top‑down from workflows, not bottom‑up from API endpoints. Combine multiple operations into single, high‑level tools that reflect complete user goals.
Anti‑Pattern 3: Untyped Schemas​
Symptoms: No input schemas, or schemas without descriptions. String parameters with no pattern validation.
Consequences: Parameter hallucination, tool failures, silent errors.
Fix: Every tool must have a complete JSON Schema Draft 2020‑12 with descriptions, types, constraints, and examples where helpful.
Anti‑Pattern 4: Static Secrets in Configuration​
Symptoms: Credentials stored in .env files, databases, or source code. No rotation policy.
Consequences: Secret sprawl, credential leakage, inability to revoke compromised tokens.
Fix: Store secrets in a vault. Pull at runtime, use, drop. Rotate centrally.
Anti‑Pattern 5: No Versioning​
Symptoms: In‑place tool modifications. Breaking changes deployed silently.
Consequences: Clients break unpredictably. No rollback path. Reproducibility impossible.
Fix: Additive‑only changes for backward compatibility. For breaking changes, create new tool versions (search_orders_v2). Use semantic versioning for servers.
Anti‑Pattern 6: Dumping All Tools into Context​
Symptoms: No tool filtering, no progressive discovery. Hundreds of tool definitions loaded for every request.
Consequences: 80–90% of input tokens wasted on catalog descriptions. Tool selection accuracy plummets.
Fix: Implement tool catalog filtering. Only expose tools relevant to the current request context.
MCP Server Design Checklist​
Pre‑Development​
- Workflow audit – What user goals must this server support? List the workflows, not the API endpoints.
- Capability classification – For each workflow, decide: Is it a tool (action with side effects), resource (read‑only data), or prompt (structured template)?
- Single responsibility check – Does this server serve one bounded domain? If multiple domains, split.
- Schema design – Input and output schemas drafted in JSON Schema Draft 2020‑12. Every parameter described.
- Security design – OAuth 2.1 + PKCE scopes defined. Least privilege per tool.
Implementation​
- Stateless handlers – Tool handlers store no in‑memory state across invocations. External state stored in database or cache.
- Input validation – Validate against JSON Schema, then against business rules.
- Idempotency keys – State‑changing tools accept
idempotency_key. Duplicate requests return stored result. - Timeouts – Per‑tool timeouts configured. Circuit breakers for external dependencies.
- Output size limits – Max token count defined per tool. Truncate or error on overflow.
- Observability instrumentation – OpenTelemetry spans for every tool call. Prometheus metrics exported.
Testing​
- Unit tests – Tool handlers with mocked dependencies. Validate each code path.
- Integration tests – Full MCP JSON‑RPC flow against a test client. Verify
tools/listandtools/call. - Security tests – Parameter injection attempts, path traversal, malformed tokens.
- Load tests – Rate limit thresholds, latency SLIs, memory usage.
Deployment​
- Containerization – Docker image with minimal base (Alpine). Non‑root user.
- Kubernetes manifests – Deployments with resource limits, liveness/readiness probes, NetworkPolicy for egress control.
- Secret management – Credentials pulled from vault at runtime. No secrets in environment variables.
- Horizontal scaling – Stateless replicas behind load balancer. HPA configured.
Operations​
- Tool catalog filtering – Progressive discovery implemented. Clients only see relevant tools.
- Versioning strategy – Additive‑only changes.
_v2tools for breaking changes. Semantic versioning for server releases. - Change notifications –
notifications/tools/list_changedimplemented for catalog updates. - Audit logging – Every tool call logged with user ID, tool name, parameters (redacted), outcome, duration.
- Deprecation policy – Deprecated tools marked with warning for one release cycle before removal.
- Runbook – Incident response documented: token revocation, server isolation, log forensics.
FAQ​
1. What makes a good MCP architecture?
A good MCP architecture has bounded contexts (one domain per server), workflow‑oriented tools rather than raw API wrappers, clear separation of tools, resources, and prompts, and a gateway layer that handles tool catalog filtering and policy enforcement.
2. Should every API endpoint be an MCP tool?
No. Exposing every endpoint as a tool produces a frustrating agent experience: simple tasks take multiple tool calls, the agent loses context, and token costs explode. Combine related operations into coarse‑grained tools that reflect complete user goals.
3. How do you scale MCP systems?
Scale by making servers stateless, running multiple replicas behind a load balancer, filtering tool catalogs to avoid context window exhaustion, and using progressive tool discovery (only reveal schemas when needed). Stateless design is critical for horizontal scaling.
4. How do you version MCP tools?
Use additive‑only changes (never remove or rename parameters; only add new optional ones) to maintain backward compatibility. For breaking changes, create a new tool version (search_orders_v2). Use semantic versioning for server releases. SEP‑1575 proposes formal versioning for the protocol.
5. What are the biggest MCP design mistakes?
Treating MCP as a thin API wrapper (one tool per endpoint), monolithic servers mixing unrelated domains, dumping all tools into context without filtering, no input schemas, no versioning, and storing secrets in plaintext. Context window exhaustion is the most common production scaling failure.
6. How do you handle tool catalog token cost?
Filter the tool catalog to only tools relevant to the current request. An intelligent routing layer can reduce visible tools from hundreds to 8–10 per query, reducing token usage by 95% while maintaining security.
7. What is the role of MCP in multi‑agent systems?
MCP provides the standardized interface for agents to discover and invoke tools. In multi‑agent systems, an MCP gateway aggregates multiple servers, enforces policy before any call reaches backend servers, and ensures agents see only the tools they are authorized to use.
8. Is OAuth 2.1 with PKCE required for MCP?
Yes, for all remote MCP servers (as of the June 18, 2025 specification). Anonymous connections must be rejected at the transport layer. Public clients MUST use PKCE for OAuth 2.1 compliance.
9. How do you monitor MCP tools in production?
Instrument with OpenTelemetry: spans for every tool invocation, resource read, and prompt retrieval. Export metrics (call counts, latency, errors) to Prometheus. Send logs to a central SIEM. Alert on anomalies.
10. How do you test MCP tools?
Unit test handlers with mocked dependencies. Integration test the full JSON‑RPC flow. Security test: parameter injection, path traversal, malformed tokens. Load test rate limits and latency SLIs.
11. How do you prevent context window exhaustion?
Filter tool catalogs to only relevant tools. Implement progressive discovery (reveal schemas on demand). Cap tool output size. Use tool result caching. In extreme cases, use a gateway that routes to specialized servers per request type.
12. What is secret sprawl and how do you prevent it?
Secret sprawl is credentials scattered across .env files, databases, and logs. Fix by storing credentials in a vault, pulling at runtime, rotating centrally, and using workload identity instead of static secrets.
13. How do MCP servers handle outbound network access?
Use an egress proxy or outbound governance layer that evaluates policy on every call before it leaves the network. Traditional perimeter‑based governance fails in agentic systems where a single server may call internal microservices, customer databases, and external APIs in the same workflow.
14. Can MCP servers be stateful?
Stateless is strongly preferred. Stateless servers scale horizontally, survive crashes, and simplify deployment. If state is required (sessions, long‑running workflows), store it externally in Redis or a database, keyed by request ID or idempotency key.
15. What is the difference between MCP tools, resources, and prompts?
Tools are actions with side effects (the model decides to call them). Resources are read‑only data (the model reads when it needs context). Prompts are reusable templates (the user explicitly invokes to start a structured workflow).
16. How do you handle breaking tool changes?
For breaking changes, create a new tool version (e.g., search_orders_v2) while keeping the old version operational. Use additive‑only changes for backward compatibility. Communicate deprecation timelines via change notifications.
17. What is tool catalog filtering?
An intelligent routing layer that reduces the visible tool set to only tools relevant to the current request. This reduces token usage by up to 95%, improves tool selection accuracy, and makes enterprise MCP deployments viable at scale.
18. How do you secure MCP servers in multi‑tenant environments?
Use virtual servers—isolated MCP environments per tenant with their own tool catalogs, permissions, and audit trails. Enforce RBAC at the gateway. Never share memory or file systems across tenants.
19. What is the recommended MCP server deployment platform?
Kubernetes. It provides namespace isolation for bounded contexts, NetworkPolicy for egress control, service accounts with OIDC federation for identity, and OpenTelemetry for observability—exactly the five capabilities production MCP requires.
20. How do you get started with MCP best practices?
Start with the design principles: workflow‑driven design, single responsibility, explicit schemas, least privilege. Build one bounded‑context server with 5–8 focused tools. Add OAuth 2.1 + PKCE from day one. Instrument with OpenTelemetry immediately. Scale by adding servers, not by bloating one.
Continue Your Journey​
Now that you understand the engineering principles behind reliable MCP systems, explore these related resources:
- MCP Servers – MCP Server (building the servers that implement these practices)
- MCP Clients – MCP Client (connecting agents to servers)
- MCP Tools – MCP Tools (detailed tool design patterns)
- MCP Resources – MCP Resources (read‑only context patterns)
- MCP Prompts – MCP Prompts (prompt lifecycle and governance)
- MCP Security – MCP Security (authentication, authorization, audit)
- MCP Deployment – MCP Deployment (Kubernetes operations and scaling)
Or return to the Agent Learning Path to see where MCP best practices fit in your roadmap.
This article is part of the AgentDevPro Production Agent Engineering Handbook. Updated for Q2 2026.