<?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: aisolutions323-ux</title>
    <description>The latest articles on DEV Community by aisolutions323-ux (@aisolutions323ux).</description>
    <link>https://dev.to/aisolutions323ux</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%2F4197074%2Fac3cfcb2-1b66-4056-a0b5-b343f67d868b.png</url>
      <title>DEV Community: aisolutions323-ux</title>
      <link>https://dev.to/aisolutions323ux</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aisolutions323ux"/>
    <language>en</language>
    <item>
      <title>Three weeks of watching MCP advisories appear and disappear</title>
      <dc:creator>aisolutions323-ux</dc:creator>
      <pubDate>Mon, 09 Nov 2026 12:30:33 +0000</pubDate>
      <link>https://dev.to/aisolutions323ux/three-weeks-of-watching-mcp-advisories-appear-and-disappear-3ph8</link>
      <guid>https://dev.to/aisolutions323ux/three-weeks-of-watching-mcp-advisories-appear-and-disappear-3ph8</guid>
      <description>&lt;p&gt;Three weeks ago I published a single-night scan of the top 500 MCP servers. Then I left the scanner running: every night it re-ranks the official MCP Registry by last-week downloads, re-checks OSV, and diffs against the night before.&lt;/p&gt;

&lt;p&gt;This is what changed between &lt;strong&gt;October 20&lt;/strong&gt; and &lt;strong&gt;November 9, 2026&lt;/strong&gt; — and why an advisory "appearing" or "disappearing" on a tracker is usually not what it sounds like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline, then the asterisk
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Oct 20&lt;/th&gt;
&lt;th&gt;Nov 9&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unique OSV records in the top 500&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;222&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distinct vulnerabilities (aliases merged)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Servers with any advisory&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Servers whose &lt;em&gt;current&lt;/em&gt; version is still affected&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Median score&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mean score&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;92.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;89.6&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you only look at the left column of that table, it looks like a security miracle. It isn't. Almost none of those advisories were withdrawn, and almost none of the packages "healed" overnight. What moved was the &lt;em&gt;set of servers&lt;/em&gt; I track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why 200+ advisories left the board
&lt;/h2&gt;

&lt;p&gt;On October 20, one server accounted for nearly all of the noise: &lt;strong&gt;PraisonAI&lt;/strong&gt; (&lt;code&gt;io.github.MervinPraison/praisonai&lt;/code&gt;). It had &lt;strong&gt;207&lt;/strong&gt; OSV records, &lt;strong&gt;159&lt;/strong&gt; of which still matched its then-current version (2.3.42), on &lt;strong&gt;2,722&lt;/strong&gt; weekly downloads — enough for the top 500.&lt;/p&gt;

&lt;p&gt;By the October 31 scan it was gone. The 500th server that night had only &lt;strong&gt;78&lt;/strong&gt; weekly downloads. PraisonAI didn't get a mass fix; it fell below the cutoff. When a package leaves the tracked set, every advisory leaves with it. That's how 222 records became 4 overnight, and how "servers currently affected" went from 1 to 0.&lt;/p&gt;

&lt;p&gt;The same thing happened, smaller, to Ouroboros, Windows-MCP and stata-mcp — historical advisories only. They rotated out on download rank. Nothing was withdrawn; they left scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advisories that flicker in and out
&lt;/h2&gt;

&lt;p&gt;Once you start watching nightly, you see the same IDs come and go with the ranking. Three examples I verified against &lt;a href="https://osv.dev" rel="noopener noreferrer"&gt;OSV&lt;/a&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;GHSA-j98m-w3xp-9f56&lt;/code&gt; / &lt;code&gt;PYSEC-2026-331&lt;/code&gt; — excel-mcp-server
&lt;/h3&gt;

&lt;p&gt;A path traversal in PyPI &lt;code&gt;excel-mcp-server&lt;/code&gt; (&lt;a href="https://osv.dev/vulnerability/GHSA-j98m-w3xp-9f56" rel="noopener noreferrer"&gt;CVE-2026-40576&lt;/a&gt;). OSV: introduced in &lt;code&gt;0&lt;/code&gt;, &lt;strong&gt;fixed in &lt;code&gt;0.1.8&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On October 20 the registry listed &lt;strong&gt;2.2.1&lt;/strong&gt;, so it already didn't affect the current version. The server then dropped out of the top 500 (Oct 24–28), reappeared Oct 30 at 2.2.3, vanished on the 31st, and is back today at &lt;strong&gt;2.2.9&lt;/strong&gt;. The advisory didn't toggle — weekly downloads did (~91k → ~33k → ~45k), enough to cross a cutoff this dense at the long tail.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;GHSA-fvh2-gm75-j4j7&lt;/code&gt; — dynoxide
&lt;/h3&gt;

&lt;p&gt;DNS rebinding / cross-origin CSRF via dynoxide's MCP HTTP transport (&lt;a href="https://osv.dev/vulnerability/GHSA-fvh2-gm75-j4j7" rel="noopener noreferrer"&gt;CVE-2026-42559&lt;/a&gt;). OSV: npm &lt;code&gt;dynoxide&lt;/code&gt; from &lt;code&gt;0.9.3&lt;/code&gt;, &lt;strong&gt;fixed in &lt;code&gt;0.9.13&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Absent on October 20. It showed up on &lt;strong&gt;November 9&lt;/strong&gt; when dynoxide entered the top 500 at &lt;strong&gt;1.6.0&lt;/strong&gt; (~20k weekly downloads) — well past the fix. From the tracker it "appeared." From the package, the bug was fixed months ago.&lt;/p&gt;

&lt;h3&gt;
  
  
  ha-mcp's four moderate findings
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;io.github.homeassistant-ai/ha-mcp&lt;/code&gt; entered the set on October 29 and is in today's scan at &lt;strong&gt;9.1.2&lt;/strong&gt;. It brings four distinct issues (six OSV records once you count the PYSEC mirrors):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GHSA-fmfg-9g7c-3vq7&lt;/code&gt; / &lt;code&gt;PYSEC-2026-2507&lt;/code&gt; — OAuth DCR error-oracle recon, fixed in &lt;strong&gt;7.0.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GHSA-pf93-j98v-25pv&lt;/code&gt; / &lt;code&gt;PYSEC-2026-2508&lt;/code&gt; — XSS in the OAuth consent form, fixed in &lt;strong&gt;7.0.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GHSA-g39v-cvjh-8fpf&lt;/code&gt; — YAML config backups served unauthenticated under &lt;code&gt;/local/&lt;/code&gt;, fixed in &lt;strong&gt;7.5.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GHSA-q855-8rh5-jfgq&lt;/code&gt; — unauthenticated add-on settings at the bare root path, fixed in &lt;strong&gt;7.10.0&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of them hit 9.1.2. Same pattern: the package crossed into the top 500; the historical record came with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the rest of the board looks like today
&lt;/h2&gt;

&lt;p&gt;After merging aliases, today's top 500 carries &lt;strong&gt;7&lt;/strong&gt; distinct vulnerabilities across &lt;strong&gt;4&lt;/strong&gt; servers. Severity, from the GHSA side: &lt;strong&gt;2 critical, 1 high, 4 moderate&lt;/strong&gt;. Zero affect the version currently published in the registry. The critical pair is the familiar browser-use &lt;code&gt;allowed_domains&lt;/code&gt; bypass (&lt;code&gt;GHSA-x39x-9qw5-ghrf&lt;/code&gt; / CVE-2025-47241, fixed in &lt;code&gt;0.1.45&lt;/code&gt;, current &lt;code&gt;0.13.11&lt;/code&gt;) and the excel path traversal above.&lt;/p&gt;

&lt;p&gt;No new OSV advisory &lt;em&gt;published this month&lt;/em&gt; matched a tracked package. The "new" rows on the board are new &lt;em&gt;membership&lt;/em&gt;, not new CVEs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The top 500 itself is restless
&lt;/h2&gt;

&lt;p&gt;Between October 20 and November 9, only &lt;strong&gt;122&lt;/strong&gt; of 500 servers stayed; &lt;strong&gt;378&lt;/strong&gt; left and &lt;strong&gt;378&lt;/strong&gt; entered. Dramatic until you see the floor: the 500th server sometimes has under 100 weekly downloads, and the npm/PyPI candidate pool swung from ~6,800 to ~4,200 as the registry churned.&lt;/p&gt;

&lt;p&gt;Mean score dipped 92.4 → 89.6; median held at 93. Almost entirely compositional — new entrants skew toward missing licenses and older last-pushes, not open advisories. Of the 122 that stayed, 37 changed score, mostly ±3. The "strong" band (85–100) went 475 → 398; "fair" went from 1 (PraisonAI) to 0.&lt;/p&gt;

&lt;p&gt;Risky-change alerts stayed quiet: still just the October 18 archived-repo pair. Version bumps and description edits land in each timeline; they don't page anyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd actually do with this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Treat "advisory appeared on the tracker" as a prompt, not a verdict.&lt;/strong&gt; Check the affected range against the version &lt;em&gt;you&lt;/em&gt; run. &lt;code&gt;excel-mcp-server@2.2.9&lt;/code&gt; and &lt;code&gt;dynoxide@1.6.0&lt;/code&gt; are both clean relative to their listed fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin versions.&lt;/strong&gt; &lt;code&gt;npx pkg@1.2.3&lt;/code&gt; / &lt;code&gt;uvx pkg==1.2.3&lt;/code&gt;, not &lt;code&gt;@latest&lt;/code&gt;. Ranking churn and version churn are different problems; pinning only solves the second, but it's the one that decides whether an old advisory applies to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't over-read a high historical count.&lt;/strong&gt; A package with fixed advisories was looked at. A package with &lt;em&gt;zero&lt;/em&gt; advisories might be safe, or it might just not have been looked at.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the package after install.&lt;/strong&gt; The thing that still worries me more than old CVEs is a quiet change to the command, host, or required secrets. That's what the nightly diff is for.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;Still a heuristic: OSV matched by package name, no source review, a clean result is not an audit. The top-500 cut is last-week downloads, so the long tail is noisy by design. "11 records / 7 vulnerabilities" is GHSA and PYSEC describing the same CVEs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep watching with me
&lt;/h2&gt;

&lt;p&gt;Live board: &lt;strong&gt;&lt;a href="https://mcpwatch-zeta.vercel.app" rel="noopener noreferrer"&gt;MCPWatch&lt;/a&gt;&lt;/strong&gt; — scores, timelines, alert feed. For nights when something actually moved, the &lt;a href="https://mcpwatch-zeta.vercel.app/newsletter/" rel="noopener noreferrer"&gt;weekly digest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you maintain one of these and a row looks wrong, tell me. Ranking churn is expected; bad data isn't.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>osv</category>
      <category>ai</category>
    </item>
    <item>
      <title>What I found scanning the top 500 MCP servers for security</title>
      <dc:creator>aisolutions323-ux</dc:creator>
      <pubDate>Wed, 21 Oct 2026 00:24:40 +0000</pubDate>
      <link>https://dev.to/aisolutions323ux/what-i-found-scanning-the-top-500-mcp-servers-for-security-5ekb</link>
      <guid>https://dev.to/aisolutions323ux/what-i-found-scanning-the-top-500-mcp-servers-for-security-5ekb</guid>
      <description>&lt;p&gt;Every MCP server you add to Claude, Cursor or your own agent is code that runs on your machine. Usually that's &lt;code&gt;npx something&lt;/code&gt; or &lt;code&gt;uvx something&lt;/code&gt;, and it runs with your environment variables and API keys sitting right there. I wanted to know how worried I should actually be. So I built a small scanner, pointed it at the official MCP Registry, and checked the 500 most-downloaded servers.&lt;/p&gt;

&lt;p&gt;This post covers what came back, how I scored it, and what I now check before installing a server. The data is from the scan on October 19, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The official registry (registry.modelcontextprotocol.io) listed &lt;strong&gt;22,860&lt;/strong&gt; server entries when I scanned it. Of those, &lt;strong&gt;6,557&lt;/strong&gt; ship an npm or PyPI package, which means I could look up download counts and match them against vulnerability databases. I ranked those by last-week downloads and kept the top &lt;strong&gt;500&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For each one I collected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Known advisories&lt;/strong&gt; from &lt;a href="https://osv.dev" rel="noopener noreferrer"&gt;OSV.dev&lt;/a&gt;, matched by package name, plus a check of whether the &lt;em&gt;currently published version&lt;/em&gt; falls in the affected range.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance&lt;/strong&gt; from GitHub: last push, archived status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: whether it has a public repo and a detected license.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata stability&lt;/strong&gt;: nightly snapshots of the registry entry, diffed against the previous night's.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adoption&lt;/strong&gt;: weekly downloads from npm or PyPI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The headline: it's mostly fine, and the risk is concentrated
&lt;/h2&gt;

&lt;p&gt;Across all 500 servers, OSV returned &lt;strong&gt;112 unique advisories&lt;/strong&gt;. They hit only &lt;strong&gt;6 servers&lt;/strong&gt;. By severity, that's &lt;strong&gt;30 critical, 65 high and 17 moderate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The more useful number is how many servers are affected &lt;em&gt;today&lt;/em&gt;. Of those 6, &lt;strong&gt;only one server's current version is still affected&lt;/strong&gt;. The other five had real advisories in the past, and their maintainers shipped fixes. If you're on their latest version, those old advisories don't apply to you.&lt;/p&gt;

&lt;p&gt;The one server still affected is &lt;strong&gt;PraisonAI&lt;/strong&gt; (&lt;code&gt;io.github.MervinPraison/praisonai&lt;/code&gt;). OSV lists &lt;strong&gt;104 unique advisories&lt;/strong&gt; against its package, and &lt;strong&gt;80&lt;/strong&gt; of them include the current registry version (2.3.42) in their affected range. Fifteen advisories across the dataset were published this month, and all of them are PraisonAI's. Their summaries include an authentication bypass via a spoofed Host header and an unauthenticated jobs API that allows webhook SSRF. To be fair to the project: it's actively maintained (its last push was the day of the scan), it has a public MIT-licensed repo, and a high advisory count partly reflects how much attention it gets. But if you run it, check the advisories against your version and setup first.&lt;/p&gt;

&lt;p&gt;The five servers whose current versions are clean are stata-mcp, Ouroboros, browser-use, Excel MCP Server and Windows-MCP. They're the normal case: something got reported and something got fixed. browser-use, for example, has one advisory: a critical &lt;code&gt;allowed_domains&lt;/code&gt; bypass (CVE-2025-47241). It's already fixed in the current version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scores across the board
&lt;/h2&gt;

&lt;p&gt;Each server gets a 0–100 score. The weights are deliberately simple:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Max points&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Known advisories (OSV)&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance (GitHub activity)&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source transparency (repo + license)&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metadata stability (registry diffs)&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adoption (weekly downloads)&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An advisory that affects the current version costs 20 points. A historical one costs 2 points, and historical penalties stop at 8 points total. If I don't have data for a factor, I leave it out instead of guessing, and the server page says it's unknown.&lt;/p&gt;

&lt;p&gt;For the 500 servers, the &lt;strong&gt;median score is 93&lt;/strong&gt; and the &lt;strong&gt;mean is 92&lt;/strong&gt;. &lt;strong&gt;477&lt;/strong&gt; land in the "strong" band (85–100), &lt;strong&gt;22&lt;/strong&gt; are "good" (70–84), &lt;strong&gt;1&lt;/strong&gt; is "fair" (50–69), and &lt;strong&gt;none&lt;/strong&gt; are poor. The single "fair" one is PraisonAI, at 56.&lt;/p&gt;

&lt;p&gt;The less obvious findings came from the other factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;37&lt;/strong&gt; servers have a GitHub repo with no detected license, and another &lt;strong&gt;18&lt;/strong&gt; have no repo linked at all. If you can't read the source, you're trusting the package blindly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2&lt;/strong&gt; repos are archived, and &lt;strong&gt;1&lt;/strong&gt; hasn't been pushed in over a year. &lt;strong&gt;472&lt;/strong&gt; were pushed in the last 90 days, so the ecosystem is very active.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I only alert on changes that matter
&lt;/h2&gt;

&lt;p&gt;Vulnerability databases only tell you about &lt;em&gt;known&lt;/em&gt; bugs. What worries me more with MCP is the &lt;strong&gt;rug pull&lt;/strong&gt;: a server that was fine when you installed it quietly changes what it runs.&lt;/p&gt;

&lt;p&gt;So every night the scanner snapshots the registry metadata a client sees and diffs it. A change only counts as a risky alert if it changes &lt;strong&gt;what code runs or where your data goes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a new or changed remote host&lt;/li&gt;
&lt;li&gt;a new package identifier or registry type, or a different Docker image repo&lt;/li&gt;
&lt;li&gt;a changed runtime command, or new arguments that execute code or redirect package sources&lt;/li&gt;
&lt;li&gt;a new or removed required secret env var (or something like &lt;code&gt;NODE_OPTIONS&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Version bumps, description edits, tracking parameters and trailing slashes are recorded in each server's timeline but don't alert. I tried alerting on everything early on, and it was all noise.&lt;/p&gt;

&lt;p&gt;The first nights produced exactly &lt;strong&gt;2 alerts&lt;/strong&gt;, both for the same server. Its repo got archived, and its score dropped from &lt;strong&gt;93 to 73&lt;/strong&gt; as a result. That's about the volume I'd want: rare, and worth reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I check now before installing an MCP server
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check advisories against the version you'll actually run.&lt;/strong&gt; A long history isn't the problem; an open advisory on your version is. Pin versions in your client config (&lt;code&gt;npx pkg@1.2.3&lt;/code&gt;, not &lt;code&gt;pkg@latest&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look at the command, not just the name.&lt;/strong&gt; An &lt;code&gt;npx&lt;/code&gt;/&lt;code&gt;uvx&lt;/code&gt; line downloads and runs code with your environment. Read the &lt;code&gt;args&lt;/code&gt; and &lt;code&gt;env&lt;/code&gt; in the config snippet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be stingy with secrets.&lt;/strong&gt; If a server asks for a token, scope it down (read-only, single repo or project). Be suspicious when a new required secret appears after an update.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefer a public repo with a license.&lt;/strong&gt; It's not a guarantee, but it means someone &lt;em&gt;can&lt;/em&gt; look.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check if it's maintained.&lt;/strong&gt; An archived repo means no one will fix the next bug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote servers: know the host.&lt;/strong&gt; If the URL changes domain, treat it as a new server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch for changes after install&lt;/strong&gt;, not just at install time. That's the part people skip.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;This is a heuristic, not an audit. OSV matching is by package name, and the scanner doesn't read code, so a clean result doesn't prove a server is safe. The registry doesn't publish tool lists yet, so tool-level changes show as unknown for now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Everything is public and free at &lt;strong&gt;&lt;a href="https://mcpwatch-zeta.vercel.app" rel="noopener noreferrer"&gt;MCPWatch&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-server pages with the score breakdown and change timeline&lt;/li&gt;
&lt;li&gt;Alerts feed and RSS at &lt;a href="https://mcpwatch-zeta.vercel.app/alerts.xml" rel="noopener noreferrer"&gt;&lt;code&gt;/alerts.xml&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A README badge for maintainers: &lt;code&gt;https://mcpwatch-zeta.vercel.app/badge/&amp;lt;id&amp;gt;.svg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The full rule set at &lt;a href="https://mcpwatch-zeta.vercel.app/about/methodology" rel="noopener noreferrer"&gt;/about/methodology&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A weekly digest of real changes: &lt;a href="https://mcpwatch-zeta.vercel.app/newsletter/" rel="noopener noreferrer"&gt;/newsletter/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you maintain one of these servers and something looks wrong, tell me. I'd rather fix the data than defend it.&lt;/p&gt;

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