<?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: Miles Wong</title>
    <description>The latest articles on DEV Community by Miles Wong (@codaone).</description>
    <link>https://dev.to/codaone</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%2F3828242%2Fa12f0f87-7227-4ed5-89da-1a381fca50e9.png</url>
      <title>DEV Community: Miles Wong</title>
      <link>https://dev.to/codaone</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codaone"/>
    <language>en</language>
    <item>
      <title>MCP Server Security: What Most Directories Don't Tell You</title>
      <dc:creator>Miles Wong</dc:creator>
      <pubDate>Tue, 17 Mar 2026 10:44:12 +0000</pubDate>
      <link>https://dev.to/codaone/mcp-server-security-what-most-directories-dont-tell-you-5aaa</link>
      <guid>https://dev.to/codaone/mcp-server-security-what-most-directories-dont-tell-you-5aaa</guid>
      <description>&lt;p&gt;When you install an MCP server, you're not just adding a feature to your AI assistant. You're handing a piece of software near-unrestricted access to your machine — your files, your credentials, your network connections, sometimes the ability to execute arbitrary code. Most people do this by copying a config snippet from a README without a second thought. That's a problem.&lt;/p&gt;

&lt;p&gt;The MCP ecosystem is moving fast, and the infrastructure for evaluating security hasn't kept up. This article is for developers who want to actually understand what they're installing before they install it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What MCP Servers Can Actually Do
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol is powerful precisely because of how much access it grants. An MCP server can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read and write files anywhere your user has filesystem permissions&lt;/li&gt;
&lt;li&gt;Make arbitrary network requests&lt;/li&gt;
&lt;li&gt;Execute shell commands&lt;/li&gt;
&lt;li&gt;Access environment variables (which is where API keys, database credentials, and tokens live)&lt;/li&gt;
&lt;li&gt;Persist data locally and transmit it elsewhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is a bug. It's the feature. MCP servers need this access to be useful — a filesystem MCP server needs to read your files, a database MCP server needs your connection credentials. But "needs this access" and "can be trusted with this access" are two different questions, and most users conflate them.&lt;/p&gt;

&lt;p&gt;The threat model isn't primarily "the developer is malicious" (though that does happen). It's more mundane: abandoned repositories with unpatched dependencies, credentials inadvertently logged, overly broad permission scopes that expose more than intended, and supply chain attacks through transitive dependencies.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Can Go Wrong
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data exfiltration&lt;/strong&gt; is the obvious one. An MCP server that has file system access and makes outbound HTTP calls can, technically, read your private files and send them somewhere. This doesn't require the original developer to be adversarial — a supply chain compromise in a dependency can introduce this after the fact, and if the repository isn't actively maintained, nobody's reviewing the packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential theft&lt;/strong&gt; is more targeted. If an MCP server reads your environment variables (legitimately, to find an API key it needs), a compromised version of that server can harvest every other key in your environment at the same time. AWS keys, OpenAI API keys, GitHub tokens — all of it is there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abandoned servers&lt;/strong&gt; are the risk most people ignore entirely. The MCP ecosystem has hundreds of community-built servers, many of which were written quickly, published, and then not touched again. An unmaintained server running on your machine means unpatched CVEs in its dependencies, no response if you report a vulnerability, and no guarantee that future versions of its dependencies don't introduce breaking security issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supply chain attacks&lt;/strong&gt; are the hardest to defend against. Your MCP server might be written by a developer you trust. But that server has dependencies, and those dependencies have dependencies. One compromised package three levels deep can give an attacker whatever access your server has.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Most Directories Currently Offer
&lt;/h2&gt;

&lt;p&gt;Not much. Smithery, Glama, and most other MCP directories aggregate community submissions. They're useful for discovering servers, but they list with no security auditing. There's no indication of whether a server has been reviewed for overly broad permissions, whether its dependencies have known CVEs, or when it was last updated. Some directories surface star counts and GitHub metadata, which is marginally useful, but a server with 1,200 stars can still be running a dependency with a published CVE from eight months ago.&lt;/p&gt;

&lt;p&gt;This isn't a criticism of directory maintainers specifically — auditing every server in a fast-moving ecosystem is a significant undertaking. It's just the current reality, and developers should know it going in.&lt;/p&gt;




&lt;h2&gt;
  
  
  What a Proper Security Audit Looks Like
&lt;/h2&gt;

&lt;p&gt;If you're evaluating an MCP server seriously, here's what that should actually cover:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency scanning.&lt;/strong&gt; Run the dependency tree through a tool like &lt;code&gt;npm audit&lt;/code&gt;, &lt;code&gt;pip-audit&lt;/code&gt;, or &lt;code&gt;osv-scanner&lt;/code&gt; and look for known vulnerabilities. Pay attention to severity — a critical CVE in a package that handles network requests is more concerning than a low-severity issue in a dev dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication review.&lt;/strong&gt; How does the server handle credentials? Does it require them to be passed as environment variables (acceptable), does it read from a config file (check what permissions that file has), or does it accept them inline in ways that might get logged (bad)?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permission scope analysis.&lt;/strong&gt; Does the server request access to everything, or does it scope its permissions to what it actually needs? A markdown-rendering MCP server probably doesn't need filesystem write access. If it asks for it anyway, that's a red flag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance status check.&lt;/strong&gt; When was the last commit? When were dependencies last updated? Are there open security issues that haven't been addressed? A repository with the last commit two years ago and ten open issues mentioning potential vulnerabilities is not the same as an actively maintained one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Known CVE scanning.&lt;/strong&gt; Check NVD and OSV for any CVEs that reference the package or its direct dependencies. This takes five minutes and can save you significant headaches.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three-Tier Rating Approach
&lt;/h2&gt;

&lt;p&gt;One framework that makes sense is a three-tier classification: Verified, Caution, and Untested. &lt;a href="https://www.codaone.ai/mcp/security" rel="noopener noreferrer"&gt;Coda One's MCP security methodology&lt;/a&gt; uses an 8-point audit checklist to assign these ratings across the &lt;a href="https://www.codaone.ai/mcp" rel="noopener noreferrer"&gt;MCP servers it reviews&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The logic is straightforward: Verified means the server passed all checks — clean dependencies, appropriate permission scope, active maintenance, no known CVEs. Caution means it passed with caveats that don't necessarily disqualify it but warrant knowing about — maybe it's well-written but hasn't been updated in six months, or it requests slightly broader permissions than strictly necessary. Untested means it hasn't been reviewed yet.&lt;/p&gt;

&lt;p&gt;"Untested" is the honest answer for most of the ecosystem. It's not a cop-out — it's accurate. The alternative is false confidence, and false confidence in this context is dangerous. If a directory tells you every server it lists is "safe" without explaining what that assessment is based on, that's a marketing claim, not a security guarantee.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Should Check Before Installing Anything
&lt;/h2&gt;

&lt;p&gt;Star count tells you about popularity, not security. Here's what actually matters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Look at open issues and PRs.&lt;/strong&gt; Are there open security reports? Has the maintainer responded to them? An unacknowledged security issue report from three months ago is a meaningful signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check the dependency list.&lt;/strong&gt; For Node-based servers, look at &lt;code&gt;package.json&lt;/code&gt;. For Python, look at &lt;code&gt;requirements.txt&lt;/code&gt; or &lt;code&gt;pyproject.toml&lt;/code&gt;. Run an audit against it. This takes two minutes and is the single highest-return action you can take.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review what environment variables it reads.&lt;/strong&gt; The README usually documents this. If it reads &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt; but you can't explain why a Notion integration needs AWS credentials, ask that question before installing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check the last commit date and release cadence.&lt;/strong&gt; Not because old code is automatically bad, but because a server with dependencies it hasn't updated in 18 months almost certainly has known vulnerabilities by now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Look at what permissions the server actually requests.&lt;/strong&gt; The MCP spec gives servers the ability to declare their capabilities. If a server declares filesystem write access for functionality that doesn't obviously require it, that's worth understanding before proceeding.&lt;/p&gt;

&lt;p&gt;The MCP ecosystem is one of the more interesting developments in how we use AI tooling. It's also, right now, a place where the security culture hasn't fully caught up to the adoption curve. That gap will close — but it probably won't close before you need to make decisions. Don't outsource those decisions to a star rating.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>mcp</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>MCP Servers Explained: What They Are, Why They Matter, and Where to Find Them</title>
      <dc:creator>Miles Wong</dc:creator>
      <pubDate>Tue, 17 Mar 2026 10:09:48 +0000</pubDate>
      <link>https://dev.to/codaone/mcp-servers-explained-what-they-are-why-they-matter-and-where-to-find-them-2b5a</link>
      <guid>https://dev.to/codaone/mcp-servers-explained-what-they-are-why-they-matter-and-where-to-find-them-2b5a</guid>
      <description>&lt;p&gt;If you've been building with AI tools over the past year, you've probably run into the term "MCP" somewhere — a GitHub README, a Claude docs page, a developer forum thread. It's being talked about a lot, but the explanations tend to be either too abstract ("it's a protocol for AI-tool integration") or too deep in the weeds for anyone who just wants to understand what it actually does.&lt;/p&gt;

&lt;p&gt;Here's a practical explanation, plus an honest look at the current state of the ecosystem.&lt;/p&gt;




&lt;h2&gt;
  
  
  What MCP Actually Is
&lt;/h2&gt;

&lt;p&gt;MCP stands for Model Context Protocol. Anthropic open-sourced it in late 2024 as a standard way for AI models to connect to external tools, data sources, and services.&lt;/p&gt;

&lt;p&gt;The simplest mental model: think of MCP as a USB standard for AI. Before USB, every device manufacturer used their own connector. After USB, a single standard meant any device could plug into any computer. MCP is trying to do the same thing for AI — create a single standard so any AI model can connect to any tool without each integration being custom-built.&lt;/p&gt;

&lt;p&gt;Concretely, an MCP server is a small program that wraps an external capability and exposes it to an AI model in a standardized way. Want your AI assistant to query a database? There's an MCP server for that. Read files from your filesystem? MCP server. Hit a specific API, control a browser, run code, search the web, pull from a Google Sheet? All of these exist as MCP servers.&lt;/p&gt;

&lt;p&gt;Before MCP, getting an AI model to do any of this required custom integration work specific to each model and each tool. The same integration built for Claude wouldn't work for GPT-4 without rewriting it. MCP changes that by creating a shared interface both sides can speak.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters for AI Agents
&lt;/h2&gt;

&lt;p&gt;The reason MCP is getting so much attention right now isn't the protocol itself — it's what the protocol enables.&lt;/p&gt;

&lt;p&gt;AI agents — systems where the model takes a sequence of actions toward a goal rather than just answering a single question — are only as useful as the things they can actually do. An agent that can reason beautifully but can't touch any external system is just an expensive chatbot.&lt;/p&gt;

&lt;p&gt;MCP is what gives agents real-world reach. An agent with the right MCP servers can read your calendar, pull relevant emails, search the web for current information, write to a spreadsheet, run a code snippet, and post a result — all as part of executing a single instruction you gave it. Without MCP (or something like it), every one of those steps requires a separate custom integration.&lt;/p&gt;

&lt;p&gt;The other thing MCP does well is make agent capabilities composable. You can mix and match servers. An agent that needs to search the web and write to a database doesn't need a custom "web-search-plus-database" integration. It just uses two separate MCP servers together. That's a fundamentally better architecture for building complex AI workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Current State of the Ecosystem
&lt;/h2&gt;

&lt;p&gt;The real picture is less exciting than the hype version.&lt;/p&gt;

&lt;p&gt;The MCP ecosystem has exploded in size. There are thousands of MCP servers available now — for every major SaaS product, database, API, and developer tool you can think of. The velocity has been impressive. The quality, less so.&lt;/p&gt;

&lt;p&gt;Most MCP servers are built by individual developers and posted to GitHub. The code works until it doesn't. Maintenance is inconsistent. A server that worked perfectly six months ago might be broken today because the underlying API changed and the maintainer didn't update it. There's no central registry with any kind of quality control.&lt;/p&gt;

&lt;p&gt;More seriously: security. An MCP server has access to whatever capabilities it wraps, and it runs locally on your machine or your server. A malicious or poorly written MCP server could theoretically expose sensitive data, make unauthorized requests, or act as a vector for supply chain attacks. Most servers aren't audited. Most people installing them aren't reading the source code.&lt;/p&gt;

&lt;p&gt;This isn't a theoretical risk. It's the kind of thing that will cause real incidents as MCP adoption scales, and it's not being talked about enough relative to the enthusiasm for the protocol itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to Find MCP Servers (and What to Watch For)
&lt;/h2&gt;

&lt;p&gt;There are three places worth knowing about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic's official MCP repository&lt;/strong&gt; is the starting point. It's on GitHub and contains both official servers maintained by Anthropic and a curated list of community servers. The curation is light — presence on the list doesn't imply a security review — but it's at minimum a filter for relevance. Start here if you want to understand what's possible before going broader.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smithery&lt;/strong&gt; (smithery.ai) is the most developer-focused MCP discovery platform right now. It has a clean interface, good search, and lets you see install counts and community feedback. If you're a developer looking for a specific integration, Smithery's search is probably the fastest way to find it. The quality filtering is community-driven rather than editorial, so do your own diligence before deploying anything in a production context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://codaone.ai/mcp" rel="noopener noreferrer"&gt;Coda One's MCP directory&lt;/a&gt;&lt;/strong&gt; takes a different approach — 2,807 servers cataloged with security context included. Rather than just listing what's available, it flags known security concerns and surfaces relevant context about each server's maintenance status and risk profile. If the &lt;a href="https://codaone.ai/mcp/security" rel="noopener noreferrer"&gt;security angle&lt;/a&gt; matters to you — and it should — that additional layer is worth the extra click. It's not a replacement for your own due diligence, but it's a better starting point than a raw GitHub list.&lt;/p&gt;




&lt;h2&gt;
  
  
  Practical Advice for Getting Started
&lt;/h2&gt;

&lt;p&gt;If you're new to MCP and want to start using it, Claude Desktop is the lowest-friction entry point. Anthropic has built MCP support directly into the desktop app, which means you can install a server and have it available to Claude without writing any integration code. The setup docs are reasonably good, and the filesystem and web search servers are solid beginner options.&lt;/p&gt;

&lt;p&gt;A few things worth keeping in mind before you install your first server:&lt;/p&gt;

&lt;p&gt;Read the source code, or at minimum check who maintains it and when it was last updated. An unmaintained server from 2024 that claims to connect to an API that's changed twice since then is a liability, not a feature.&lt;/p&gt;

&lt;p&gt;Be cautious with servers that request broad permissions — filesystem access, network access, credential handling — without a clear reason why they need it. Principle of least privilege applies here as much as anywhere.&lt;/p&gt;

&lt;p&gt;Test in a sandboxed environment first. Don't give a new MCP server access to your production database on day one.&lt;/p&gt;

&lt;p&gt;The protocol itself is solid. The ecosystem around it is maturing fast but hasn't matured yet. The developers who thrive with MCP in the next 12 months will be the ones who treat server selection like dependency management — deliberate, not opportunistic.&lt;/p&gt;




&lt;p&gt;MCP is one of the more important infrastructure developments in the AI agent space. It's not glamorous in the way that a new model release is glamorous, but plumbing rarely is. Get familiar with it now. The teams building on top of it have a meaningful head start.&lt;/p&gt;

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