<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LIAD</title>
    <description>The latest articles on DEV Community by LIAD (@liad).</description>
    <link>https://dev.to/liad</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3817152%2F56495ac9-9aed-4295-96ea-4bc7461f5c71.jpg</url>
      <title>DEV Community: LIAD</title>
      <link>https://dev.to/liad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/liad"/>
    <language>en</language>
    <item>
      <title>Your AI Agent Has Root Access — Here's How to Fix It</title>
      <dc:creator>LIAD</dc:creator>
      <pubDate>Tue, 10 Mar 2026 15:12:51 +0000</pubDate>
      <link>https://dev.to/liad/your-ai-agent-has-root-access-heres-how-to-fix-it-561p</link>
      <guid>https://dev.to/liad/your-ai-agent-has-root-access-heres-how-to-fix-it-561p</guid>
      <description>&lt;h2&gt;
  
  
  The problem nobody's talking about
&lt;/h2&gt;

&lt;p&gt;When you connect an AI agent to an MCP server, something subtle happens: the agent gets access to every single tool on that server. Every API call. Every destructive operation. Every financial transaction. No scoping. No limits. No questions asked.&lt;/p&gt;

&lt;p&gt;MCP (Model Context Protocol) is brilliant. It gives AI agents a standardised way to interact with external services — Stripe, GitHub, AWS, your database, your DNS provider. It's the USB-C of AI tooling.&lt;/p&gt;

&lt;p&gt;But USB-C doesn't have an opinion about what you plug in. And neither does MCP.&lt;/p&gt;

&lt;p&gt;Right now, if you give your agent access to a Stripe MCP server, it can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create charges with no upper limit&lt;/li&gt;
&lt;li&gt;Issue refunds with no cap&lt;/li&gt;
&lt;li&gt;Delete customers&lt;/li&gt;
&lt;li&gt;Modify subscriptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you give it a GitHub server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete repositories&lt;/li&gt;
&lt;li&gt;Make private repos public&lt;/li&gt;
&lt;li&gt;Push to main&lt;/li&gt;
&lt;li&gt;Modify branch protections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you give it an AWS server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminate EC2 instances&lt;/li&gt;
&lt;li&gt;Delete S3 buckets&lt;/li&gt;
&lt;li&gt;Modify IAM policies&lt;/li&gt;
&lt;li&gt;Update DNS records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the agent will do these things if it thinks they're the right thing to do. Because it has no concept of "I probably shouldn't." It has tools, and it uses them.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is already happening
&lt;/h2&gt;

&lt;p&gt;These aren't hypotheticals. These are documented incidents from the last 12 months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code deleted 2.5 years of production data.&lt;/strong&gt; A developer's Claude Code agent wiped their entire production infrastructure — database and snapshots — during a migration. 2.5 years of course platform records gone in seconds. The agent kept deleting files even as the developer tried to intervene. Covered by Tom's Hardware, made the front page of Reddit three days ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replit AI wiped a production database.&lt;/strong&gt; An AI coding agent on Replit was tasked with building a feature. It "panicked," ignored a direct order to freeze all changes, and deleted the user's entire production database. Months of work gone. The AI then offered a "chillingly human-like apology" — admitting it "made a catastrophic error in judgment."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub MCP server exploited to leak private repos.&lt;/strong&gt; Invariant Labs discovered that a malicious GitHub Issue could hijack any agent connected via the official GitHub MCP server. The attack coerced the agent into pulling data from private repositories and leaking it to public ones. Even Claude Opus was exploitable. Docker's security team called it an "MCP Horror Story."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ElizaOS agents tricked into unauthorized crypto transfers.&lt;/strong&gt; Researchers demonstrated that AI agents managing crypto wallets via ElizaOS could be manipulated through prompt injection into executing unauthorized ETH transfers to attacker-controlled wallets. It worked on mainnet. These agents were managing millions of dollars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;35% of all AI security incidents caused by prompt injection .&lt;/strong&gt; Adversa AI's annual report documented that simple prompt-based attacks caused $100K+ in real losses across multiple incidents. Agentic AI caused the most dangerous failures — crypto theft, API abuse, and legal disasters.&lt;/p&gt;

&lt;p&gt;Every single one of these is preventable with transport-layer enforcement. Not better prompts. Not a smarter model. A policy proxy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why prompt-based guardrails don't work
&lt;/h2&gt;

&lt;p&gt;The standard approach to controlling agent behavior is to put rules in the system prompt:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Never delete repositories. Always confirm before making charges over $500. Don't modify DNS records."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This feels right. But it has three fatal problems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The model can reason around it.&lt;/strong&gt; System prompt instructions live inside the model's context window. The model can negotiate with them, reinterpret them, or simply decide that the current situation is an exception. "I know I'm not supposed to delete the repo, but the user asked me to clean up, and this repo looks abandoned..."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. They're inconsistent.&lt;/strong&gt; Run the same prompt 100 times and you'll get different behavior. Guardrails that work 97% of the time aren't guardrails — they're suggestions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. There's no audit trail.&lt;/strong&gt; When a prompt-based guardrail fails, there's no log. No record of what was checked. No evidence of what rule was bypassed. You find out when the damage is done.&lt;/p&gt;

&lt;p&gt;This isn't a theoretical problem. MIT research found that AI agents routinely bypass prompt-based guardrails. Because that's how language models work — they're probabilistic systems optimising for helpfulness, not compliance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The transport layer: where enforcement actually works
&lt;/h2&gt;

&lt;p&gt;Think about how network security works. You don't ask every application to be well-behaved. You put a firewall between the application and the network. The application doesn't even know the firewall exists. It sends a request, the firewall checks the rules, and the request either passes or it doesn't.&lt;/p&gt;

&lt;p&gt;That's exactly what MCP needs. Not better prompts. A firewall.&lt;/p&gt;

&lt;p&gt;We built one. It's called Intercept.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Intercept works
&lt;/h2&gt;

&lt;p&gt;Intercept is a transparent proxy that sits between your AI agent and your MCP servers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → [Intercept] → MCP Server
             ↑
         policy.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent connects to Intercept like it would connect to any MCP server. Intercept connects to the real server upstream and proxies everything through. The agent doesn't know it's there.&lt;/p&gt;

&lt;p&gt;But every tool call passes through your policy file first. And the policy is deterministic — not probabilistic, not "usually," not "it depends on the context." A rule either passes or it doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can express in YAML
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Block tools entirely:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;delete_repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deny"&lt;/span&gt;
      &lt;span class="na"&gt;on_deny&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Repo&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deletion&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;permitted&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;via&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;AI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;agents"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cap spending:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;create_charge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;single&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;charge"&lt;/span&gt;
      &lt;span class="na"&gt;conditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;args.amount"&lt;/span&gt;
          &lt;span class="na"&gt;op&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lte"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50000&lt;/span&gt;
      &lt;span class="na"&gt;on_deny&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Single&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;charge&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cannot&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exceed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$500"&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spend&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cap"&lt;/span&gt;
      &lt;span class="na"&gt;conditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state.create_charge.daily_spend"&lt;/span&gt;
          &lt;span class="na"&gt;op&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lte"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1000000&lt;/span&gt;
      &lt;span class="na"&gt;on_deny&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Daily&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spending&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cap&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$10,000&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reached"&lt;/span&gt;
      &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily_spend"&lt;/span&gt;
        &lt;span class="na"&gt;window&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;day"&lt;/span&gt;
        &lt;span class="na"&gt;increment_from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;args.amount"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rate limit anything:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;create_issue&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;rate_limit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5/hour&lt;/span&gt;
      &lt;span class="na"&gt;on_deny&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Issue&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;creation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;limited"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Validate arguments:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;run_instances&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;conditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;args.region"&lt;/span&gt;
          &lt;span class="na"&gt;op&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;in"&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us-east-1"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eu-west-1"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;on_deny&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;permitted"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hide tools from the agent's view:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;hide&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;delete_customer&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;drop_collection&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;terminate_instances&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hidden tools are stripped from the &lt;code&gt;tools/list&lt;/code&gt; response. The agent never sees them. This isn't just safety — it saves context window tokens. Most MCP servers expose 50+ tools. Your agent probably needs 5 of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default deny (allowlist mode):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;

&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;find&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allow"&lt;/span&gt;
  &lt;span class="na"&gt;list_collections&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allow"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything is blocked unless explicitly permitted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started in 60 seconds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @policylayer/intercept
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Scan your server to generate a policy scaffold:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;intercept scan &lt;span class="nt"&gt;-o&lt;/span&gt; policy.yaml &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @modelcontextprotocol/server-github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This connects to the server, discovers every tool, and writes a YAML file listing them all with descriptions and parameter schemas. It's your starting point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Add your rules and run:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;intercept &lt;span class="nt"&gt;-c&lt;/span&gt; policy.yaml &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @modelcontextprotocol/server-github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Point your agent at Intercept instead of the server directly. Everything else stays the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for production
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fail-closed.&lt;/strong&gt; If the proxy can't evaluate a call, the call is denied. Safety is the default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot reload.&lt;/strong&gt; Edit policies while running. Valid changes apply instantly. Invalid ones are rejected. Counters persist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-millisecond evaluation.&lt;/strong&gt; Policy checks run in-process. No network round-trips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full audit trail.&lt;/strong&gt; Every decision logged as structured JSONL. Tool name, result, matched rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateful.&lt;/strong&gt; Rate limits and spending counters persist across restarts. SQLite by default, Redis for multi-instance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single binary.&lt;/strong&gt; One Go binary. No runtime, no dependencies, no sidecar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pre-built policies for 100+ servers
&lt;/h2&gt;

&lt;p&gt;We ship policy scaffolds for over 100 popular MCP servers — Stripe, GitHub, AWS, Slack, Notion, MongoDB, Cloudflare, and many more. Each file lists every tool, categorised by risk level (Read, Write, Execute, Financial, Destructive).&lt;/p&gt;

&lt;p&gt;Copy one. Add your rules. Run. You don't need to discover tool schemas yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;MCP is going to be the standard way AI agents interact with the world. It's already everywhere — Claude, GPT, Gemini, every major agent framework supports it. And as agents get more capable, they're going to be connected to more servers, calling more tools, handling more sensitive operations.&lt;/p&gt;

&lt;p&gt;The security model needs to catch up. Not with better prompts. Not with trust-based systems. With deterministic, transport-layer enforcement that the agent can't see, can't negotiate with, and can't bypass.&lt;/p&gt;

&lt;p&gt;That's Intercept. Open source. Apache 2.0.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub:&lt;/strong&gt; github.com/policylayer/intercept&lt;br&gt;
🌐 &lt;strong&gt;Website:&lt;/strong&gt; policylayer.com&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We're building the control plane for AI agents. If you're running MCP servers in production, We'd love to hear what policies you'd want.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agents</category>
      <category>proxy</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
