The Trojan Horse in Your Code Assistant

Picture this: You’ve just hired the world’s most efficient assistant. They’re brilliant, tireless, and have access to all your files. There’s just one tiny problem—they’re also incredibly gullible and will follow instructions from literally anyone who sounds convincing enough. Welcome to the brave new world of AI-powered development tools, where your helpful coding companion might just be one malicious GitHub issue away from becoming a corporate spy.

The cybersecurity researchers at Invariant Labs recently dropped a bombshell that should make every developer using GitHub’s Model Context Protocol (MCP) sit up and take notice. They’ve discovered that the very feature designed to make AI agents more helpful—their ability to access multiple repositories—could turn them into unwitting accomplices in data theft. And the kicker? There’s no obvious fix.

The Perfect Storm of Good Intentions

To understand why this vulnerability is so deliciously problematic, we need to appreciate the elegant simplicity of the attack. It’s not a bug in the traditional sense—no buffer overflows, no SQL injections, no obscure edge cases that require a PhD in computer science to understand. Instead, it’s what happens when we give powerful tools to entities that can’t distinguish between legitimate requests and social engineering.

The attack scenario reads like a heist movie written by someone who really understands modern software development. Here’s the plot: Developer Alice works on both public and private repositories. She’s given her AI assistant access to the private ones because, well, that’s the whole point of having an AI assistant. Meanwhile, Eve the attacker posts an innocent-looking issue in Alice’s public repository. Hidden within that issue? Instructions for the AI to leak information from the private repositories.

When Alice asks her AI to “check and fix issues in my public repo,” the AI dutifully reads Eve’s planted instructions and—like a well-meaning but hopelessly naive intern—follows them to the letter. It’s social engineering, but the target isn’t human. It’s an entity that treats all text as potentially valid instructions.

The Lethal Trifecta

Simon Willison, the open-source developer who’s been warning about prompt injection for years, calls this a “lethal trifecta”: access to private data, exposure to malicious instructions, and the ability to exfiltrate information. It’s like giving someone the keys to your house, introducing them to a con artist, and then being surprised when your valuables end up on eBay.

What makes this particularly insidious is that everything is working exactly as designed. The AI is doing what AIs do—processing text and following patterns. The MCP is doing what it’s supposed to do—giving the AI access to repositories. The only thing that’s “broken” is our assumption that we can control what instructions an AI will follow when we expose it to untrusted input.

The Confirmation Fatigue Trap

The MCP specification includes what seems like a reasonable safeguard: humans should approve all tool invocations. It’s the equivalent of requiring two keys to launch a nuclear missile—surely that will prevent disasters, right?

Wrong. Anyone who’s ever clicked “Accept All Cookies” without reading what they’re accepting knows how this story ends. When your AI assistant is making dozens or hundreds of tool calls in a typical work session, carefully reviewing each one becomes about as realistic as reading the full terms of service for every app you install.

This is confirmation fatigue in action, and it’s a UX designer’s nightmare. Make the approval process too stringent, and the tool becomes unusable. Make it too easy, and you might as well not have it at all. Most developers, faced with the choice between productivity and security, will choose productivity every time. They’ll switch to “always allow” mode faster than you can say “security best practices.”

The Architectural Ouroboros

What’s truly fascinating about this vulnerability is that it’s not really a vulnerability in the traditional sense—it’s an emergent property of the system’s architecture. It’s what happens when you combine several individually reasonable design decisions into a system that’s fundamentally unsafe.

The researchers at Invariant Labs aren’t wrong when they call this an architectural issue with no easy fix. You can’t patch your way out of this one. Every proposed solution either breaks functionality or just moves the problem around. Restrict AI agents to one repository per session? Congratulations, you’ve just made your AI assistant significantly less useful. Give them least-privilege access tokens? Great, now you need to manage a byzantine system of permissions that will inevitably be misconfigured.

Even Invariant Labs’ own product pitch—their Guardrails and MCP-scan tools—comes with the admission that these aren’t complete fixes. They’re bandaids on a wound that might need surgery.

The Prompt Injection Pandemic

This GitHub MCP issue is just the latest symptom of a broader disease afflicting AI systems: prompt injection. As Willison points out, the industry has known about this for over two and a half years, yet we’re no closer to a solution. It’s the SQL injection of the AI age, except worse because at least with SQL injection, we know how to use parameterized queries.

The fundamental problem is that large language models (LLMs) are designed to be helpful, and they can’t reliably distinguish between legitimate instructions and malicious ones embedded in data. They’re like eager employees who will follow any instruction that sounds authoritative, regardless of who it comes from or where they found it.

“LLMs will trust anything that can send them convincing sounding tokens,” Willison observes, and therein lies the rub. In a world where data and instructions are both just text, how do you teach a system to tell them apart?

The Windows of Opportunity

The timing of this revelation is particularly piquant given Microsoft’s announced plans to build MCP directly into Windows to create an “agentic OS.” If we can’t secure MCP in the relatively controlled environment of software development, what happens when it’s baked into the operating system that runs on billions of devices?

Imagine a future where your OS has an AI agent with access to all your files, all your applications, and all your data. Now imagine that agent can be tricked by a carefully crafted email, a malicious webpage, or even a poisoned document. It’s enough to make even the most optimistic technologist reach for the nearest abacus.

The Filter That Wasn’t

One proposed solution perfectly illustrates the contortions we’re going through to address this issue. Someone suggested adding a filter that only allows AI agents to see contributions from users with push access to a repository. It’s creative, I’ll give them that. It’s also like solving a mosquito problem by moving to Antarctica—technically effective, but at what cost?

This filter would block out the vast majority of legitimate contributions from the open-source community. Bug reports from users, feature requests from customers, security disclosures from researchers—all gone. It’s throwing out the baby, the bathwater, and possibly the entire bathroom.

The Human Element (Or Lack Thereof)

Perhaps the most troubling aspect of this whole situation is what it reveals about our relationship with AI tools. We’re building systems that require constant human oversight to be safe, then deploying them in contexts where constant human oversight is impossible.

It’s like designing a car that only stays on the road if the driver manually steers around every pothole, then marketing it to people with long commutes. The failure isn’t in the technology—it’s in our understanding of how humans actually use technology.

Looking Forward Through the Rear-View Mirror

As we stand at this crossroads of AI capability and AI vulnerability, we’re faced with uncomfortable questions. Do we slow down the adoption of AI tools until we figure out security? Do we accept a certain level of risk as the price of progress? Or do we fundamentally rethink how we design AI systems?

The GitHub MCP vulnerability isn’t just a technical problem—it’s a philosophical one. It forces us to confront the reality that our AI tools are only as smart as their dumbest moment, and that moment can be engineered by anyone with malicious intent and a basic understanding of how these systems work.

The Bottom Line

The prompt injection vulnerability in GitHub’s MCP is a wake-up call, but perhaps not the one we want to hear. It’s telling us that the AI revolution we’re so eager to embrace comes with risks we don’t fully understand and can’t easily mitigate.

As developers, we’re caught between the promise of AI-enhanced productivity and the peril of AI-enabled security breaches. The tools that make us more efficient might also make us more vulnerable. The assistants that help us write better code might also help attackers steal it.

In the end, the GitHub MCP vulnerability is less about a specific security flaw and more about a fundamental tension in how we’re building AI systems. We want them to be helpful, but helpful to whom? We want them to be smart, but smart enough to what end?

Until we figure out how to build AI systems that can reliably distinguish between legitimate instructions and malicious ones—or until we accept that maybe we can’t—we’re stuck in a world where our most powerful tools are also our weakest links. The Trojan Horse isn’t at the gates; it’s already in our IDEs, and we invited it in ourselves.

Perhaps the real lesson here is that in our rush to build the future, we shouldn’t forget the timeless wisdom of the past: Beware of geeks bearing gifts, especially when those gifts can read all your private repositories.

How Notion Tries to Be Everything Now (And That’s Becoming Problematic)

How Notion Tries to Be Everything Now (And That's Becoming Problematic)

Remember when Notion was just a sleek note-taking app with a powerful database feature? Those were simpler times. Today, Notion has transformed into what it calls the “ultimate all-in-one productivity platform,” and while that ambition sounds impressive on paper, it’s becoming increasingly problematic for the very users who made it popular.

The Feature Avalanche

In 2025 alone, Notion has rolled out an aggressive slate of new features: Notion Mail (currently in beta), offline mode, AI meeting notes, enterprise search across multiple tools, and potentially even Notion Drive. The platform now integrates with Microsoft Teams, SharePoint, OneDrive, Gmail, Linear, Slack, Google Drive, GitHub, and Jira, with more integrations on the horizon.

Just looking at recent updates makes my head spin. We’ve got conditional forms, interactive charts, tabbed layouts, passkeys, and Apple Calendar support. There’s Notion Sites for creating websites, AI that can analyze file attachments, and suggested edits for collaborative work. The list goes on and on.

When Everything Becomes Nothing

This relentless expansion embodies a classic case of feature creep – the gradual expansion of product scope through the continuous addition of new features, each seemingly essential but collectively dangerous. Notion is trying to replace email clients, cloud storage, website builders, project management tools, and communication platforms all at once. But in attempting to be everything for everyone, is it becoming nothing particularly excellent for anyone?

The evidence is mounting. Notion is often described as having a steep learning curve and being overwhelming for newcomers. Users report that dealing with a new project on Notion can be quite complex and challenging. It can be overwhelming to navigate through the platform’s features. Even productivity expert Thomas Frank acknowledges that Notion Sites lack many of the actual, website-specific tools you’ll find on other platforms and notes various limitations in the platform’s newer features.

The Performance Problem

All these features come at a cost. Performance issues are becoming more noticeable as Notion grows more complex. Too many properties can slow down database load times, and users have observed that linked databases, multiple third-party tools, and large image files can significantly impact loading speeds. Some users even report that the desktop app is a slower version of the website app.

The Paradox of Choice

Perhaps most troubling is what this expansion does to the user experience. When you start an account, it’s practically an empty canvas. And do you know what you get when you give minds that are naturally artistic and chaotic an empty canvas? Well…yes…you get art. But you also get confusion, and distraction, and very little of what you actually want to get done, done.

The very flexibility that once made Notion special has become its Achilles’ heel. It competes with pretty much every productivity app on the market. You will quickly get lost among all pages, boards, notifications, etc. It’s just too complicated for an average user and provides too much noise.

Jack of All Trades, Master of None

When I look at Notion’s recent trajectory, I see a platform that’s lost its focus. By examining its strategic acquisitions, such as Automate.io, Cron, Skiff, and Flowdash, it’s clear that Notion is systematically trying to absorb every productivity tool into its ecosystem. But each new feature adds complexity, creating a steeper learning curve for new users and more potential points of failure for existing ones.

Consider this: Users say that the calendar and other integrations can be improved. Other users would like to see more tutorials for less tech-savvy customers. Meanwhile, The number of people in the Notion subreddit who admit that they’ve spent more time customizing their Notion homepages than they have using them is staggering.

The Competition Knows Better

While Notion tries to do everything, its focused competitors are excelling at their specific niches. Obsidian remains laser-focused on note-taking with its powerful linking features. Linear keeps project management simple and efficient. Superhuman revolutionized email by doing one thing exceptionally well. These tools prove that sometimes, less really is more.

What Notion Should Do Instead

Notion needs to remember what made it special in the first place: the elegant combination of notes and databases. Instead of chasing every productivity trend, it should:

  1. Refocus on core competencies: Perfect the note-taking and database features that users actually love
  2. Improve performance: Address the growing performance issues before adding more features
  3. Simplify the onboarding: Make it easier for new users to get value quickly without overwhelming them
  4. Quality over quantity: Polish existing features instead of constantly adding new ones

The Bottom Line

I still use Notion, but increasingly, I find myself using it alongside other tools rather than as the all-in-one solution it promises to be. When a productivity tool becomes so complex that you need tutorials to use basic features, when users spend more time configuring than creating, and when performance suffers under the weight of features most people don’t need – that’s when you know the platform has lost its way.

Notion’s ambition to be everything for everyone is admirable, but it’s time to ask: at what cost? Sometimes, the best tool is the one that does a few things exceptionally well, not the one that tries to do everything adequately. As we move further into 2025, I hope Notion’s leadership realizes this before their once-elegant platform collapses under the weight of its own ambitions.

The views expressed in this opinion piece are those of the author and do not necessarily reflect the views of this publication.