<?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: AgentsID</title>
    <description>The latest articles on DEV Community by AgentsID (@agentsid).</description>
    <link>https://dev.to/agentsid</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%2F3846606%2F68b52a0c-c05d-41d8-9750-059bc752ca08.png</url>
      <title>DEV Community: AgentsID</title>
      <link>https://dev.to/agentsid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agentsid"/>
    <language>en</language>
    <item>
      <title>We Scanned 100 MCP Servers. Anthropic's Own Reference Implementations Scored F.</title>
      <dc:creator>AgentsID</dc:creator>
      <pubDate>Sun, 29 Mar 2026 20:46:48 +0000</pubDate>
      <link>https://dev.to/agentsid/we-scanned-100-mcp-servers-anthropics-own-reference-implementations-scored-f-375o</link>
      <guid>https://dev.to/agentsid/we-scanned-100-mcp-servers-anthropics-own-reference-implementations-scored-f-375o</guid>
      <description>&lt;p&gt;We scanned 100 MCP server packages — including the official reference implementations from Anthropic, Microsoft, and Notion — and published the results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every vendor-maintained server that exposed tools scored F.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Numbers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 MCP server packages scanned &lt;/li&gt;
&lt;li&gt;41 exposed tool definitions (59% were opaque to security review)&lt;/li&gt;
&lt;li&gt;485 tools analyzed&lt;/li&gt;
&lt;li&gt;893 total findings&lt;/li&gt;
&lt;li&gt;71% scored F. Zero scored A.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Gold Standard Failure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We didn't just scan random community packages. We targeted the servers that developers copy as templates:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Server&lt;/th&gt;
&lt;th&gt;Maintainer&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;server-github&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-filesystem&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@playwright/mcp&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;notion-mcp-server&lt;/td&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-puppeteer&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-memory&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-everything&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Anthropic's GitHub MCP server exposes 26 tools — push_files, merge_pull_request, fork_repository — with zero input validation, zero per-tool permissions, and zero scope boundaries. An agent with a GitHub PAT can push to any repo, merge any PR, and fork any project the token can access. No guardrails.&lt;/p&gt;

&lt;p&gt;These aren't theoretical risks. The related @modelcontextprotocol/server-git was hit with CVE-2025-68143 (path traversal) and CVE-2025-68144 (argument injection) in early 2026. Our scanner identifies exactly the structural preconditions — unbounded strings, no schema constraints — that made those CVEs inevitable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hallucination-Based Vulnerabilities: A New Vulnerability Class&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We identified something no one else is scanning for: hallucination-based vulnerabilities (HBVs) — security weaknesses that exist in the semantic space between what a tool description says and what the LLM infers.&lt;/p&gt;

&lt;p&gt;163 HBVs across 41 servers. Seven classes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vague descriptions&lt;/strong&gt; — "manages user data" could mean read or delete. The LLM picks whichever fits the prompt. &lt;/li&gt;
&lt;li&gt;A*&lt;em&gt;mbiguous tool names&lt;/em&gt;* — manage_users gives the model no signal about whether it creates or destroys.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing scope boundaries&lt;/strong&gt; — "access files" without specifying which files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short descriptions&lt;/strong&gt; — 17 characters forces the LLM to hallucinate capabilities. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No description&lt;/strong&gt; — behavior is entirely inferred from the name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implicit authority escalation&lt;/strong&gt; — dangerous tool described as a "helper utility."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overlapping descriptions&lt;/strong&gt; — two tools with 92% description overlap. The LLM picks one non-deterministically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;HBVs are invisible to traditional scanners (SAST, DAST). They can't be fixed by patching code — they require rewriting tool descriptions. And they work even with perfect authentication. OAuth doesn't help when the tool schema allows anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Thesis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The MCP specification is vulnerable by default&lt;/strong&gt;. It allows — and through its reference implementations, actively encourages — empty schemas, unbounded inputs, and vague tool descriptions. Schema strictness and semantic validation must move from optional best practice to protocol-level mandatory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try It Yourself&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The scanner is open source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @agentsid/scanner &lt;span class="nt"&gt;--&lt;/span&gt; npx @modelcontextprotocol/server-filesystem ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full paper, methodology, and all 100 scan reports:&lt;br&gt;
&lt;a href="https://github.com/stevenkozeniesky02/agentsid-scanner/blob/master/docs/state-of-agent-security-2026.md" rel="noopener noreferrer"&gt;https://github.com/stevenkozeniesky02/agentsid-scanner/blob/master/docs/state-of-agent-security-2026.md&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Steven Kozeniesky — AgentsID Research (agentsid.dev)
&lt;/h2&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Why 88% of MCP Servers Have No Real Authentication (And How to Fix It)</title>
      <dc:creator>AgentsID</dc:creator>
      <pubDate>Fri, 27 Mar 2026 20:23:41 +0000</pubDate>
      <link>https://dev.to/agentsid/why-88-of-mcp-servers-have-no-real-authentication-and-how-to-fix-it-3f6n</link>
      <guid>https://dev.to/agentsid/why-88-of-mcp-servers-have-no-real-authentication-and-how-to-fix-it-3f6n</guid>
      <description>&lt;p&gt;AI agents are accessing databases, sending emails, calling APIs, and making purchases. But there's no standard way to identify them, limit what they can do, or trace their actions back to a human.&lt;/p&gt;

&lt;p&gt;I dug into the numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;88%&lt;/strong&gt; of MCP servers need authentication
&lt;/li&gt;
&lt;li&gt;Only &lt;strong&gt;8.5%&lt;/strong&gt; use OAuth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;53%&lt;/strong&gt; rely on static API keys in environment variables&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;80%&lt;/strong&gt; of organizations can't tell what their agents are doing in real-time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the wild west. So I built &lt;a href="https://agentsid.dev" rel="noopener noreferrer"&gt;AgentsID&lt;/a&gt; to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;When you build an MCP server, every tool is wide open by default. Any agent with the API key can call any tool — search, delete, deploy, admin reset — with zero restrictions.&lt;/p&gt;

&lt;p&gt;There's no way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give Agent A access to &lt;code&gt;search&lt;/code&gt; but block &lt;code&gt;delete&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Know which agent made which tool call&lt;/li&gt;
&lt;li&gt;Trace an agent's actions back to the human who authorized it&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Fix: 3 Lines of Middleware
&lt;/h2&gt;

&lt;p&gt;Install the SDK:&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; @agentsid/sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the middleware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createHttpMiddleware&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@agentsid/sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;guard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createHttpMiddleware&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;projectKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AGENTSID_PROJECT_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate every tool call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toolName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Blocked&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Every tool call is now validated.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Control
&lt;/h2&gt;

&lt;p&gt;AgentsID uses a &lt;strong&gt;deny-first&lt;/strong&gt; model. Everything is blocked unless you explicitly allow it. The permission engine supports 14 constraint types: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt; — Allow/deny by tool name with wildcards (&lt;code&gt;search_*&lt;/code&gt; allowed, &lt;code&gt;delete_*&lt;/code&gt; blocked)&lt;br&gt;
&lt;strong&gt;Time &amp;amp; Rate&lt;/strong&gt; — Restrict to business hours, limit calls per minute/hour&lt;br&gt;
&lt;strong&gt;Behavioral&lt;/strong&gt; — Require tools to run in sequence, detect anomalous behavior&lt;br&gt;
&lt;strong&gt;Resource&lt;/strong&gt; — Set budget caps, limit session duration&lt;br&gt;
&lt;strong&gt;Governance&lt;/strong&gt; — Require human approval for sensitive actions, limit delegation depth&lt;/p&gt;

&lt;h2&gt;
  
  
  Delegation Chains
&lt;/h2&gt;

&lt;p&gt;When Agent A spawns Agent B, permissions automatically narrow. Agent B can never have more access than Agent A. Revoke the parent and the entire chain downstream stops. &lt;/p&gt;

&lt;h2&gt;
  
  
  Audit Trail
&lt;/h2&gt;

&lt;p&gt;Every tool call — allowed or denied — is logged. You get a full record of what each agent did, when, and why it was allowed or blocked. The dashboard shows it all in a live feed. &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&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; @agentsid/sdk    &lt;span class="c"&gt;# TypeScript&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;agentsid          &lt;span class="c"&gt;# Python&lt;/span&gt;
gem &lt;span class="nb"&gt;install &lt;/span&gt;agentsid          &lt;span class="c"&gt;# Ruby&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free tier: 25 agents, 10,000 events/month. No credit card.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agentsid.dev/dashboard" rel="noopener noreferrer"&gt;https://agentsid.dev/dashboard&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://agentsid.dev/docs" rel="noopener noreferrer"&gt;https://agentsid.dev/docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentsid.dev/guides" rel="noopener noreferrer"&gt;https://agentsid.dev/guides&lt;/a&gt; (Claude, Cursor, Codex)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/stevenkozeniesky02/agentsid" rel="noopener noreferrer"&gt;https://github.com/stevenkozeniesky02/agentsid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>typescript</category>
      <category>python</category>
    </item>
  </channel>
</rss>
