Skip to main content

    SECURITY / 10 MIN READ

    The MCP server security checklist we run before handoff.

    By Alex Cinovoj, Founder & CTO, TechTide AI · 13 years of mixed IT, last 2 focused on AI implementation.

    Every MCP server you ship ships two products at the same time. One is the set of tools your agent can now use. The other is a new attack surface that speaks fluent prompts. Most teams build the first carefully and skip the second entirely, because it's not visible in the demo. This is the checklist we run on every MCP server before handoff, covering authentication, tenant scoping, argument validation, and the audit trail a real incident review will need.

    Why MCP servers are a different security problem than APIs

    A traditional API is called by code you wrote, with inputs you control. An MCP server is called by a model, based on natural language it was given, which may include text from an untrusted source, a customer email, a scraped webpage, a support ticket. That means the caller's intent is only as trustworthy as whatever text influenced the model's decision to call the tool. This is the core reason MCP security can't just borrow API security wholesale.

    We cover the foundational mechanics of the protocol in our MCP explainer and the build process itself in our MCP server development guide. This post is specifically about the security layer that sits on top of a working server.

    The checklist: authentication and identity

    1. OAuth or an equivalent token-based auth, no shared static API keys embedded in prompts or config files.
    2. Short-lived tokens with refresh flows, not long-lived credentials that outlive an employee's access.
    3. Per-user or per-session identity carried through to every tool call, not collapsed into one service account.

    The checklist: authorization and tenant scoping

    1. Row-level and tenant-level scoping enforced at the server, never trusted from the prompt or the model's stated intent.
    2. Least-privilege tool permissions, each tool scoped to the minimum data and actions it needs, not a shared "admin" credential reused across tools.
    3. Explicit deny by default for any action outside a tool's documented scope, rather than allowing anything not specifically blocked.
    4. Cross-tenant test cases run before launch, deliberately trying to access another tenant's data with a valid but wrong-scoped session.

    The checklist: argument and output validation

    1. Typed inputs with schema validation on every tool, rejecting malformed or unexpected argument shapes before execution.
    2. Boundary and injection testing on arguments, including attempts to pass instructions or code where plain data is expected.
    3. Typed, schema-validated outputs returned to the model, so a compromised downstream system can't inject arbitrary text back into the model's context unchecked.
    4. Rate limits and quotas per tool, so a manipulated agent can't loop a costly or destructive action.

    This is the same discipline behind treating agentic behavior as something that needs guardrails proportional to its autonomy, not proportional to how impressive the demo looked.

    The checklist: tool definition integrity

    1. Pin and version tool definitions rather than pulling live descriptions from a source you don't control on every call.
    2. Review tool descriptions like code, since a model reads them as instructions, and a subtly manipulated description is a viable attack vector, sometimes called tool poisoning.
    3. Restrict which servers an agent can discover and connect to, rather than allowing arbitrary MCP server discovery in production.

    The checklist: human gates for consequential writes

    1. Approval queue for irreversible or high-blast-radius actions, like payments, deletions, or external communications sent on a customer's behalf.
    2. Reversibility check for every write tool: can this be undone automatically if the model got it wrong.
    3. Escalation path defined for when a tool call fails validation or looks anomalous, rather than silently retrying or failing open.

    The checklist: audit and observability

    1. Every tool call logged with caller identity, arguments, result, latency, and cost, piped into your existing observability stack.
    2. Alerting on anomalous call patterns, like a spike in a normally rare tool or repeated failed argument validations.
    3. Logs retained long enough for a real incident review, not just a rolling 24-hour window.

    Fourteen checks total, and we run all of them before handoff on every Anthropic consulting engagement that involves an MCP server, because a tool surface without this review is a liability wearing a demo.

    Running this checklist on an existing server

    If your MCP server is already in production and you haven't run through this list, don't wait for an incident to force the review. Start with authentication and tenant scoping, since those two categories cause the most damage when they fail. Then work down the list over one or two sprints. If you want an outside set of eyes to run the full checklist against your specific server, that's exactly the kind of thing we scope in the $1,000 AI Audit.

    Frequently asked

    • Tool poisoning is when an attacker manipulates a tool's description, name, or documentation so that a model is tricked into calling it in an unintended way or leaking data through it. Since models read tool descriptions as part of their context, a poisoned description functions like an injected instruction. Validate and pin tool definitions rather than trusting whatever a server advertises.

    About the author

    Alex Cinovoj, Founder and CTO, TechTide AI

    13 years of mixed IT, the last 2 focused entirely on AI implementation. Alex runs TechTide AI, an implementation studio that takes stalled AI pilots into production. He writes about the work in progress at alexcinovoj.com.

    Related field notes

    All field notes →

    Get your MCP server reviewed before it ships.