Site icon Mailtrap

How to Vet an MCP Server: a Developer’s MCP Server Security Checklist 

Besides transforming what AI assistants can do, MCP servers have also been at the center of some very real documented incidents since the protocol took off. So, rather than expecting you to become an MCP server security expert overnight, I worked with our engineering and security team at Mailtrap to validate my own vetting process against their experience, industry best practices, and takeaways from real-world exploits. The result is the practical checklist I use before installing any MCP server, and the one I’ll walk you through in this guide.

How to vet an MCP server

It’s easy to assume that a popular GitHub repository or thousands of npm downloads are a good sign. In reality, neither tells you whether an MCP server is trustworthy or one update away from compromising your data. These are the checks I run for each MCP server.

Tip: If I don’t feel like manually working through the entire checklist each time, I’ll then use mcp-vet, an open-source scanner for local MCP configurations, to automate many of the repetitive checks for me. The scanner flags common issues like unverified publishers, exposed API tokens, and unpinned versions, and gives you an APPROVE, WARN, or BLOCK verdict. Of course, when it comes to anything important, I still verify it myself, but if I need to speed up the vetting process, this works like a charm.

Practices to follow post-installation 

Okay, so you’ve used my checklist, installed what seems to be a trustworthy MCP server, and now all that’s left to do is let the AI loose on your GitHub repos, docs, databases, emails, or whatever else you installed the MCP server for. Right? Well… not quite. Installing the server is only half the job. How you configure it, update it, and interact with it matters just as much as the vetting process itself. So below, I’ve compiled a list of MCP security practices I follow to keep the attack surface as small as possible after installation. 

MCP server security incidents that shaped my approach

I’m a big believer in learning from other people’s mistakes, especially when it comes to MCP server security. That’s exactly why I built my checklist around real security incidents, many of which I discovered through the UpGuard blog.

So, to put the checklist into context, let me take you through a few of the incidents and the specific checklist items and best practices they most relate to.

SmartLoader – Trojanized Oura Ring MCP clone (February 2026)

Attackers behind the SmartLoader campaign impersonated Oura’s official MCP integration by creating convincing GitHub accounts, cloning the legitimate repository, and distributing what appeared to be a normal MCP server. Rather than exploiting a vulnerability in the MCP protocol itself, they relied on users trusting what looked like an official project.

Once installed, the project deployed an infostealer capable of stealing browser credentials, SSH keys, cryptocurrency wallets, and other sensitive data. The malicious behavior wasn’t immediately obvious, making the fake repository difficult to distinguish from the legitimate one without verifying its publisher.

Related checklist item / best practice: Does the publisher match the vendor?

CVE-2025-6514 – mcp-remote OAuth RCE (July 2025)

A critical vulnerability in mcp-remote exposed users to remote code execution during the OAuth authentication flow. Tracked as CVE-2025-6514, the flaw allowed malicious MCP servers to abuse improperly validated redirect URLs and execute arbitrary shell commands on a user’s machine.

With more than 437,000 downloads at the time of disclosure, the vulnerability affected software that many developers had already integrated into their workflows. And rather than relying on fake packages or social engineering, the attack exploited a weakness in a trusted dependency.

Related checklist item / best practice: 

GitHub MCP – Private repository theft via prompt injection (May 2025)

A prompt injection attack against GitHub MCP demonstrated how an attacker could steal data from private GitHub repositories without compromising the server itself. By hiding malicious instructions inside a seemingly harmless GitHub issue, the attacker convinced an AI agent to retrieve private repository contents, resulting in data exfiltration.

The attack succeeded because the model interpreted untrusted content as legitimate instructions while it still had access to sensitive repositories. Luckily, the GitHub MCP server itself was never compromised.

Related checklist item / best practice: Treat all untrusted content as a potential prompt injection attack vector.

Supabase + Cursor – “The Lethal Trifecta” (July 2025)

A support ticket containing hidden instructions convinced Cursor to retrieve Supabase database credentials before exposing them in its own response. The proof of concept, known as the “lethal trifecta,” demonstrated how three conditions, access to sensitive data, untrusted user input, and an outbound communication channel, could combine to create a serious security risk.

The key takeaway wasn’t that Cursor or Supabase had been compromised – they hadn’t. Instead, the exercise showed how easily confidential information can leak when those three conditions exist in the same AI session.

Related checklist item / best practice: Treat all untrusted content as a potential prompt injection attack vector.

postmark-mcp – Impersonation backdoor (September 2025)

The fake npm package postmark-mcp impersonated Postmark’s official integration and behaved exactly as users expected for roughly 15 releases. Then, in a later update, it quietly introduced malicious code that BCC’d every email sent through the server to an attacker.

What made this attack particularly dangerous is that users weren’t compromised because they installed an obviously malicious package; they were compromised because they trusted software that had worked perfectly for months.

Related checklist item / best practice: 

Amazon Q (VS Code extension) – Destructive filesystem wipe (2025)

Hidden instructions inside a malicious pull request showed how Amazon Q could be manipulated into deleting local files and tearing down AWS resources. Rather than exploiting a vulnerability in the extension itself, the proof of concept relied on the agent’s ability to interpret untrusted content.

It highlighted the risks of allowing AI agents to perform high-impact operations without requiring human confirmation. Once the malicious instructions were interpreted as part of the task, the agent began executing destructive actions automatically.

Related checklist item / best practice: Require approval for destructive or high-impact actions.

Wrapping up

MCP servers have fundamentally changed what AI assistants are capable of, and I genuinely think they’re one of the most exciting developments in the AI ecosystem. But the more power we give these tools, the more deliberate we have to be about deciding which ones deserve our trust.

And no, I don’t expect every MCP server to be perfect, and I certainly don’t expect myself to catch every possible issue. What I do expect is for all of us to spend a few extra minutes understanding what we’re installing, who built it, what it can access, and how it’s maintained. 

That’s exactly what this MCP server security checklist helps me do, and hopefully it’ll help you build the same habit.

Exit mobile version