<?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: X1Y1</title>
    <description>The latest articles on DEV Community by X1Y1 (@x1y1co).</description>
    <link>https://dev.to/x1y1co</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%2F4224622%2F975a900d-e098-41ea-adbc-21a679742010.jpg</url>
      <title>DEV Community: X1Y1</title>
      <link>https://dev.to/x1y1co</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/x1y1co"/>
    <language>en</language>
    <item>
      <title>We Checked 61 Official MCP Servers Against the Auth Spec</title>
      <dc:creator>X1Y1</dc:creator>
      <pubDate>Tue, 03 Nov 2026 23:35:04 +0000</pubDate>
      <link>https://dev.to/x1y1co/we-checked-61-official-mcp-servers-against-the-auth-spec-48i4</link>
      <guid>https://dev.to/x1y1co/we-checked-61-official-mcp-servers-against-the-auth-spec-48i4</guid>
      <description>&lt;p&gt;Most SaaS companies now ship an official remote MCP server, and most of them sit behind OAuth. We wanted to know how closely those servers follow the current MCP authorization spec (the 2026-07-28 revision), so we checked the official servers of 67 vendors from the outside. 61 of them require a login. This post is about those 61.&lt;/p&gt;

&lt;p&gt;The short version: the basics are done everywhere. The newer parts of the spec are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we checked
&lt;/h2&gt;

&lt;p&gt;We used our free &lt;a href="https://x1y1.co/mcp-check" rel="noopener noreferrer"&gt;MCP Server Check&lt;/a&gt;. It is passive. For each server it sends one unauthenticated &lt;code&gt;initialize&lt;/code&gt; request, reads the public OAuth discovery documents, and calls &lt;code&gt;tools/list&lt;/code&gt; only if the server answers without a token. It never calls a tool and never sends a token.&lt;/p&gt;

&lt;p&gt;We ran every server on October 26 and again on November 4, 2026. The numbers below are from November 4. Results are point in time and checked from Cloudflare's network, so a server can look different from another network or a few days later.&lt;/p&gt;

&lt;h2&gt;
  
  
  What every server gets right
&lt;/h2&gt;

&lt;p&gt;All 61 answer an anonymous request with HTTP 401, and all 61 advertise PKCE with S256. That is the part of the spec that stops the most obvious mistakes, and nobody skipped it.&lt;/p&gt;

&lt;p&gt;56 of 61 also publish OAuth Protected Resource Metadata (RFC 9728) and point to it from the 401 response, which is how a client finds where to log in. The other 5 either use the older 2025-03-26 discovery layout or publish the metadata without pointing to it in the 401.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where most of them fall behind
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Client registration.&lt;/strong&gt; The current spec says Dynamic Client Registration "is deprecated and retained for backwards compatibility with authorization servers that do not support Client ID Metadata Documents." 25 of 61 advertise Client ID Metadata Documents (CIMD). The other 36 rely on dynamic registration or manual client setup. Nothing breaks today, but every client that connects to those 36 still needs a registration step the spec is moving away from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issuer check.&lt;/strong&gt; The spec says authorization servers SHOULD include the &lt;code&gt;iss&lt;/code&gt; parameter in authorization responses (RFC 9207), and advertise it with &lt;code&gt;authorization_response_iss_parameter_supported&lt;/code&gt;. It lets a client catch an OAuth mix-up attack, where a code from one authorization server is sent to another. 40 of 61 do not advertise it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope hint.&lt;/strong&gt; 22 of 61 give the client no hint about which scopes to request, neither in the 401 nor in &lt;code&gt;scopes_supported&lt;/code&gt;. The client then has to guess, and guessing usually means asking for more than it needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who moved in nine days
&lt;/h2&gt;

&lt;p&gt;Between October 26 and November 4, six changes showed up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apollo, Cal.com and Neon started advertising Client ID Metadata Documents.&lt;/li&gt;
&lt;li&gt;Neon and Mercado Pago started advertising the RFC 9207 issuer parameter.&lt;/li&gt;
&lt;li&gt;Datadog's 401 now points to its protected resource metadata.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these companies told us about it, and we did not contact them. It is a sign the spec changes are being picked up, just not all at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full table
&lt;/h2&gt;

&lt;p&gt;Score is out of 100 and also includes transport and HSTS checks that are not shown as columns. "Discovery: partial" means the server uses the older discovery layout or does not point to its metadata from the 401.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Company&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;CIMD&lt;/th&gt;
&lt;th&gt;iss (RFC 9207)&lt;/th&gt;
&lt;th&gt;Scope hint&lt;/th&gt;
&lt;th&gt;Discovery&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fireflies&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airtable&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apollo&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canva&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clerk&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Klaviyo&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neon&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Railway&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sentry&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tavily&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monday.com&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amplitude&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cal.com&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grafana&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Granola&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Honeycomb&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostHog&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resend&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Todoist&lt;/td&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figma&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semgrep&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asana&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Buffer&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClickUp&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gamma&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitLab&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jam&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Miro&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Netlify&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ahrefs&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Box&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Bindings&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datadog&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dropbox&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hex&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HubSpot&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intercom&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mux&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PagerDuty&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Postman&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prisma&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wix&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PayPal&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Render&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Square&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webflow&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apify&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mercado Pago&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zapier&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plaid&lt;/td&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Atlassian&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notion and Fireflies passed every check.&lt;/p&gt;

&lt;p&gt;Six more vendors answered &lt;code&gt;tools/list&lt;/code&gt; without a token: Hugging Face, Context7, Shopify (setup.shopify.com), DeepWiki, Firecrawl and Browserbase. They are documentation, search and scraping tools where open access looks like a deliberate choice, so we left them out of the auth numbers. Nine addresses we tried did not answer as MCP servers, usually because we guessed the wrong URL, and they are not reported.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you run one of these servers
&lt;/h2&gt;

&lt;p&gt;The three changes are small. Advertise &lt;code&gt;client_id_metadata_document_supported&lt;/code&gt; once your authorization server supports CIMD, include &lt;code&gt;iss&lt;/code&gt; in authorization responses and set &lt;code&gt;authorization_response_iss_parameter_supported: true&lt;/code&gt;, and put a &lt;code&gt;scope&lt;/code&gt; in the &lt;code&gt;WWW-Authenticate&lt;/code&gt; header of the 401.&lt;/p&gt;

&lt;p&gt;If you think we scored your server wrong, run it through the &lt;a href="https://x1y1.co/mcp-check" rel="noopener noreferrer"&gt;checker&lt;/a&gt; and tell us at &lt;a href="mailto:hello@x1y1.co"&gt;hello@x1y1.co&lt;/a&gt;. We would rather fix a rule than publish a wrong number. There is also a JSON API: &lt;code&gt;https://x1y1.co/api/mcp-check?url=&amp;lt;server&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://x1y1.co/journal/official-mcp-servers-auth-spec-check/" rel="noopener noreferrer"&gt;x1y1.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>oauth</category>
      <category>ai</category>
    </item>
    <item>
      <title>620,000 Downloads Last Week for MCP Servers That Will Never Be Patched</title>
      <dc:creator>X1Y1</dc:creator>
      <pubDate>Tue, 03 Nov 2026 16:02:06 +0000</pubDate>
      <link>https://dev.to/x1y1co/620000-downloads-last-week-for-mcp-servers-that-will-never-be-patched-18mc</link>
      <guid>https://dev.to/x1y1co/620000-downloads-last-week-for-mcp-servers-that-will-never-be-patched-18mc</guid>
      <description>&lt;p&gt;On November 2, Glow Security published research it calls &lt;a href="https://www.glow.io/blogs/mcphantom-ai-coding-agents-are-installing-vulnerable-deprecated-mcp-servers-from-training-data" rel="noopener noreferrer"&gt;MCPhantom&lt;/a&gt;: AI coding agents keep installing MCP servers that were archived more than a year ago. In 98% of the sessions where an agent set up one of these deprecated servers, the user had not asked for it by name. The agent filled in the package from what its model remembered. &lt;a href="https://www.helpnetsecurity.com/2026/11/03/mcphantom-deprecated-mcp-servers/" rel="noopener noreferrer"&gt;Help Net Security covered it&lt;/a&gt; on November 3.&lt;/p&gt;

&lt;p&gt;We wanted to know if this is still happening at scale, so we checked npm ourselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers from npm
&lt;/h2&gt;

&lt;p&gt;These are the twelve packages Glow lists, all under &lt;code&gt;@modelcontextprotocol&lt;/code&gt;, with downloads for the week of October 27 to November 2, 2026, from the public npm downloads API. Every one of them is marked deprecated in the npm registry today.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;Downloads last week&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;200,397&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-slack&lt;/td&gt;
&lt;td&gt;176,607&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-postgres&lt;/td&gt;
&lt;td&gt;158,147&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-brave-search&lt;/td&gt;
&lt;td&gt;31,665&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-puppeteer&lt;/td&gt;
&lt;td&gt;30,673&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-google-maps&lt;/td&gt;
&lt;td&gt;7,442&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-gdrive&lt;/td&gt;
&lt;td&gt;6,049&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-gitlab&lt;/td&gt;
&lt;td&gt;5,398&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-redis&lt;/td&gt;
&lt;td&gt;3,964&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-aws-kb-retrieval&lt;/td&gt;
&lt;td&gt;189&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;create-server&lt;/td&gt;
&lt;td&gt;173&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;server-everart&lt;/td&gt;
&lt;td&gt;134&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;620,838&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;npm download counts include CI runs and mirrors, so this is not 620,838 developers. It does show that the deprecation flag is not stopping anyone. &lt;code&gt;npx -y&lt;/code&gt; prints a warning and installs the package anyway, and an agent running that command in a terminal has no reason to stop on a warning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is wrong with them
&lt;/h2&gt;

&lt;p&gt;Glow reported four high-severity flaws across these servers. The worst is in &lt;code&gt;server-puppeteer&lt;/code&gt;: a prompt injection on a page the agent visits can make it start any process on the machine instead of the browser. The developer approved web browsing, and that one approval covers everything after it.&lt;/p&gt;

&lt;p&gt;The maintainers closed the report as out of scope because the servers live in the &lt;a href="https://github.com/modelcontextprotocol/servers-archived" rel="noopener noreferrer"&gt;archived repository&lt;/a&gt; and are unmaintained. There are no CVEs, so dependency scanners that work from CVE feeds will not flag them. Glow says it has not seen anyone exploit these flaws. We are not claiming otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find them in your configs
&lt;/h2&gt;

&lt;p&gt;This lists every deprecated reference server in the usual MCP config files for Claude Code, Cursor, VS Code, Codex CLI and Claude Desktop on a Mac. Run it in each repo root, since project configs live there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-HnoE&lt;/span&gt; &lt;span class="s1"&gt;'@modelcontextprotocol/(server-(github|gitlab|postgres|slack|puppeteer|brave-search|google-maps|gdrive|redis|aws-kb-retrieval|everart)|create-server)'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  .mcp.json .cursor/mcp.json .vscode/mcp.json &lt;span class="se"&gt;\&lt;/span&gt;
  ~/.claude.json ~/.cursor/mcp.json ~/.codex/config.toml &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Application Support/Claude/claude_desktop_config.json"&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No output means none of those files reference them. Some servers from the same repository are still maintained, such as &lt;code&gt;server-filesystem&lt;/code&gt; and &lt;code&gt;server-memory&lt;/code&gt;, which is why the pattern names packages one by one instead of matching the whole scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we would run instead
&lt;/h2&gt;

&lt;p&gt;Move to the server the service owner maintains, where one exists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/github/github-mcp-server" rel="noopener noreferrer"&gt;github/github-mcp-server&lt;/a&gt;, maintained by GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser automation:&lt;/strong&gt; &lt;a href="https://github.com/microsoft/playwright-mcp" rel="noopener noreferrer"&gt;microsoft/playwright-mcp&lt;/a&gt; (&lt;code&gt;@playwright/mcp&lt;/code&gt;), in place of the Puppeteer server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brave Search:&lt;/strong&gt; &lt;a href="https://github.com/brave/brave-search-mcp-server" rel="noopener noreferrer"&gt;brave/brave-search-mcp-server&lt;/a&gt; (&lt;code&gt;@brave/brave-search-mcp-server&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Slack, Postgres and the rest, check whether the vendor ships its own server before picking a community one, and read its tool list before you approve it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop the agent from adding them again
&lt;/h2&gt;

&lt;p&gt;Swapping today's configs is not enough if the agent adds the old package back next week. Two things we would set up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write the approved list down where the agent reads it.&lt;/strong&gt; One line in &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;AGENTS.md&lt;/code&gt;, such as "Use only these MCP servers: ...", changes what the agent proposes. It is a suggestion to the model, not a control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block the install itself.&lt;/strong&gt; A pre-tool hook (Claude Code supports &lt;code&gt;PreToolUse&lt;/code&gt; hooks on Bash) can reject any command that mentions one of these package names. That works whatever the model remembers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Glow's own advice adds a third: put npm deprecation status into whatever approves a new MCP server. A lookup before install helps, but Glow's researcher also notes it is not enough on its own, which is why we would still keep the hook.&lt;/p&gt;

&lt;p&gt;If you run a remote MCP server and want to see what a client sees before it connects, our free &lt;a href="https://x1y1.co/mcp-check" rel="noopener noreferrer"&gt;MCP Server Check&lt;/a&gt; looks at auth, OAuth discovery and tool descriptions from the outside without calling any tool.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://x1y1.co/journal/deprecated-mcp-servers-still-installed/" rel="noopener noreferrer"&gt;x1y1.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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