Home/Security/OWASP Agentic Top 10 Coverage

Security posture

OWASP Agentic Top 10 Coverage

How Ferentin defends against the OWASP Top 10 for Agentic Applications 2026, risk by risk. Where the control is shipped, where it is partial and where it sits out of scope by design. Every claim points at the architectural assumption behind it.

Source list: OWASP Top 10 for Agentic Applications 2026. Risks are referenced by their official ASI codes.

How to read this page

Three status labels appear in the matrix below. Each one is a commitment.

  • Full. The control is shipped, runs on every request and is covered by the test surface. Evidence is linkable.
  • Partial. Part of the control runs in production. Another part is in active design or relies on a defense-in-depth layer that does not catch every case. The gap is named explicitly in the risk section.
  • Out of scope by design. Ferentin does not address this risk at the platform layer because the architecture deliberately delegates it elsewhere. The reasoning is named in the risk section.

A coverage page that claims ten greens is a coverage page that has stopped being read by the people it is written for. Treat the amber and grey labels as part of the credibility, not gaps to apologize for.

Coverage at a glance

One row per risk. Each row links to the per-risk section below.

RiskDefinitionFerentin controlStatus
ASI01 Agent Goal HijackAttackers manipulate agent goals, plans or decision paths through direct or indirect instruction injection.Deny-by-default policy at the service edge. Action classifications restrict what the agent can do regardless of how the goal was framed.Full
ASI02 Tool Misuse & ExploitationLegitimate tools bent into destructive outputs through unsafe parameters or unintended sequences.Per-tool approval policy evaluated on every call. Friction proportional to blast radius. Human-in-loop elicitation for destructive actions.Full
ASI03 Agent Identity & Privilege AbuseLeaked credentials or scope drift let agents operate far beyond their intended authority.Two-claim token model with macro intent and fine-grained authority. Short TTLs. Workload identity federation for headless agents. No long-lived service accounts.Full
ASI04 Agentic Supply Chain CompromiseCompromised tools, MCP servers, plugins or upstream model providers introduce attacker capability into the agent.Provider allowlist at the tenant boundary. Signed policy bundles. MCP catalog vetting at upload, CLI, and live re-discovery. End-to-end TLS to every upstream.Full
ASI05 Unexpected Code ExecutionA tool or sandbox escape gives the agent the ability to run code outside its declared boundary.Egress allowlists per tool. MCP Apps origin isolation with strict CSP. Tool views are sandboxed iframes. Code execution sandboxing is delegated to the customer execution environment.Full
ASI06 Memory & Context PoisoningAdversarial content embedded in retrieved documents, chat history or vector stores influences future agent decisions.Per-tenant isolation of memory and retrieval surfaces. Audit identity refactor distinguishes synthetic principal from acting user.Partial
ASI07 Insecure Inter-Agent CommunicationMulti-agent protocols (A2A and similar) expose attack surfaces between cooperating agents.A2A is not a first-class protocol in Ferentin today. Cross-agent calls travel through the same MCP gateway as any other tool call, with the same per-call policy and audit treatment.Out of scope by design
ASI08 Cascading Agent FailuresA fault in one agent propagates through tool chains, sub-agents or shared state, multiplying impact.Per-loop token, duration and conversation-character budgets. Cancellation checkpoints in the agent loop. Tenant-wide containment in design.Partial
ASI09 Human-Agent Trust ExploitationConfident, fluent agent output induces users to perform harmful actions like credential sharing or risky transfers.Passwordless platform identity. PAM-style brokered upstream credentials. URL-mode elicitation for sensitive data. Step-up approval for high-blast-radius actions. Audit captures both the agent suggestion and the user response.Full
ASI10 Rogue AgentsUnauthorized or unregistered agents operate inside the perimeter without governance.mTLS-bound edge enrollment. Workload identity federation for headless agents. Audit identity refactor closes NULL-actor edge cases.Full

ASI01

Full

How does Ferentin defend against ASI01 Agent Goal Hijack?

OWASP definition: Attackers manipulate agent goals, plans or decision paths through direct or indirect instruction injection.

Goal hijack is the failure mode that prompt-level defenses cannot fully close. The agent reads adversarial content from a retrieved document, a tool response or an email thread, and the planner is steered into actions the operator never intended. Ferentin's posture treats the planner as untrusted. The application layer is where authority lives, not the prompt.

Defense runs in three places. At the agent loop, per-call policy evaluation enforces the action classification model. Forbidden actions are structurally impossible to dispatch. At the tool surface, per-role allowlists decide which connectors the planner can even see. At the data plane, the service edge enforces egress allowlists so a hijacked plan cannot reach an unsanctioned domain.

At the catalog ingestion seam: server-card upload now runs the MCP catalog scanner end-to-end before persistence. A deterministic evidence pass (regex, Levenshtein typosquat distance, NFKC Unicode-confusable matching, base64 detection) feeds an LLM-based judge against the mcp-catalog-v1 rubric. Verdicts of BLOCK or SCANNER_INTEGRITY_ERROR refuse the import with structured findings. WARN verdicts persist alongside the findings for admin review. The same structural normalization (zero-width Unicode strip plus canonical Unicode form) runs on every card before either the deterministic pass or the LLM judge sees it, so attackers cannot smuggle invisible-instruction payloads past the scanner.

Shift-left scanning at card-generation time also ships in the integrator workflow: `ferentin mcp discover` runs the same deterministic evidence pass on the synthesized card and (when present) the raw upstream card, writes a versioned scan-report.json next to server-card.json, and fails the build with a non-zero exit on a BLOCK verdict (with an explicit --skip-scan-gate escape hatch for documented overrides). Patterns, reserved-slug list and structural normalization are byte-for-byte mirrors of the platform-side pass, so a card that passes the CLI gate will not be re-blocked at upload for the same evidence class. The third ingestion path — admin-triggered live re-discovery on an already-imported tenant catalog entry — routes through the same `McpCatalogScanOrchestrator` tagged as the `LIVE_DISCOVERY` checkpoint in the audit trail. An async background scheduler running this same loop on a cadence is a separate workstream gated on the Notification primitive (so detected drift surfaces to admin asynchronously rather than blocking inflight tool calls).

Controls in place

  • Per-call policy evaluation in the service edge (deny-by-default)
  • AARM action classifications (Forbidden / Deny / Defer / Allow) gate every tool call
  • Per-role connector surface allowlist, declared as policy data not in the prompt
  • Egress allowlist per tool, hot-reloadable from the control plane
  • MCP catalog scanner on server-card import: deterministic evidence pass + LLM judge against the mcp-catalog-v1 rubric, OWASP MCP03-aligned
  • CLI shift-left scanner in `ferentin mcp discover`: deterministic evidence pass at card-generation time, fails the build on BLOCK by default
  • Admin-triggered live re-discovery scan on already-imported entries: same orchestrator, LIVE_DISCOVERY checkpoint in the audit trail
  • Structural input normalization (zero-width strip + Unicode canonicalization) before any scanner sees the card
  • CISO reference: seven control families that compose at the seams

Honest gap

Async background re-discovery scanning on a cadence is a separate workstream gated on the Notification primitive (so detected drift surfaces asynchronously rather than blocking inflight tool calls). All three catalog ingestion paths — server-card upload, CLI card-generation, and admin-triggered live re-discovery — run the same orchestrator today.

ASI02

Full

How does Ferentin defend against ASI02 Tool Misuse & Exploitation?

OWASP definition: Legitimate tools bent into destructive outputs through unsafe parameters or unintended sequences.

Tool misuse is the LLM-router-to-MCP-gateway transition in one phrase. The atom of control shifts from the request to the action, and the failure mode shifts from bad text to real-world consequence. Ferentin's answer is per-call policy with friction proportional to risk: read-only operations auto-approve, mid-tier actions take per-tenant policy, destructive operations require human-in-loop elicitation.

The MCP elicitation pattern is the cleanest primitive here. The tool returns "need user input" with a structured form for non-sensitive choices or a URL for out-of-band flows when the data is sensitive (OAuth handoff, credential entry, financial confirmation). The user responds, the tool resumes. Credentials never transit the agent or its surfaces.

Per-call evaluation matters more than per-session. A single session-start approval is the trap that catches most teams: once the agent is in, every subsequent tool call rides the initial decision. Ferentin re-evaluates every call against the current policy, current identity and current arguments.

Controls in place

  • AARM action classifications (Forbidden / Context-Dependent Deny / Allow / Defer)
  • Per-tool approval policy evaluated on every tool call, not session start
  • MCP elicitation: form mode for choices, URL mode for sensitive data
  • Decision rationale on every audit event (which policy matched, on which arguments)
  • Tool-argument size cap and per-tool 60-second timeout in the agent loop

ASI03

Full

How does Ferentin defend against ASI03 Agent Identity & Privilege Abuse?

OWASP definition: Leaked credentials or scope drift let agents operate far beyond their intended authority.

Identity is the family where most agentic platforms ship the smallest answer and call it solved. A shared API key with a name attached is not scoping. Ferentin separates intent from authority on the token itself: a macro claim records what the client asked for, a fine-grained claim records what RBAC actually granted at issuance. Downstream code checks authority, not intent.

Two identity modes anchor in customer-held systems. For human-in-the-loop sessions, the enterprise IdP is the source of truth via SAML, OIDC and SCIM. For headless agents, workload identity federation exchanges a workload assertion (OIDC trust from your cloud provider, SPIFFE or equivalent) for a short-lived token bound to that workload. No parallel user directory in the vendor.

Short TTLs are non-negotiable. Admin grants expire in fifteen minutes, not eight hours. A platform-wide synthetic principal pattern lets agents act on behalf of a Slack channel, team or other group identity, with the original actor recorded in the audit trail. The token never re-credentials its way past the role bound to its workload.

Controls in place

  • Two-claim token model: macro (intent) and fine-grained (authority)
  • Enterprise IdP for human-in-the-loop. SAML / OIDC / SCIM. No parallel user directory.
  • Workload identity federation for headless agents. No long-lived service-account credentials.
  • Short TTL on elevated grants. 15 minutes for admin. 60 minutes for general grants.
  • Synthetic principals for group identity, with original actor preserved in the audit trail
  • Identity reference: itinerary-based access for agents

ASI04

Full

How does Ferentin defend against ASI04 Agentic Supply Chain Compromise?

OWASP definition: Compromised tools, MCP servers, plugins or upstream model providers introduce attacker capability into the agent.

Supply chain in an agentic system has more surfaces than in a traditional SaaS: LLM providers, MCP servers, embedded models, tool descriptions ingested from upstream catalogs and the connector packages themselves. Each surface needs its own gate. Ferentin's gate is the tenant boundary. A provider not on the per-tenant allowlist is not reachable, period.

Policy bundles flow from the control plane to the service edge as signed artifacts. The data plane validates the signature before applying the bundle. A control plane compromise that pushed an unsigned or malformed bundle would be rejected at every edge.

MCP catalog vetting at the server-card upload path runs end-to-end: deterministic evidence pass (regex, Levenshtein typosquat distance, NFKC Unicode-confusable matching, base64 detection), then LLM judge against the mcp-catalog-v1 rubric. Structural input normalization (zero-width Unicode strip plus canonical form) runs before either pass sees the card. Verdicts of BLOCK or SCANNER_INTEGRITY_ERROR refuse the import; WARN persists with findings for admin review. The OWASP MCP03 posture is explicit: detect, govern, reject — never silently mutate. Admin overrides land in the tools_admin_actions compliance trail with reasoning attached.

Shift-left at card-generation time also ships: `ferentin mcp discover` runs the same deterministic evidence pass (byte-for-byte mirror of the platform-side patterns, reserved-slug list and structural normalization) on the synthesized and upstream cards before they ever reach the platform. A versioned scan-report.json lands next to server-card.json; a BLOCK verdict converts to a non-zero exit so a CI pipeline fails the build on a confidently-malicious card, with --skip-scan-gate as the documented escape hatch. Verdict-for-verdict alignment with the platform pass means an integrator who gets a clean CLI report will not be surprised by an upload-time rejection for the same evidence class.

The third ingestion path — live re-discovery against an already-imported upstream — runs the same scanner: `POST /admin/tenants/{tid}/mcp-providers/{providerId}/discover-with-analysis` re-fetches the upstream catalog and routes the result through the same `McpCatalogScanOrchestrator` the upload path uses, tagged `LIVE_DISCOVERY` in the audit trail. Admin-triggered re-scan covers the post-import rug-pull case — the upstream-pushed-new-poisoning vector — at admin's hand. An async background scheduler that runs this loop on a cadence is a separate workstream gated on the Notification primitive (so detected drift surfaces asynchronously rather than blocking inflight tool calls); the synchronous manual path is the gate today.

Controls in place

  • Per-tenant provider allowlist enforced at the service edge
  • Signed policy bundles. Control plane to data plane via verifiable signatures.
  • End-to-end TLS 1.3 to every upstream LLM and MCP provider
  • Provider configuration changes audited with actor and decision rationale
  • MCP catalog scanner on server-card import: deterministic evidence + LLM judge, OWASP MCP03-aligned (detect, govern, reject)
  • CLI shift-left scanner in `ferentin mcp discover`: same deterministic evidence pass at card-generation time, non-zero-exit BLOCK gate (--skip-scan-gate escape hatch) so CI fails on a poisoned card before upload
  • Admin-triggered live re-discovery scan on already-imported tenant catalog entries (`POST /admin/.../{providerId}/discover-with-analysis`) — same orchestrator, LIVE_DISCOVERY checkpoint in the audit trail
  • tools_admin_actions audit table: every accept-as-is, edit-and-accept, override-block and reject decision recorded with actor and reasoning
  • Structural input normalization (zero-width Unicode strip + NFKC/NFC) before any scanner sees the card

Honest gap

Async background re-discovery scanning on a cadence (vs admin-triggered today) is a separate workstream gated on the Notification primitive so that detected drift surfaces asynchronously rather than blocking inflight tool calls. All three catalog ingestion paths — server-card upload, CLI card-generation, and admin-triggered live re-discovery — run the same orchestrator today.

ASI05

Full

How does Ferentin defend against ASI05 Unexpected Code Execution?

OWASP definition: A tool or sandbox escape gives the agent the ability to run code outside its declared boundary.

Ferentin's architecture splits execution responsibility deliberately. The service edge runs inside the customer perimeter, which means the execution environment for any tool that runs code is the customer's own infrastructure with the customer's own sandbox and the customer's own observability. Ferentin enforces the network and policy boundary around the execution; the customer enforces the process boundary inside it.

For MCP Apps tool views (the in-iframe UI surface for tool results), origin isolation is enforced by the MCP Apps proxy. Each tool view runs on a per-tool subdomain with a hash-derived origin. A strict CSP declares connect domains and resource domains explicitly. A tool view cannot reach a domain it did not declare, cannot execute inline scripts and cannot read another tool view's state.

Egress allowlists bound the network reachability of every tool invocation. The traditional defense (a forward proxy on the host) cannot tell which agent or sub-agent is making the call. Ferentin's per-tool allowlist is enforced at the data plane and bound to the calling identity, not the host process.

Controls in place

  • Per-tool egress allowlist enforced at the data plane, bound to caller identity
  • MCP Apps origin isolation: per-tool subdomain with hash-derived origin
  • Strict CSP for tool views: declared connect-src, resource-src, no inline scripts
  • Tool views run as sandboxed iframes; no same-origin access to the host
  • No outbound network for a tool without a declared connect-domain allowlist (default-deny)

Honest gap

Process-level sandboxing of arbitrary code-executing tools is delegated to the customer execution environment. Ferentin enforces the network and policy boundary; the customer enforces the process boundary.

ASI06

Partial

How does Ferentin defend against ASI06 Memory & Context Poisoning?

OWASP definition: Adversarial content embedded in retrieved documents, chat history or vector stores influences future agent decisions.

Memory poisoning is a long-tail problem. The poisoned content arrives during one interaction, gets retrieved months later and steers an action whose connection to the original ingestion is hard to trace. The defenses are layered: keep memory tenant-isolated, identify the original ingester on every read and treat retrieved content as untrusted by the planner the same way you treat any tool response.

Per-tenant isolation is architectural. Memory, retrieval indices and embedding stores carry tenant identity on every row. Cross-tenant retrieval is structurally impossible, not just policy-prevented. The audit trail records the original actor (user, workload or synthetic principal) so that a tracking-back of a poisoned context to its ingestion point is feasible.

The honest gap aligns with ASI04: discovery-time scanning of ingested tool metadata for prompt-injection markers ships today on all three catalog ingestion paths — server-card upload (deterministic evidence pass plus LLM judge against the mcp-catalog-v1 rubric), the integrator-side `ferentin mcp discover` CLI (same deterministic pass, non-zero-exit BLOCK gate), and persistence-gated live re-discovery (the bulk-save endpoint refuses writes on BLOCK) (same orchestrator, LIVE_DISCOVERY checkpoint in the audit trail). All three run after structural Unicode normalization. Async background re-discovery on a cadence is a separate workstream gated on the Notification primitive. For poisoning that arrives via retrieval rather than catalog ingestion, the backstop is the same defense as ASI01: deny-by-default at the action layer means a poisoned context can steer the planner but cannot dispatch a forbidden action.

Controls in place

  • Per-tenant isolation of memory and retrieval surfaces (architectural, not policy-only)
  • Audit identity refactor distinguishes synthetic principal from acting user
  • Original actor preserved on every event for traceability
  • MCP catalog scanner on server-card import covers the metadata-poisoning vector at upload time
  • CLI shift-left scanner in `ferentin mcp discover` catches metadata-poisoning at card-generation time, before upload
  • Action-layer deny-by-default prevents a poisoned context from dispatching forbidden actions

Honest gap

Scanning of retrieved document content and chat history for injection markers at retrieval time is in design, as is async background re-discovery scanning on a cadence (admin-triggered live re-discovery is shipped). The current backstops are action-layer policy denial and per-tenant retrieval isolation.

ASI07

Out of scope by design

How does Ferentin defend against ASI07 Insecure Inter-Agent Communication?

OWASP definition: Multi-agent protocols (A2A and similar) expose attack surfaces between cooperating agents.

Ferentin is MCP-native, not A2A-native. We model multi-agent flows as agent-to-tool calls through the gateway, which means the same per-call policy, the same identity boundary and the same audit shape apply to a call where the "tool" happens to be another agent. There is no separate A2A wire surface that bypasses gateway controls.

This is a deliberate scoping choice, not a feature gap. Ferentin's thesis is that A2A is solved by treating "agent" and "tool" uniformly at the policy layer. Two agents that need to cooperate do so by one calling the other as a tool, with the calling agent's identity on the request and the called agent's response running through the same elicitation, audit and egress controls as any other tool result.

If A2A as a first-class protocol becomes a meaningful enterprise pattern, Ferentin will model it through the same MCP transport rather than a parallel surface. The thesis would not change: authority is in the application layer; the transport is incidental.

Controls in place

  • No parallel A2A wire surface. Cross-agent calls travel through the MCP gateway.
  • Per-call policy applies uniformly whether the callee is a human, a tool or another agent
  • Audit captures the calling agent's identity and the called agent's response

ASI08

Partial

How does Ferentin defend against ASI08 Cascading Agent Failures?

OWASP definition: A fault in one agent propagates through tool chains, sub-agents or shared state, multiplying impact.

Cascading failure is the consequence of unbounded autonomy. An agent that loops forever, calls tools without budget or fan-outs to sub-agents without limit is an operational outage waiting to happen. Ferentin's agent loop enforces three independent budgets per run: total tokens, wall-clock duration and conversation character count. Hitting any one terminates the loop with a documented outcome.

Cancellation checkpoints run at the start of every loop round and after every LLM response. A user cancel, a policy update or a tenant-wide stop signal terminates the loop before the next tool call. The LLM cost for the current round is sunk, but the (often much larger) cost of dispatching the next set of tool calls is saved.

The honest gap is tenant-wide containment. A platform-level kill switch that halts all in-flight agent activity and refuses new runs is in design. Today, containment runs at the per-loop level (cancellation) and the per-policy level (admin disable), but not at the org-wide level in a single primitive.

Controls in place

  • max_loop_tokens, max_duration_ms and max_conversation_chars budgets per agent run
  • Start-of-round and post-LLM cancellation checkpoints in the agent loop
  • Per-tool 60-second timeout. No tool can hang the loop indefinitely.
  • Per-loop documented outcomes (max-tokens, max-duration, cancelled, error) on every terminating event

Honest gap

A tenant-wide agent kill switch (one primitive that halts all in-flight runs and refuses new runs across the tenant) is in design.

ASI09

Full

How does Ferentin defend against ASI09 Human-Agent Trust Exploitation?

OWASP definition: Confident, fluent agent output induces users to perform harmful actions like credential sharing or risky transfers.

This is the family where technical controls cannot do all the work. A confident agent saying confident things is a social engineering surface that no policy engine fully closes. Ferentin's posture is to make the most-exploited preconditions of trust attacks structurally absent — no password to phish, no upstream credential to leak, no sensitive data flowing through the conversation surface.

Platform identity is passwordless and signature-brokered. There is no human-typed shared secret that the platform exposes at runtime. Human authentication anchors in the enterprise IdP with passkeys (WebAuthn) supported as a phishing-resistant primary factor. Service-to-service trust is brokered by short-lived signed tokens (JWT) and mTLS, not by API keys floating in environment variables. A confident agent that tries to social-engineer a credential out of a user is asking for something the platform itself does not handle as a typed secret — there is nothing to paste back into the chat.

Upstream credentials follow a PAM-style design. API keys, OAuth tokens and provider credentials for upstream MCP servers and LLM providers live in a tenant-scoped vault. Ephemeral, scope-limited tokens are the only way to unlock them, and the unlock happens at the data plane at request time — the credential is brokered into the outbound call and never returned to the agent loop, the tool view or the human conversation surface. An agent cannot exfiltrate an upstream credential it has never been handed; a user cannot be tricked into sharing one they have never seen.

URL-mode elicitation routes any remaining sensitive data entry (credentials the platform legitimately needs to bootstrap an integration, financial confirmation, OAuth handoffs) to a domain the user already trusts, outside the conversation. The agent learns the outcome (yes / no / completed); it never sees the sensitive data. This is the technical version of "do not type your password into a chat window."

Step-up approval for high-blast-radius actions adds friction proportional to risk. A reasoning-class model handles the high-stakes decisions where defending against social-engineering prompts matters. A human approver gates the destructive ones. The audit trail records both the agent's suggestion and the user's response, which is what makes accountability traceable after the fact.

Controls in place

  • Passwordless platform identity: passkeys (WebAuthn) for human auth, signed-token + mTLS for service-to-service. No shared secret to phish out of either side.
  • PAM-style upstream credential brokering. Ephemeral, scope-limited tokens unlock vaulted API keys / OAuth tokens; the credential is injected at the data plane and never returned to the agent surface or the human surface.
  • MCP URL-mode elicitation for any remaining sensitive data entry. The agent never sees credentials.
  • Step-up approval (AARM Defer with named approvers) for high-blast-radius actions
  • Reasoning-class models route the high-stakes decisions where injection resistance matters
  • Audit captures both agent suggestion and user response for accountability

Honest gap

No technical control fully closes a social-engineering surface against a determined user. Defense is layered: passwordless identity, secretless upstream brokering, URL-mode elicitation, step-up approval, model selection and audit. The residual surface is where a user is socially engineered into approving a step-up the agent suggested — addressed by friction proportional to blast radius, not eliminated.

ASI10

Full

How does Ferentin defend against ASI10 Rogue Agents?

OWASP definition: Unauthorized or unregistered agents operate inside the perimeter without governance.

A rogue agent is an agent that runs without being known to the governance system. The defense is to make registration the only path to operation. Ferentin's service edge enrolls via mTLS bootstrap into the control plane. An agent that has not enrolled cannot reach the control plane, cannot fetch policy bundles and cannot send telemetry.

For headless agents on the workload side, identity federation makes the same invariant hold: an agent runtime that cannot present a valid workload assertion cannot exchange it for a token, and a request with no token is rejected at the gateway. There is no path to operation that skips identity.

The honest gap is the long tail of identity edge cases in the audit layer. Synthetic principals (per-channel, per-team, per-workload) need consistent sub-shape classification on every event so that "rogue agent" is detectable from the audit log, not just preventable at the gateway. Refactor in flight to consolidate identity classification at the audit boundary.

Controls in place

  • mTLS-bound edge enrollment. No unenrolled edge can reach the control plane.
  • Workload identity federation. No valid workload assertion, no token, no request.
  • Tenant-scoped enrollment audit on every edge join
  • Policy bundles signed by the control plane and validated at the edge

Honest gap

Consistent sub-shape classification on every audit event (so rogue activity is detectable from the audit log, not just preventable at the gateway) is in active refactor.

FAQ

Quick answers, per risk

Each answer is a self-contained reply to a specific risk. Indexed for answer engines that retrieve at the question level.

Ferentin treats the planner as untrusted and moves authority into the application layer. Every tool call is evaluated against deny-by-default policy at the service edge. Action classifications make forbidden actions structurally impossible to dispatch. Per-role surface allowlists keep unsanctioned connectors invisible to the planner. Egress allowlists bound the network reachability of any tool the agent does invoke. At ingestion, all three catalog paths now run the MCP catalog scanner — server-card upload (deterministic evidence pass plus LLM judge against the mcp-catalog-v1 rubric), `ferentin mcp discover` at card-generation time (same deterministic pass, non-zero-exit BLOCK gate), and persistence-gated live re-discovery (the bulk-save endpoint refuses writes on BLOCK) — all after structural Unicode normalization. Async background re-discovery on a cadence is a separate workstream gated on the Notification primitive.

Evaluating Ferentin

See the controls in your own environment

Book time with our team to walk through any row on this page, in your stack, with your policies.