<?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: v0idw4lker</title>
    <description>The latest articles on DEV Community by v0idw4lker (@v0idw4lker).</description>
    <link>https://dev.to/v0idw4lker</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4091132%2F37968b2f-900c-4136-872e-27ebaf90c7b4.jpg</url>
      <title>DEV Community: v0idw4lker</title>
      <link>https://dev.to/v0idw4lker</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/v0idw4lker"/>
    <language>en</language>
    <item>
      <title>trustmcp: a pre-install security scanner for MCP servers (and a calibration bug I found in my own tool while building it)</title>
      <dc:creator>v0idw4lker</dc:creator>
      <pubDate>Sun, 23 Aug 2026 18:09:53 +0000</pubDate>
      <link>https://dev.to/v0idw4lker/trustmcp-a-pre-install-security-scanner-for-mcp-servers-and-a-calibration-bug-i-found-in-my-own-35hj</link>
      <guid>https://dev.to/v0idw4lker/trustmcp-a-pre-install-security-scanner-for-mcp-servers-and-a-calibration-bug-i-found-in-my-own-35hj</guid>
      <description>&lt;p&gt;Depending on which audit you read, somewhere between 38% and 46% of public MCP servers have no authentication at all. &lt;a href="https://dev.to/kai_security_ai/i-scanned-every-server-in-the-official-mcp-registry-heres-what-i-found-4p4m"&gt;Kai Security AI's scan of 518 registry servers&lt;/a&gt; is the most cited number, and a few follow-ups have refined it since. Whatever the exact figure, the takeaway is the same: the registry has no security requirements for listing, and most scanners can't help you &lt;em&gt;before&lt;/em&gt; you've already pulled the code down and run it.&lt;/p&gt;

&lt;p&gt;That gap is what I've been building &lt;strong&gt;trustmcp&lt;/strong&gt; to close.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;trustmcp&lt;/code&gt; is an open-source CLI that scans MCP servers for security issues: hardcoded secrets, unsafe &lt;code&gt;eval&lt;/code&gt;/&lt;code&gt;exec&lt;/code&gt;/&lt;code&gt;subprocess&lt;/code&gt; patterns, hidden prompt-injection text in tool descriptions, missing auth, unpinned dependencies. It outputs an A-F grade plus a SARIF report that shows up directly in GitHub's Security tab.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;trustmcp
trustmcp scan &lt;span class="nt"&gt;--path&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--mode&lt;/span&gt; static
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The part I think is actually new
&lt;/h3&gt;

&lt;p&gt;Every other MCP scanner I've found assumes you already have the source or a running server. &lt;code&gt;trustmcp check&lt;/code&gt; scans a server &lt;em&gt;before&lt;/em&gt; you install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;trustmcp check npm:@modelcontextprotocol/server-everything
trustmcp check pypi:some-mcp-server
trustmcp check github:owner/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It resolves the package, downloads it into an isolated temp directory, and statically analyzes it. Nothing from the package is ever executed.&lt;/p&gt;

&lt;h3&gt;
  
  
  A bug I found in my own tool, and how I fixed it
&lt;/h3&gt;

&lt;p&gt;Static analysis is Python-only right now (JS/TS is next). Early on, I ran &lt;code&gt;check&lt;/code&gt; against Anthropic's own official reference server, &lt;code&gt;@modelcontextprotocol/server-everything&lt;/code&gt;, a TypeScript package, and it came back &lt;strong&gt;Grade F, 33/100&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's a bad look for a security tool: failing the reference implementation while having scanned zero lines of its actual code.&lt;/p&gt;

&lt;p&gt;Digging in, it wasn't one bug, it was the same root cause hitting two modules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The static analyzer only reads &lt;code&gt;.py&lt;/code&gt; files, so for a TS package it had nothing to scan (reasonable), but nothing told the user that a confident-looking grade had been computed from zero source review.&lt;/li&gt;
&lt;li&gt;The auth-posture check has the same Python-only blind spot, and since &lt;code&gt;check&lt;/code&gt; never runs a live probe (that would mean executing untrusted code), it was falling through to "no authentication mechanism detected" at HIGH severity, asserting an absence it had no way to actually observe.&lt;/li&gt;
&lt;li&gt;On top of that, a dozen ordinary &lt;code&gt;^&lt;/code&gt;/&lt;code&gt;~&lt;/code&gt; semver ranges in &lt;code&gt;package.json&lt;/code&gt;, completely normal npm practice, were each individually costing points with no cap, so the score dropped almost regardless of anything else.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fixed all three: an honest caveat when zero files were analyzed, a new "undetermined" auth state (distinct from "none detected") that doesn't carry the false-positive HIGH penalty, and a cap on how much any single repeated finding can drag the score. Same server now scores &lt;strong&gt;76, Grade C&lt;/strong&gt;, which is the actually defensible number: real findings (no lockfile, semver ranges, an honest "couldn't check this" note on auth), correctly weighted, nothing invented.&lt;/p&gt;

&lt;p&gt;None of this touched the tool's validated detection benchmark, which is run against &lt;a href="https://github.com/harishsg993010/damn-vulnerable-MCP-server" rel="noopener noreferrer"&gt;Damn Vulnerable MCP Server&lt;/a&gt;. That's all Python, so it was never affected. Currently &lt;strong&gt;3/10 canonical challenges fully detected, 1 partial, 6 missed&lt;/strong&gt;. Full per-challenge breakdown, including exactly why each miss happened, is in the README. I'd rather publish the real number than round up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fics4cddgj2q14y7kvduv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fics4cddgj2q14y7kvduv.gif" alt="trustmcp demo" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/v0idw4lker/trustmcp" rel="noopener noreferrer"&gt;https://github.com/v0idw4lker/trustmcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PyPI: &lt;a href="https://pypi.org/project/trustmcp/" rel="noopener noreferrer"&gt;https://pypi.org/project/trustmcp/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free, open source, MIT licensed. Static + dynamic analysis, auth posture, SARIF/JSON reporting, and the pre-install &lt;code&gt;check&lt;/code&gt; command are all in the free tier. Semantic (LLM-based) analysis and cross-server toxic-flow detection are planned as a paid tier later, but everything above is complete on its own.&lt;/p&gt;

&lt;p&gt;Feedback and bug reports very welcome, especially if you can break it on a server I haven't tested against.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
