HNNewShowAskJobs
Built with Tanstack Start
MCP-Scanner – Scan MCP Servers for vulnerabilities(github.com)
166 points by hsanthan 2 days ago | 44 comments
  • tsoutha day ago

    I have seen a bunch of demos of this, often building on top of open standards like the SAFE-MCP MITRE ATT&CK analysis https://github.com/SAFE-MCP/safe-mcp

    In general, the only way to make sure MCPs are safe is to limit which connections are made in an enterprise setting

    • electric_muse18 hours ago |parent

      Agreed. Only provide the servers and tools needed for that job.

      It would be silly to provide every employee access to GitHub, regardless of whether they need it. It’s just distracting and unnecessary risk. Yet people are over-provisioning MCPs like you would install apps on a phone.

      Principle of least access applies here just as it does anywhere else.

  • spiritplumbera day ago

    Missed opportunity to call it TRON.

  • AbstractH2419 hours ago

    I love how we now have a class of AI tools that try to catch issues created by other AI tools.

  • Ryan07a day ago

    Nice to see a scanner for MCP servers. Curious about audit depth: config checks only or live exploit tests and what reporting formats it supports?

  • kgwxd10 hours ago

    Is this to scan your own MCP servers? Does using someone else's MCP server put you at risk?

    I didn't even know want an MCP server was until I noticed the annoying category in VSCode Extensions panel today. Only able to get rid of it by turning off a broad AI related flag in settings (fine by me, wish I knew it was there earlier). An hour later, I'm seeing this.

  • cyberax2 days ago

    The MCP landscape is a huge frothing septic tank. Go on, try to create a simple MCP server that is protected by a password and connect it to ChatGPT or Claude. Or even the one that uses your local SSO system for authentication.

    I tried and failed after about 3 days of dealing with AI-slop-generated nonsense that has _never_ been worked. The MCP spec was created probably by brainless AI agents, so it defines two authentication methods: no authentication whatsoever, and OAuth that requires bleeding-edge features (dynamic client registration) not implemented by Google or Microsoft.

    The easiest way for that right now is to ask users to download a random NodeJS package that runs locally on their machines with minimal confinement.

    • fasbiner2 days ago |parent

      Had an almost identical experience. Even if you don’t need anything with auth, no one has yet made an mcp that wasn’t ultimately worse or the same as a cli but with a lot more song and dance. Security is also a bit of a joke when half the time it’s installing docker and phoning home. I wanted to like mcp and vend out remote mcp but this spec is not ready.

      • morkalork2 days ago |parent

        I'm still confused as to how mcp is better that say a Fastapi endpoint and it's generated swagger docs?

        • mbreesea day ago |parent

          In the cases I’ve tried building/integrating they are the same thing…

          I think the only difference is the statefulness of the request. HTTP is stateless, but MCP has state? Is this right?

          I haven’t seen many use cases for how to use the state effectively, but I thought that was the main difference over a plain REST API.

          • eric-burela day ago |parent

            My understanding is that it can upgrade to an SSE connection so a persistent stream. Also for interprocess communication you usually prefer a persistent connection. All that to reduce communication overheads. The rationale also is that an AI agent may trigger more fine-grained calls than a normal program or a UI, as it needs to collect information to observe the situation and decide next move (lot more get requests than usual for instance).

            • jhugoa day ago |parent

              This seems like the solution getting ahead of the problem. A series of API requests over HTTP can easily use a persistent connection and will practically default to that with modern client and server implementations. A claim that a more complex approach is needed for efficiency should be accompanied by evidence that the simple approach was problematic.

              MCP can use SSE to support notifications (since the protocol embeds a lot of state, you need to be able to tell the client that the state has changed), elicitation (the MCP server asking the user to provide some additional information to complete a tool call) and will likely use it to support long-running tool calls.

              Many of these features have unfortunately been specified in the protocol before clear needs for them have been described in detail, and before other alternative approaches to solving the same problems were considered.

              • eric-burel16 hours ago |parent

                I can't agree more, downloading OpenAPI doc for an API and parse it is more than enough to implement the core of MCP. But sadly the buzzword completely took of and for instance all participants to my trainings will ask for MCP, systematically.

            • fasbinera day ago |parent

              Using SSE was far too inconvenient in theory despite that being how nearly all of the MCP that gained traction was working, so instead the spec was switched to being better in theory but very inconvenient in practice:

              https://blog.fka.dev/blog/2025-06-06-why-mcp-deprecated-sse-...

              There are a million "why don't you _just_ X?" hypothetical responses to all the real issues people have with streamable http as implemented in the spec, but you can't argue your way into a level of ecosystem support that doesn't exist. The exact same screwup with oAuth too, so we can see who is running the show and how they think.

              It's hard to tell if there is some material business plan Anthropic has with these changes or if the people in charge of defining the spec are just kind of out of touch, have non-technical bosses, and have managed to politically disincentivize other engineers from pointing out basic realities.

          • data-ottawa18 hours ago |parent

            I use it basically as a cache, I create local artifacts that are fast to filter/query and easily paginate on the client (which is to say in the MCP server).

        • dboreham18 hours ago |parent

          MCP doesn't serve any technical purpose. It exists for business reasons.

          • jonfw18 hours ago |parent

            MCP provides a convenient packaging for tools, and generally workflows, for LLM clients.

            You can debate all day whether bringing your own tools is a good thing vs giving the LLM a generic shell tool and an API doc and letting it run curls. I like tools because it brings reproducibility.

            MCP is really just a json RPC spec. json RPC can take place over a variety of transports and under a variety of auth mechanisms- MCP doesn't need to spec a transport or auth mechanism.

            I totally agree with everybody that most MCP clients are half assed and remote MCP is not well supported, but that's a business problem

            Every LLM tool today either runs locally (cursor, zed, IDEs, etc.) so can run MCP servers as local processses w/ no auth, or is run by an LLM provider where interoperability is not a business priority. So the remote MCP story has not been fleshed out

    • dorkypunk2 days ago |parent

      I'm still laughing on how the error handling for tools is done, it's just a boolean field IsError.

      https://modelcontextprotocol.io/specification/2025-06-18/ser...

      • embedding-shapea day ago |parent

        There is a difference between protocol error and tool usage error, makes sense you want the model to see the tool usage error, so they can correct.

        I'm guessing it has a the same shape as a normal message + IsError so on the handling side you don't really have to do anything special to handle it, just proceed as normal and send the results to the LLM so it can correct if needed.

    • bootsmann2 days ago |parent

      “Ok, how do we do customer auth” has become my go-to question to kill MCP projects. There is no working solution which makes any kind of enterprise exploration into the space pointless.

      • maxwellga day ago |parent

        The initial remote MCP specification was pretty painful, but the June spec and the upcoming November spec are much more workable - MCP auth is (mostly) just OAuth now. MCP Clients are OAuth clients and can be granted access tokens and managed just like any other 3rd party app integration.

        I'd love to hear more about the specific issues you're running into with the new version of the spec. (disclaimer - I work at an auth company! email in bio if you wanna chat)

        • cyberaxa day ago |parent

          Basically, I'm trying to just create a protected MCP server that works with ChatGPT. That's it. Nothing fancy.

          So far, I was not able to do it. And there are no examples that I can find. It's also all complicated by the total lack of logs from ChatGPT detailing the errors.

          I'll probably get there eventually and publish a blog...

          • brabela day ago |parent

            ChatGPT provides a new Apps SDK that makes things easier. The MCP server does need a proper Authorization Server to do OAuth, including DCR and OIDC metadata support, but those are the best way to do what they are trying to do. Anything else I have considered would be much worse security and discovery wise.

      • mbreesea day ago |parent

        Serious question, as I’m starting to go through this process myself -

        Is it possible for the customer to provide their own bearer tokens (generated however) that the LLM can pass along to the MCP server? This was the closest to a workable security I’ve looked at. I don’t know if that is all that well supported by Chat GUI/web clients (user supplied tokens), but should be possible when calling an LLM through an API style call, right (if you add additional pass thru headers)?

        • eric-burela day ago |parent

          The LLM doesn't intervene much actually, it just tells what tool to call. It's your MCP implementation that does the heavy lifting. So yeah you can always shove a key somewhere in your app context and pass it to the tool call. But I think the point of other comments is that the MCP protocol is kinda clueless about how to standardize that within the protocol itself.

          • arscana day ago |parent

            I think an important thing to note is the MCP client is a distinct thing from the ‘LLM’ architecturally, though many LLM providers also have MCP client implementations (via their chat ui or desktop / cli implementations).

            In general, I’d say it’s not a good idea to pass bearer tokens to the LLM provider and keep that to the MCP client. But your client has to be interoperable with the MCP server at the auth level, which is flakey at the moment across the ecosystem of generic MCP clients and servers as noted.

        • cyberaxa day ago |parent

          > but should be possible when calling an LLM through an API style call, right (if you add additional pass thru headers

          Nope. I assumed as much and even implemented the bearer token authentication in the MCP server that I wanted to expose.

          Then I tried to connect it to ChatGPT, and it turns out to NOT be supported at all. Your options are either no authentication whatsoever or OAuth with dynamic client registration. Claude at least allows the static OAuth registration (you supply client_id and client_secret).

    • tsoutha day ago |parent

      The MCP & DCR OAuth ecosystem was immature at the start, but has really evolved and become robust. E.g., WorkOS has some really robust OAuth that can act as a standalone proxy for MCP connecting to any existing auth infrastructure.

      Metadata and resource indicators are solving the rest of the problems that came with the change to OAuth spec.

    • jngiam1a day ago |parent

      It's really messy now. ChatGPT in particular makes it really hard; it turns out that Custom GPTs with actions can do pretty well, if you bridge MCP tools into actions; but setting any of these up is a pita.

      The LLMs are also really bad at generating correct code for OAuth logic - there are too many conditions there, and the DCR dance is fairly complicated to get right.

      Shameless plug: we're building a MCP gateway that takes in any MCP server and we do the heavy lifting to make it compatible with any client on the other end (Claude, ChatGPT - even with custom actions); as a nice bonus it gives you SSO/logs as well. https://mintmcp.com if you're interested.

      • oezia day ago |parent

        Why just a gateway? Why not a serverless way to host tools?

        • jngiam1a day ago |parent

          +1 many tools can be run stateless / have state in a external db, and we have ways to support running that efficiently as well.

      • cyberaxa day ago |parent

        It looks great, but it's yet another service. I believe that the infrastructure must be as simple as possible.

        Have you considered adding a stand-alone service? Perhaps using the AGPL+commercial license.

        • jngiam115 hours ago |parent

          We do have self-hosted options, and are still thinking through OSS strategies. If you've suggestions on that angle, would love to learn / read more.

    • zingababba2 days ago |parent

      Lol yeah, lots going on that will hopefully make it better though.

      https://github.com/modelcontextprotocol/modelcontextprotocol... https://github.com/modelcontextprotocol/modelcontextprotocol... https://github.com/modelcontextprotocol/modelcontextprotocol... https://aaronparecki.com/2025/05/12/27/enterprise-ready-mcp https://github.com/modelcontextprotocol/modelcontextprotocol... https://www.okta.com/newsroom/press-releases/okta-introduces... https://github.com/modelcontextprotocol/ext-auth/blob/main/s... https://github.com/modelcontextprotocol/modelcontextprotocol... https://github.com/modelcontextprotocol/modelcontextprotocol... https://github.com/modelcontextprotocol/modelcontextprotocol...

    • oezia day ago |parent

      So where can we host simple single file MCP tools with the ease of a lambda?

      • whattheheckhecka day ago |parent

        Aws has agentcore

    • throwaway3141552 days ago |parent

      MCP works best for tool calling that doesn't require auth (so tools that are trusted on your own machine). The whole pitch that you should be using it for business facing tools and things that require auth is a terrible idea.

      Even if you're doing local only - MCP tools can mostly be covered by simply asking Claude Code (or whatever) to use the bash equivalent.

      • cyberax2 days ago |parent

        > MCP works best for tool calling that doesn't require auth (so tools that are trusted on your own machine).

        In other words, downloading random crap that runs unconfined and requires a shitty app like Claude Desktop.

        BTW, Claude Desktop is ALSO an example of AI slop. It barely works, constantly just closing chats, taking 10 seconds to switch between conversations, etc.

        In my case, I wanted to connect our CRM with ChatGPT and ask it to organize our customer notes. And also make this available as a service to users, so they won't have to be AI experts with subscriptions to Claude.

  • rdeggesa day ago

    At Snyk, we've been working on this for a while. Here's our flagship open source project consolidating a lot of the MCP risk factors we've discovered over the last year or so into actionable info: https://github.com/invariantlabs-ai/mcp-scan

    • spiritplumbera day ago |parent

      Missed opportunity to call it TRON.

                ALAN
                          It's called Tron. It's a security
                          program itself, actually. Monitors
                          all the contacts between our system
                          and other systems... If it finds
                          anything going on that's not scheduled,
                          it shuts it down. I sent you a memo
                          on it.
      
      
                                     DILLINGER
                          Mmm. Part of the Master Control Program?
      
      
                                     ALAN
                          No, it'll run independently.
                          It can watchdog the MCP as well.
      
      
                                     DILLINGER
                          Ah. Sounds good. Well, we should have
                          you running again in a couple of days,
                          I hope.
    • embedding-shapea day ago |parent

      Would you want to share how/why it's different from the submission, since you're making a comment here?

      • rdeggesa day ago |parent

        I believe one of the main differences is that our scanner looks for toxic flows between mcp endpoints regarding how they interact with one another. Unless I'm missing something, the Cisco tool does not support this.

        Our research lab discovered this novel threat back in July: https://invariantlabs.ai/blog/toxic-flow-analysis and built the tooling around it. This is an extremely common type of issue that many people don't realize (basically, when you are using multiple MCP servers that individually are safe, but together can cause issues).

  • lumaa day ago

    Was trying to remember where I had heard this org's name: https://news.ycombinator.com/item?id=42690473

    This org has gone to some dubious lengths to make a name for themselves, including submitting backdoored packages to public npm repos which would exfiltrate your data and send to a Synk-controlled C&C. This included the environment, which would be sending them your username along with any envvars like git/aws/etc auth tokens.

    This might give them some credibility in this space, maybe they stand a decent chance of scanning MCPs for backdoors based on their own experience in placing malicious code on other people's systems.

    • raesene9a day ago |parent

      Was this comment meant to be in reply to https://news.ycombinator.com/item?id=45726223 ?