The Creators of Model Context Protocol

Latent Space: The AI Engineer Podcast
3 April 2025 1h 19m
0:00 --:--
Episode Description
We are happy to announce that there will be a dedicated MCP track at the 2025 AI Engineer World's Fair, taking place Jun 3rd to 5th in San Francisco, where the MCP core team and major contributors and builders will be meeting. Join us and apply to speak or sponsor!When we first wrote Why MCP Won, we had no idea how quickly it was about to win.In the past 4 weeks, OpenAI and now Google have now announced the MCP support, effectively confirming our prediction that MCP was the presumptive winner of

Summary

This episode features Justin Spar Summers and David Souria Parra, co-creators of the Model Context Protocol (MCP) at Anthropic, discussing its origin, design, and future. They explain MCP as a universal connector for AI applications, akin to USB-C, emphasizing its presentation-focused primitives (tools, resources, prompts) and its role in solving the M-times-N problem for AI integrations. The discussion also covers the differences between MCP and OpenAPI, the ease of building MCP servers, and future directions including stateful servers and community governance.

Chapters

Welcome to MCP's CreatorsThe hosts introduce Justin Spar Summers and David Souria Parra, co-creators of the Model Context Protocol (MCP), highlighting its rapid adoption and the upcoming AI Engineer World's Fair track.
Defining the Model Context ProtocolJustin and David provide a crisp definition of MCP as a protocol designed to extend and enhance AI applications, distinguishing it from models themselves and likening it to a universal USB-C connector.
The Genesis of MCPThe co-creators share the origin story of MCP, explaining how it emerged from their personal frustrations with internal developer tooling at Anthropic and the need for a protocol to solve the M-times-N integration problem.
LSP's Influence on MCP DesignJustin and David detail how MCP drew heavy inspiration from the Language Server Protocol (LSP), adopting JSON RPC and bidirectionality, while focusing on presentation-driven primitives for AI applications.
Understanding MCP's Primitives: Tools, Resources, PromptsThe discussion delves into the core MCP primitives—tools (model-initiated), resources (application-controlled data), and prompts (user-initiated text)—explaining their distinct roles and importance for varied AI application experiences.
MCP vs. OpenAPI: Complementary StandardsThe creators clarify the relationship between MCP and OpenAPI, asserting that MCP's higher-level, AI-specific, and stateful design complements OpenAPI's granular REST API specifications.
Strategies for Building MCP ServersJustin and David offer practical advice for developers on building MCP servers, encouraging simple starts, leveraging AI for code, and exploring both API wrappers and novel AI-driven functionalities.
Composability and the Agent QuestionThe conversation explores MCP's support for composability through recursive server-client interactions and its potential to facilitate agent development, while emphasizing the need to avoid over-designing the protocol.
Managing Tool Scale and User ControlThe discussion addresses the practical challenges of managing numerous tools and resources, the role of model capabilities, and the importance of client applications in filtering and presenting information to the user.
Ecosystem Evolution and Trust in MCPThe creators discuss the future of the MCP ecosystem, predicting a convergence of widely used servers, the emergence of company-driven canonical implementations, and the ongoing challenge of establishing trust and vetting.
Specialized MCP Servers: Memory, File System, Sequential ThinkingThe segment highlights unique MCP servers like memory, file system, and sequential thinking, which extend model capabilities beyond simple API integration by providing internal thought processes or local interaction.
Future of MCP: Stateless Transport and AuthorizationJustin and David outline the roadmap for MCP, focusing on the new streamable HTTP transport for improved scalability and resilience, and the implementation of OAuth 2.1 for robust authorization.
Open Source Governance and Community InvolvementThe discussion covers the challenges of open source governance, emphasizing merit-driven contributions, balancing community input with project vision, and the potential for future foundation-level stewardship.
MCP Wishlist: Clients and ServersThe co-creators share their personal desires for future MCP developments, specifically requesting more sampling clients and servers for rich, model-independent workflows like summarizing online content.

Topics

Model Context Protocol (MCP)AI agentsOpen standardsDeveloper toolingProtocol designLanguage Server Protocol (LSP)JSON RPCAI application extensionsTool callingResources in AIPrompts in AIOpenAPI specificationStateful vs. stateless protocolsAPI wrappersAI-generated codeAgentic systemsComposability in AIModel reliabilityEcosystem developmentSupply chain securityOpen source governanceOAuth 2.1Sampling clients

People

Speaker 1 (host) Justin Spar Summers (guest) David Souria Parra (guest) Alessio (host) SWIX (host) Mahesh (mentioned) Eric (mentioned) Jared Palmer (mentioned) Alex Rodell (mentioned) Dhrmesh Shah (mentioned) David Hershey (mentioned)
Key Concepts (16)
Model Context Protocol (MCP) — An open standard designed to help AI applications extend themselves or integrate with an ecosystem of plugins, acting as a universal connector for AI application functionality.
Client-Server Terminology (MCP) — MCP uses client-server terminology, where clients are AI applications (like IDEs or chat interfaces) and servers provide extensions (tools, resources, prompts) to these applications.
USB-C Port of AI Applications — An analogy for MCP, highlighting its role as a universal, two-way connector for a whole ecosystem of AI-related functionalities and integrations.
M-times-N Problem — The challenge of building integrations between multiple applications and multiple services, which MCP aims to solve by providing a single protocol.
Presentation-Focused Design (MCP) — A design principle for MCP, inspired by LSP, where primitives are offered not just for semantic differences but because they are intended to manifest and be presented differently in the application UI.
Tools (MCP Primitive) — Functionalities meant to be initiated by the model, allowing the LLM to find and apply them at its discretion, similar to function calling.
Resources (MCP Primitive) — Bits of data or context that can be added to the model's context, which can be application-controlled (e.g., user picking from a menu) or agentically looked up by the AI application.
Prompts (MCP Primitive) — User-initiated or user-substituted text/messages, analogous to slash commands or autocompletion in an editor, designed for explicit user interaction.
Multistep Prompting — The idea that prompts are not just single conversations but can involve chains of interactions to guide the model to a desired behavior or outcome.
Stateful Protocol Design — MCP's deliberate design choice to be somewhat stateful, based on the belief that AI applications and interactions will become inherently more stateful, especially with multimodal interactions.
Recursive MCP Servers — The concept where an MCP server can also act as an MCP client, allowing for chains or DAGs of servers to interact richly and create more complex, composable AI systems.
Sequential Thinking MCP Server — A special MCP server that provides a model with the ability to think step-by-step and improve its reasoning capabilities, not by integrating external APIs but by guiding the model's internal process.
Memory MCP Server — A special MCP server that gives the LLM the ability to remember things across conversations, providing a simple, open-source implementation of memory for AI applications.
File System MCP Server — A special MCP server that allows an LLM to interact with the local machine's file system, including editing files, enabling AI to perform direct actions on codebases or other local data.
Streamable HTTP Transport — A new transport layer for MCP designed to balance the importance of statefulness with simpler operation and maintenance, allowing for gradual enhancement from plain HTTP to streaming and resumable sessions.
OAuth 2.1 for MCP Authorization — The current specification for user-to-server authorization in MCP, focusing on a subset of modern OAuth to handle security for remote servers without requiring direct API keys.
References (40)
NYC Summit
Model Context Protocol (MCP) project
Anthropic company
Cursor tool
Windsurf tool
OpenAI company
Google DeepMind company
AI Engineer World's Fair
ai.engineer
Latent Space podcast
Decibel company
Small AI company
Cloud Desktop tool
IDE tool
LSP (Language Server Protocol) protocol
Zed editor tool
Sentry company
GraphQL protocol
Temporal company
React framework
Uber company
ChatGPT tool
Claude model
GitHub company
Human Loop company
Google Maps tool
REST API protocol
Reddit API API
Pydantic library
Block company
Microsoft company
JetBench company
Spring AI project
Cloudflow workers product
NPM registry
PyPI registry
Apple company
Godot engine game engine
Blender tool
Pokemon game
Transcript (97 segments)
Speaker 1

Welcome back. MCP MCP MCP After the NYC Summit, we wrote a popular piece explaining why we think the Model Context Protocol from Anthropic seems to have won the agent open standard wars of 2023 to 2025. It seems everyone is now jumping on the MCP bandwagon from Cursor and Windsurf to OpenAI to Google DeepMind.

Our AI engineer community is hungry for more, so we are doing two things to explore the MCP phenomenon. First, today's guests, Justin Spar Summers and David Souria Parra, are the cocreators of the model context protocol who were kind enough to do their first ever podcast with us about the origin, challenges, and future of MCP, and gamely indulged all the questions that we asked from the latent space community. Second, SWIX has announced that there will be a dedicated MCP track at the twenty twenty five AI Engineer World's Fair, taking place June in San Francisco, where the MCP core team and major contributors and builders will be meeting.

Join us and apply to speak or sponsor at ai.engineer. Watch out and take care.

Speaker 2

Hey, everyone. Welcome back to Latent Space. This is Alessio, partner and CTO at Decibel, and I'm joined by my co hostess Wix, founder of Small AI.

Hey, morning. And today we have a remote recording, I guess, with David and Justin from Anthropic over in London. Welcome.

Speaker 4

Hey. Glad to be here. Welcome.

Speaker 3

You guys have created a storm of hype because of MCP, and I'm really glad to have you on. Thanks for making the time. What is MCP?

Let's start with, like, a crisp what definition that for you know, from from the horse's mouth, and then we'll go into the origin story. But let's let's start off right off the bat. What is MCP?

Yeah. Sure.

Speaker 4

applications extend themselves or, like, integrate with, you know, an ecosystem of of plugins, basically. The terminology is a bit different. We use this client server terminology, and we can talk about why that is and where that came from.

But at the end of the day, it really is that.

Speaker 5

functionality of AI application. David, would you add anything? Yeah, I think- I think that's actually a good description.

I think there's like a lot of different ways for how people are trying to explain it, but at the core, I think what Justin said is like extending AI applications is really what this is about. And I think the interesting bit here that I wanna highlight, it's it's AI applications and not models themselves that that this is focused on. That's a common misconception that we can talk about a bit later.

Speaker 4

But yeah. Another version that we've used and gotten to like is, like, MCP is kinda like the USB c port of AI applications, and that it's meant to be this universal connector to a whole ecosystem of things.

Speaker 3

Yeah. Specifically, an interesting feature is, you know, like you said, the client and server, and it's all sort of two way. Right?

Like, in the same way that said a two USB C is two way, which could be super interesting. Yeah. Let's let's go into the a little bit of the origin story.

There's many people who've tried to make standards around agents. Many people try to build open source. I think there's an overall also, my sense is that Anthropic is going hard after developers in a way that other labs are not.

And so I'm also curious if there was any external influence, or was it just you two guys just in a room somewhere riffing? It is actually mostly like us two guys in a room riffing. So this is not part of a big strategy.

Speaker 5

You know, if you roll back time a little bit and go into like July 2024, I was like started at Anthropic, like three months earlier or two months earlier, and I was mostly working on internal developer tooling, which is what I've been doing for like years and years before. And as part of that, I think there, there was an effort of like, how do I empower more like employees at Anthropic to use, you know, to integrate really deeply with the models we have because we're seeing these like how how good it is, how how amazing it will become even in the future. And of course, know, just dog food your own model as much as you can.

And as part of that, from my development tooling background, I quickly got frustrated by the idea that, you know, on one hand side I have Cloud Desktop, which is this amazing tool with artifacts, which I really enjoyed, but it was very limited to exactly that feature set. And it was, there was no way to extend it. And on the other hand side, I like work in IDEs, which could greatly like act on like the file system and a bunch of other things, but then they don't have artifacts or something like that.

And so what I constantly did was just copying things back and forth, between cloud desktop and the IDE. And that quickly got me honestly just very frustrated. And part of that frustration wasn't like, how do I go and fix this?

What, what do we need? And back to like this development developer, like focus that I have, I really thought about like, well, I know how to build all these integrations, but what do I need to do to let these applications let me do this? And so it's very quickly that you see that this is clearly like an M times N problem.

Like you have multiple like applications and multiple integrations you want to build and like what is better there to fix this than using a protocol. And at the same time, was actually working on an LSP related thing internally that didn't go anywhere. But you put these things together in someone's brain and let them wait for like a few weeks and out of that comes like the idea of like, let's build some, some protocol.

And so back to like this little room, like it was literally just me going to a room with Justin and go like, I think we should build something like this. This is a good idea. And Justin, lucky for me, just really took an interest in the idea and and took it from there to like, to to build something together with me.

That's really the inception story is like, it's us to from then on just going and building it over, over the course of like, like a month and a half of like building the protocol, building the first integration, like Justin did a lot of the, like the heavy lifting of the first integrations in cloud desktop. I did a lot of the first proof of concept of how this can look like in an IDE. And if you, we could talk about like some of the tidbits you can find way before the inception of like before the official release, if you were looking at the right repositories at the right time.

But there you go. That's like some of the the rough story.

Speaker 2

What was the timeline? When do I know November 25 was, like, the official announcement date. When did you guys start working on it?

Justin, when did we start working on that?

Speaker 4

I think. Yeah. I I as soon as David pitched this initial idea, I got excited pretty quickly, and we started working on it, I think, almost immediately after that conversation.

And then, I don't know, it was a couple, maybe a few months of building the really unrewarding bits, if we're being honest, because for establishing something that's like this communication protocol, has clients and servers and SDKs everywhere, There's just like a lot of like laying the groundwork that you have to do, so it was a pretty that was a pretty slow couple months. But then afterward, once you get some things talking over that wire, it really starts to get exciting, and you can start building all sorts of crazy things. And I think this really came to a head.

I don't remember exactly when it was. Maybe, like, approximately a month before release, there was an internal hackathon where some folks really got excited about MCP and started building all sorts of crazy applications. I think the coolest one of which was like an MCP server that can control a three d printer or something.

And so, like, suddenly, people are feeling this power of, like, Claude connecting to the outside world in a really tangible way, and that that really added some some juice to us and to the release.

Speaker 5

Yeah. And we'll go into the technical details, but I just wanna wrap up here. You mentioned you could have seen some things coming if you were looking in the right places.

We always wanna know what are the places to get alpha, so how how how to find MCP early. I'm a big Zed user. I like the Zed editor.

The first MTP implementation on an IDE wasn't Zed. It was written by me, and it was there like a month and a half before the official release, just because we needed to do it in the open, because it's an open source project. And so it was it was not it was named slightly differently because we were not set on the name yet, but it was there.

Speaker 3

I'm happy to go a little bit. Anthropic also had some preview of a model with zed. Right?

Some kind of fast editing model. I I I confess, you know, I'm a cursor windsurf user. Haven't tried zed.

What's what's your, you know, unrelated or, you know, unsolicited two second pitch for for zed?

Speaker 5

It's a good question. I It really depends what you value in editors. And for me, I I wouldn't even say I I like I love Zed more than others.

I like them all like complimentary in in a way or another. Like I do use Windsurf, do use Zed. But I think my, my main pitch for Zed is low latency, super smooth experience editor with a decent enough AI integration.

Speaker 3

Got it. I mean, and maybe, you know, I think that's, that's all it is for a lot of people. I think a lot of people obviously very tied to the Versus Code paradigm and the extensions that come along with it.

Okay. So I wanted to go back a little bit, you know, on, on, on some of the things that you mentioned, Justin, which was building MCP on paper. You know, obviously we only see the end result.

It just seems inspired by LSP, and I I think both of you have acknowledged that. So how much is there to build? And and when you say build, is it a lot of code or a lot of design?

Because I felt like it's a lot of design. Right? Like, you're picking JSON RPC.

Like, how much did you base off of LSP, and and, you know, what what was the sort of hard hard parts?

Speaker 4

Yeah. Absolutely. I mean, we we definitely did take heavy inspiration from LSP.

David had much more prior experience with it than I did, but working on developer tools. So, you know, I've mostly worked on products or sort of infrastructural things, so LSP was new to me. But as a as a, like, or from design principles, it really makes a ton of sense, because it does solve this m times n problem that David referred to, where, you know, in the world before LSP, you had all these different IDEs and editors, and then all these different languages that each wants to support, or that their users want them to support, and then everyone's just building like one off integrations.

And so, like, you use Vim, and you might have really great support for like, honestly, I don't know, C or something. And then like, you switch over to JetBrains, and you have the Java support. But then like, you don't get to use the great JetBrains Java support in Vim, and you don't get to use the great C supported JetBrains or something like that.

So LSP largely, I think, solved this problem by creating this common language that they could all speak, and then, know, you can have some people focus on really robust language server implementations, and then the IDE developers can really focus on that side, and they both benefit. So that was our key takeaway for MCP, is that same principle and that same problem in the space of AI applications and extensions to AI applications. But in terms of concrete particulars, I mean, we did take JSON RPC, and we took this idea of bidirectionality, but I think we quickly took it down a different route after that.

I guess there is one other principle from LSP that we try to stick to today, which is this focus on how features manifest more than the semantics of things, if that makes sense. David refers to it as being presentation focused, where, like, basically, thinking and like, offering different primitives not because necessarily the semantics of them are very different, but because you want them to show up in the application differently. Like, that was a key sort of insight about how LSP was developed, and that's also something we try to apply to MCP.

But but like I said, then from there, like, yeah, we spent a lot of time, really a lot of time, and we can go into this more separately, like, thinking about each of the primitives that we want to offer in MCP and why they should be different, like, why we want to have all these different concepts. That was a significant amount of work. That was the design work, as you allude to.

But then also, already out of the gate, we had three different languages that we wanted to at least support to some degree. That was TypeScript, Python, and then for the Zed integration, it was Rust. So there was some SDK building work in those languages, a mixture of clients and servers to build out, to try to create this, like, internal ecosystem that we could start playing with.

And then, yeah, I guess just just trying to make everything, like, robust over, like, I don't know, this whole, like, concept that we have for local MCP where you, like, launch subprocesses and stuff and making that robust, that took some time as well.

Speaker 5

Yeah. Maybe adding to that, I think the LSP inference goes even a little bit further. Like we did take actually quite a look at criticisms on LSP, like things that LSP didn't do right, and things that people felt they would love to have different, and really took that too hard to like see, you know, what are the, some of the things that we wish, you know, we, we should do better.

We took a, you know, like a lengthy, like, look at like their very unique approach to JSON RPC, I may say. And then this, we decided that this is not what we do. And so there's like these differences, but it's clearly very, very inspired because I think when you're trying to build on focus, if you're trying to build something like MCP, you kind of want to pick the areas you want to innovate in, but you kind of want to be boring about the other parts.

In pattern matching LSP to the problem allows you to be boring in all of the core pieces that you want to be boring in. Like the choice of JSON RPC is very non controversial to us because it's just like, it doesn't matter at all, like what you, what the action like bites on the bar that you're speaking. It makes no difference to us.

The innovation is on the, the primitives you choose and these type of things. And so we're there's way more focus on that that we wanted to do. Having some prior art is good there basically.

Speaker 3

It does. I wanted to to double click. I mean, there's so many things you can go into.

Obviously, I I am passionate about protocol design. I wanted to show you guys this. I mean, I I think you guys know, but, know, you already referred to the m times n problem, and I can just share my screen here about anyone working in developer tools has faced this exact issue where you see the guard box, basically.

Like, the fundamental problem and solution of Yeah. All infrastructure engineering is you have things going to end things, and then you put the guard box and they'll all be better. Right?

So here is one problem for Uber, one problem from GraphQL, one problem from a Temporal where I used to work at, and this is from React. And I was just kind of curious, like, did you solve end times end problems at Facebook? Like, sounds like, David, you did that for a living, right?

Like, this is just end times end for a living.

Speaker 5

Yeah. Yeah. To to to some some degree for sure.

Did got what a good example of this, but like I did a bunch of this kind of work on like source control systems and these type of things, and so there were there were a bunch of these type of problems as well. And so you just shove them into something that everyone can read from and everyone can write to and you build your somewhere and it works. Yeah.

But yeah, this is is just in developer tooling, you absolutely right. In developer tooling, this is everywhere, right? And that, you know, it shows up everywhere.

Speaker 3

And what was interesting is I think everyone who makes the godbox then has the same set of problems, which is also you now have like composability, off, and the remote versus local. You know, that there's there's this very common shared set of problems. So I kinda wanna take a meta lesson on how to do the Godbox, but we, you we can we can talk about the the sort of development stuff later.

I wanted to double click on, again, the presentation that Justin mentioned of, like, how features manifest and how you said some things are the same, but you just wanna reify some concepts so they show up differently. And I had that sense, you know, when was looking at the MCP docs, I'm like, why do these two things need to be this, the difference in other paradigms? They're basically the same.

I think a lot of people treat tool calling as the solution to everything. Right? And sometimes you can actually sort of view kinds of different kinds of tool calls as different things.

And sometimes they're resources. Sometimes they're actually taking actions. Sometimes they're something else that I don't really know yet, but I just want to see, like, what are some things that you sort of mentally group as adjacent concepts, and why were they important to you to emphasize?

Yeah. I can chat about this a bit. I think, fundamentally, we we every sort of primitive that we thought through, we thought from the perspective of the application developer first.

Speaker 4

or, you know, call it desktop or some agent interface or or whatever the case may be, what are the different things that I would want to receive from, like, an integration? And I think once you take that lens, it becomes quite clear that that tool calling is necessary but very insufficient. Like, there are many other things you would want to do besides just get tools and plug them into the model, and you want to have some way of differentiating what those different things are.

So, the kind of core primitives that we started MCP with, we've since added a couple more, but the core ones are really tools, which we've already talked about, is like adding tools directly to the model, or function calling is sometimes called, resources, which is basically bits of data or context that you might want to add to the context, excuse me, to the model context. And this is the first primitive where it's like, we decided this could be application controlled. Like, maybe you want a model to automatically search through and and find relevant resources and bring them into context, but maybe you also want that to be an explicit UI affordance in the application where the user can, like, you know, pick through a drop down or, like, a paper clip menu or whatever and find specific things and tag them in, and then that becomes part of, like, their message to the LLM.

Like, those are both use cases for resources. And then the third one is prompts, which are deliberately meant to be, like, user initiated or, like, user substituted text or messages. So, like, the analogy here would be, like, if you're an editor, like a slash command or something like that or, like, an at, you know, autocompletion type thing, where it's, like, I have this kind of macro effectively that I wanna drop in and use.

And we have sort of expressed opinions through MCP about the different ways that these things could manifest, but ultimately, it is for application developers to decide, okay, you you get these different concepts expressed differently. And it's very useful as an application developer because you can decide the appropriate experience for each. And actually, this can be a point of differentiation too.

Like, we were also thinking, you know, from the application developer perspective, they you know, application developers don't want to be commoditized. They don't want their application to end up the same as every other AI application. So, like, what are the unique things that they could do to like create the best user experience, even while connecting up to this big open ecosystem of integration?

I yeah.

Speaker 5

the I think there are two two aspect to that that I I wanna wanna mention. The first one is that interesting enough, like while nowadays tool colonies, obviously like probably like 95% plus of the integrations. And I wish there would be, you know, more clients doing tool resources, doing prompts.

The very first implementation in Zed is actually a prompt implementation. It doesn't deal with tools. And, and it, we found this actually quite useful because what it allows you to do is, for example, build an MCP server that takes like a back trace from Sentry or any other like online platform that that tracks your your crashes and just lets you pull this into the context window beforehand.

And so it's quite nice that way that it's like a user driven interaction that you does a user decide when to pull this in and don't have to wait for the model to do it. And so it's, it's a great way to craft the prompt in a way. And I think similarly, you know, I wish, you know, more MCP servers today would bring prompts as examples of like how to even use the tools that they're providing at the same time.

The resources bit are quite interesting as well. And I wish we would see more usage there because it's very easy to envision, but yet nobody has really implemented it. A system where like an MCP server exposes, you know, a set of documents that you have, your database, whatever you might want to, as a set of resources.

And then like a client application would build a full RAC index around this, right? Like this is definitely an application use case we had in mind as to why these are exposed in such a way that they're not model driven because you might want to have way more resource content than is, you know, realistically usable in a context window. And so I think, you know, I, I wish applications and I hope applications will do this in the next few months, use these parameters, you know, way better because I think there there's way more rich experiences to be created that way.

Yeah. I I completely agree with that.

Speaker 2

return to it if I have it. I think that's a great point, and everybody just, you know, has a hammer and wants to do tool calling on everything. I think a lot of people do tool calling to do a database query.

They don't use resources for it. What are, like, the, I guess, maybe, like, pros and cons or, like, when people should use a tool versus a resource, especially when it comes to, like, things that do have an API interface? Like, for a database, you can do a tool that does a SQL query versus when should you do that or a resource instead with the data.

Speaker 4

So so our like, the way we separate these is, like, tools are always meant to be initiated by the model. It's sort of, like, at the model's discretion that it will, like, find the right tool and apply it. So if that if that's the interaction you want as a server developer, where it's like, okay.

This, you know, suddenly I've given the LLM the ability to run SQL queries, for example, that makes sense as a tool. But resources are are more flexible, basically. And I I think, to be completely honest, the story here is practically a bit complicated today because many clients don't support resources yet.

But, like, I think in an ideal world where all these concepts are fully realized and there's, like, full ecosystem support, you would do resources for things like the schemas of your database tables and stuff like that as a way to, like, either allow the user to say, like, okay, now, you know, Claude, I wanna talk to you about this database table. Here it is. Let's have this conversation.

Or maybe the particular AI application that you're using, like, you know, it could be something agentic like Cloud Code, is able to just, like, agentically look up resources and find the right schema of the database table you're talking about. Like, both those interactions are are possible. But I think, like, anytime you have this sort of, like, you wanna list a bunch of entities and then read any of them, that makes sense to model as resources.

Resources are also they're uniquely identified by a URI always. And so you can also think of them as, like, you know, sort of general purpose transformers even. Like, if if you wanna support an interaction where a user just, like, drops a u a URI in and then you, like, automatically figure out how to interpret that, you could use MCP servers to do that interpretation.

Speaker 5

One of the the interesting side notes here back to to the Zeta example of resources is, is that has like a prompt library that you can that that you people can interact with. And we just exposed a set of default prompts that we want everyone to have and as part of that prompt library via resources for a while. That like you would boot up Zed and Zed will just populate the prompt library with from an MCP server, which was quite a cool interaction.

And that was again, a very specific, like both sides needed to grow agree upon the, the, the URI format and, and the underlying data format. And, but that was a nice and kind of like neat little application of resources.

Speaker 4

There's also going back to that perspective of, like, as an application developer, what are the things that I would want? We also apply this thinking to, like, what existing features of applications could conceivably be kind of, like, factored out into MCP servers if you were to take that approach today. And so, like, basically, any IDE where you have, like, an attachment menu, that I think naturally models as resources.

It's just, you know, those implementations already existed. Yeah.

Speaker 3

immediate like, you know, when you introduced it for Cloud Desktop and I saw the at sign there, I was like, oh, yeah. That's what Cursor has. But this is for everyone else.

And, you know, I think, like, that that is a really good design target because it's something that already exists and people can map on pretty neatly. I was actually featuring this chart from Mahesh's workshop that presumably you guys agreed on. I think this is so useful that it should be on the front page of of the docs.

Like Probably should be. I think that's a good suggestion. Do you wanna do you wanna do a PR for this?

I love it. Yeah. Do a PR.

I've I've I've done a PR for just Mahesh's workshop in general just because I'm like, you know I know. I approve. Yeah.

Thank you. Yeah. I mean, like but, you know, I think for me as a developer relations person, I always insist on having a map for people.

Here are all the main things you have to understand. We'll spend the next two hours going through this. So some one image that, that kind of covers all this, I think it's, it's pretty helpful.

And I like your emphasis on prompts. I would say that it's interesting that, like, I think, you know, in the earliest, early days of like ChatGPT and Claude, people often came up with, oh, you can't really follow my screen, can you? In the early days of chat of of ChatGPT and all that, like, a lot a lot of people started, like, you know, GitHub for prompts.

Like, we'll we'll do prompt manager libraries, and and, like, those never really took off. And I think something like this is helpful and important. I would say, like, I've also seen prompt file from Human Loop, I think, as as other ways to standardize how people share prompts.

But, yeah, I I I agree that, like, there should be more innovation here. And I think probably people want some dynamicism, which I think you you afford you allow for. And I like that you have multistep.

That this was this was the main thing that got me like like, these guys really get it. You know, I think you you maybe have published some research that says, like, actually, sometimes to get to get the model working the right way, have to do multistep prompting or jailbreaking to to to behave the way that you want. And so I think prompts are not just single conversations.

They are sometimes chains of conversations. Yeah.

Speaker 2

Another question that I had when I was looking at some server implementations, the server builders kinda decide what data gets eventually returned, especially for tool calls. For example, the Google Maps one. Right?

If you just look through it, they decide what, you know, attributes kind of get returned, and the user cannot override that if there's a missing one. That has always been my gripe with, like, SDKs in general, when people build, like, API wrapper SDKs, then they miss one parameter that maybe is new, and then I cannot use it. How do you guys think about that?

And, like, yeah, how much should the user be able to intervene in that versus just letting the server designer do all the work?

Speaker 4

I I think we probably bear responsibility for the Google Maps one, because I think that's one of the reference servers we've released. I mean, in general, for things like, for tool results in particular, we've actually made the deliberate decision, at least thus far, for tool results to be not, like, sort of structured JSON data, not matching a schema, really, but as, like, a text or images or basically, like, messages that you would pass into the LLM directly. And so I guess the the corollary from that is you really should just return a whole jumble of data and trust the LLM to, like, sort through it and sift and, like, you know, extract the information it cares about because that's what that's exactly what they excel at.

And we really try to think about, like, yeah, how how to, you know, use LLMs to their full potential and not maybe over specify and then end up with something that doesn't scale as LLMs themselves get better and better. So really, yeah, I suppose what should be happening in this example server, which, again, will request welcome. That'd be great.

It's like, if all these result types were literally just passed through from the API that it's calling, and then the LLM can can do whatever it wants with the data.

Speaker 2

Yeah. Yeah. That that to me is like the USB C part of this, you know, which is like, hey.

This is kinda the file, so to speak, on this on the server, which is what the API returns, and then you're kinda funneling it through without doing too much in the middle. Yeah. But but at the same time, it's like you need to do some work on some of the pieces because sometimes they have, like, weird, you know, encoding or, like, all these different things that maybe the server should handle.

But, yeah, it's a hard it's a hard design decisions on where to draw the line.

Speaker 4

throw AI under the bus a little bit here and just say that Claude wrote a lot of these example servers as well.

Speaker 3

No surprise at all.

Speaker 5

But I do think sorry. I I do think there's an interesting point in in this that I there I do think people at the moment still to mostly still just apply their normal software engineering API approaches to this. And I think we're still need a little bit more relearning of how to build something for LLMs and trust them, particularly, you know, as they are getting significantly better year to year.

Right. And I think, you know, two years ago, maybe that approach would have been very valid, but nowadays just like, just throw data at that thing that is really good at dealing with data is a good approach to this problem. And I think that's just like unlearning, like, twenty, thirty, forty years of soft engineering practices that go a little bit into this to some degree.

Speaker 4

If I could add to that real quickly, just one framing as well for MCP is thinking in terms of, like, how crazily fast AI is advancing. I mean, it's exciting. It's also scary.

Like, thinking, us thinking that the biggest bottleneck to, you know, the next wave of capabilities for models might actually be their ability to interact with the outside world, to read data from outside data sources or take stateful actions. Working on a topic, we absolutely care about doing that safely and with the right control and alignment measures in place and everything. But also, as AI gets better, people will want that.

That'll be key to, like, becoming productive with AI is, like, being able to connect them up to all those things. So MCP is also sort of like a a bet on the future and where this is all going and how important that'll be.

Speaker 2

Yeah. Yeah. I I would say any API attribute that says formatted underscore should kinda be gone, and we should just get the raw data from all of them because why, you know, why are you formatting for me?

The mod the model is definitely smart enough to format an address. So I think this should go to the the end user.

Speaker 3

Yeah. Have I think Alessio is about to move on to, like, server implementation. I wanted to I think we we're talk we're still talking about sort of MCP design and goals and intentions.

And we've I think we've indirectly identified, like, some problems that MCP is really trying to address. But I wanted to give you the spot to directly take on MCP versus OpenAPI because I think, obviously, there's this is a top question. I wanted to sort of recap everything we just talked about and give people a nice little segment that that people can say say, like, this is a definitive answer on MCP versus OpenAPI?

Yeah.

Speaker 4

OpenAPI specifications are a very great tool. I've used them a lot in developing APIs and consumers of APIs. I think, fundamentally, we think that they're just too granular for what you wanna do with LLMs.

Like, they don't express higher level AI specific concepts, like this whole mental model that we've talked about with the primitives of MCP and thinking from the perspective of the application developer. Like, you don't get any of that when you encode this information into an open API specification. So we believe that models will benefit more from what the purpose built or purpose designed tools, resources, prompts, the other primitives than just kind of like, here's our REST API, wild.

Speaker 5

there's another aspect, I think that and I'm not an open API expert, so I might everything might not be perfectly accurate, but I do think that we're like, there's been and we can talk about this a bit more later. There's a deliberate design decision to make the protocol somewhat stateful because we do really believe that AI applications and AI like interactions will become inherently more stateful and that we're the current state of like, like need for statelessness is more a temporary point in time that will, you know, to some degree that will always exist, but I think like more statefulness will become increasingly more popular. Particularly when you think about additional modalities that go beyond just pure text based, you know, interactions with models.

Like it might be like video, mod audio, whatever other modalities exist and out there already. And so I do think that like having something a bit more stateful is just inherently useful in this interaction interaction pattern. Pattern.

I do think they're actually more complementary open API and MCP than if people wanted to make it out. Like people look for these like, you know, a versus b and like, you know, have all the all the developers of these things go in a room and fist fight it out. But that's rarely what's going on.

I think it's actually, they're very complimentary and they have their little space where they're very, very strong. And I think, you know, just use the best tool for the job. And if you wanna have a rich interaction between an AI application, it's probably like, it's probably MCP that's the right choice.

And if if you want to have, an API spec somewhere that is very easy and, like, a model can read and to interpret, and that's what what worked for you, then OpenAPI is the way to go. One more thing to add here is that we've already seen people I mean, this happened very early.

Speaker 4

between the two as well. So, like, if what you have is an open API specification and no one's building a custom MCP server for it, there are already translators that will take that and reexpose it as MCP, and you could do it the other direction too. Awesome.

Speaker 2

Yeah. I think there's the other side of MCPs that people don't talk as much about because it doesn't go viral, which is building the servers. So I think everybody does the tweets about, well, I connected Cloud Desktop to XMCP.

It's amazing. How would you guys suggest people start with building servers? I think the spec is like so there's so many things you can do that it's almost like, how do you draw the line between being very descriptive as a server developer versus like going back to our discussion before, like, just take the data and then let the model manipulate it later.

Do you have any suggestions for people?

Speaker 5

I I I think there I have a few suggestions. I think that one of the best things I think about NTP and something that we got right very early is that it's just very, very easy to build like something very simple that might not be amazing, but it it's pretty it's good enough because models are very good and get this going within like half an hour, you know. And so I think that the best part is just like pick the language of, you know, of your choice that you love the most.

Pick the SDK for it, if if there's an SDK for it, and then just go build a tool of the thing you that matters to you personally, and that you wanna see the model like interact with. Build the server, throw the tool in, don't even worry too much about the description just yet. Like do a bit of like write your little description as, as you, you think about it, and just give it to the model and, and just throw it standard IO protocol, transport wise into like an application that you like and see it do things.

And I think that's part of the magic that, or like, you know, empowerment and magic for developers to get so quickly to something that the model does something that you care about, that I think really gets going and gets you into this flow of like, okay, I see this thing can do cool things. Now I go and, and can expand on this. And now I can go and like really think about like, which are the different tools I want, which are the different raw resources and prompts I want.

Okay. Now that I have that. Okay.

Now do I, what, what do my evals look like for how I want this to go? How do I optimize my prompts for the evals using like tools like that? This is infinite depth that you can do, but just start as simple as possible and just go, go build a server in like half an hour in the language of your choice and, and how the model interacts with the things that matter to you.

And I think that's, that's where the fun is at. And I, and I think people, I, I think a lot of what MCP makes and what likes great is it just adds a lot of fun to to the development piece to just go go and have models do things quickly.

Speaker 4

I I also, I'm quite partial, again, to using AI to help me do the coding. Like, I think even even during the initial development process, we realized it was quite easy to to basically just take all the SDK code. Again, you know, what David suggested, like, you know, pick the language you care about, and then pick the SDK.

And once you have that, you can literally just drop the whole SDK code into an LLM's context window and say, okay, now that you know MCP, build me a server that does this, this, this. And it like, the results, I think, are astounding. Like, I mean, it might not be perfect around every every single corner or whatever, and you can refine it over time, but, like, it's a great way to kinda, like, one shot something that basically does what you want, and then you can iterate from there.

And and like David said, there has been a big emphasis from the beginning on, like, making servers as easy and simple to build as possible, which certainly helps with LLMs doing it too. We often find that, like, re like, getting started is, you know, 100, 200 lines of code in the language of your choice. It's really quite easy.

Speaker 5

Yeah. But if you don't have an SDK again, give the, like, the subset of the spec that you care about to the model and like another SDK and just have it build you an SDK. And it usually works for like that subset.

Building a full SDK is a different story, but like to get a model to tool call in Haskell or whatever, like, language you like, it's probably pretty straightforward.

Speaker 4

Yeah. I sorry.

Speaker 2

I I was gonna say I I co hosted a hackathon at the AGI house on personal agents, and one of the personal agents somebody built was like a MCP server builder agent, where they will basically put the URL of the API spec, and it will build an MCP server for them. Do you do you see that today as kinda like, yeah, most servers are just kinda like a layer on top of an existing API without too much opinion? And how yeah.

Do you think that's kinda like how it's gonna be going forward? Just like AI generated, exposed to API that already exists, or are we gonna see kinda like net new MCP experiences that you couldn't do before?

Speaker 4

I I think Go for it. I think both. Like, I I think there there will always be value in, like, oh, I have, you know, I have my data over here, and I want to use some connector to bring it into my application over here.

That use case will certainly remain. I think, you know, this this kinda goes back to, like, I think a lot of things today are maybe defaulting to tool use when some of the other primitives would be maybe more appropriate over time. And so it could still be that connector.

It could still just be that sort of adapter layer, but could, like, actually adapt it onto different primitives, which is one one way to add more value. But then I also think there's plenty of opportunity for use cases, which, like, do, or for MCP servers that kinda do interesting things in and of themselves and aren't just adapters. Some of the earliest examples of this were, like, you know, the memory MCP server, which gives the LLM the ability to remember things across conversations, or, like, someone's close coworker built the sorry.

I shouldn't have said not a close coworker. Someone built the sequential thinking MCP server, which gives a model the ability to, like, really think step by step and get better at its reasoning capabilities. This is something where it's like, it really isn't integrating with anything external.

It's just providing this sort of, like, way of thinking for a model. I guess either way, though, I I think AI authorship of the servers is totally possible. Like, I've had a lot of success in prompting, just being like, hey.

I wanna build an MCP server that, like, does this thing. And even if this thing is not adapting some other API, but is doing something completely original, it's usually able to figure that out too.

Speaker 5

Yeah. I do I do think that the to add to that, I do think that a good part of of what MCP servers will be will be these like just API wrapper to some degree. And that's good and valid because that works and it it gets you very, very far.

But I think we're just very early, like in in exploring what you can do. I mean, I think as client support for like certain primitives get better, like we can talk about sampling. This might be my favorite topic and and greatest frustration.

At the same time, I think you can just see it very easily see like way, way, way richer experiences. And we have we have built them internally for as prototyping aspects. And I think you see some of that in the community already, but there's just, you know, things like, hey, summarize my, you know, my, my, my, my favorite subreddits for the morning MCP server that nobody has built yet, but it's very easy to envision.

And the protocol can totally do this. And these are like slightly richer experiences. And I think as people like go away from like the, oh, I just want to like, I'm just in this new world where I can hook up the things that matter to me to the LLM to like, actually want a real workflow, a real like, like more richer experience that I I really wanna expose to the model, I think then you will see these things pop up.

But again, that's a there's a little bit of a chicken and egg problem at the moment with like what a client supported versus, you know, what servers like authors wanna do. Yeah. That that that was kind of my next question on composability.

Speaker 2

Like, how how do you guys see that? Do you have plans for that? What's kinda like the import of MCPs, so to speak, into another MCP.

Like, I wanna build like the subreddit one, this is probably gonna be like the Reddit API MCP, and then the summarization MCP. And then how do I how do I do a super MCP?

Speaker 5

Yeah. So so this is an interesting topic, and I think there are so there are, there are two aspects of it. I think the, the one aspect is like, how can I build something identically that requires an LLM call in like a one form of fashion, like for summarization or so, but I'm staying model independent?

And for that, that's where like part of this bidirectionality comes in, in this more rich experience where we do have this facility for servers to ask the client again, who owns the LLM interaction, right? Like we talk about cursor who like runs the loop with the LLM for you. There that for the server author to ask the client for a completion and basically have it like summarize something for the server and return it back.

And so now what model summarizes this depends on which one you have in cursor and not depends on what the author brings. The author doesn't bring an SDK. It doesn't have you had an API key.

It's completely model independent how you can build this. This is one aspect to that. The second aspect to building richer richer systems with MCP is that you can easily envision an MCP server that serves something to like something like Cursor or Windsurf or a cloud desktop, but at the same time also is an MCP client at the same time and itself can use MCP servers to create a rich experience.

And now you have a recursive property, which we actually quite carefully into design principles try to retain. You, you know, you see it all over the place and the authorization and other aspects to the spec that we've trained this like recursive pattern. And now you can think about like, okay, I have I have this little bundle of application as opposed to server and add a client, and I can add these in chains and build basically graphs like DAGs out of MCP servers that can just richly interact with each other.

A Jentic MCP server can also use the whole ecosystem of MCP servers available to themselves. And I think that's a really cool environment, cool thing you can do. And people have experimented with this.

And I think you see hopefully more of this, particularly when you think about, like, auto selecting, auto installing. There's a bunch of these things you can do that make can make a really fun experience.

Speaker 4

I I think, practically, there are some niceties we still need to add to the SDKs to make this really simple and, like, easy to execute on, like this kind of recursive MCP server that is also a client or, like, kind of multiplexing

Speaker 3

together the behaviors of multiple MCP servers into one host, as we call it. These are things we definitely want to add. We haven't been able to yet, but, like, I think that would go some way to showcasing these things that we know are already possible, but not necessarily picking up that much yet.

Okay. This is very exciting and very I I'm sure I'm sure a lot of people get very, very a lot of ideas and inspiration from this. Is an MCP server that is also a client, is that an agent?

What's an agent? There's a lot of definitions of agents. Because, like, you you in some ways, you're you're requesting something, and it's going off and doing stuff that you don't necessarily know.

It's like a layer of distraction between you and the ultimate raw source of the data. You could dispute that. Yeah.

I just I don't know if you have a hot take on agents.

Speaker 5

I do think I do think that you can build an agent that way. For me, I think you need to define the difference between an an MCP server plus client that is just a proxy versus an agent. I think there's a difference.

And I think that difference might be in, you know, for example, using a sample loop to create a more rich experience to to to you have a model called tools while like inside that MCP server through these clients. I think then you have a, an actual like agent. Yeah.

I do think it's very simple to build agents that way. Yeah. I think there are maybe a few paths here.

Speaker 4

feels like there's some relationship between MCP and agents. One possible version is, like, maybe MCP is a great way to represent agents. Maybe there are some, like, you know, features or specific things that are missing that would make the ergonomics of it better, and we should make that part of MCP.

That's one possibility. Another is, like, maybe MCP makes sense as kinda like a foundational communication layer for agents to, like, compose with other agents or something like that. Or there could be other possibilities entirely.

Maybe MCP should specialize and narrowly focus on kind of the AI application side and not as much on the agent side. I think it's a very live question, and I think there are sort of trade offs in every direction. Going back to the analogy of the godbox, I think one thing that we have to be very careful about when designing a protocol and kind of curating or shepherding an ecosystem is, like, trying to do too much.

I think it's it's a very big yeah. You know, you don't want a protocol that tries to do absolutely everything under the sun, because then it'll be bad at everything too.

Speaker 3

really naturally fitting in to this existing model and paradigm, or to what degree is it basically just, orthogonal? It should be something. I think once you enable two way and once you enable client server to be the same in delegation of work to another MCP server, it's definitely more agentic than not.

But I appreciate that you keep in mind simplicity and not trying to solve every problem on this end. Cool. I'm happy to move on there.

I mean, I'm gonna double click on a couple of things that I marked out because they coincide with things that we wanted to ask you anyway. So the first one is, it's just a simple. How many MCP things can one implementation support?

You know? So this is the, the, the sort of wide versus deep question. And and this this is direct relevance to the nesting of MCPs that we just talked about.

In April 2024, when when Claude was launching one of its first context the the first million token context example, they said you can support 250 tools. And, you know, so to me, that's wide in in the sense that you you don't have tools that call tools. You just have the model and a flat hierarchy of tools.

But then, obviously, you have tool confusion. It's going to happen. When the are adjacent, you call the wrong tool, you're gonna get the bad result.

Right? Do you have a recommendation of, like, a maximum number of MCP servers that are enabled at any given time?

Speaker 4

to be honest, like, I I think there's not one answer to this, because to some extent, it depends on the model that you're using. To some extent, it depends on, like, how well the tools are named and described for the model and stuff like that to avoid confusion. I mean, I think that the dream is certainly, like, you just furnish all this information to the LLM, and it can make sense of everything.

This kind of goes back to, like, the future we envision with MCP is, like, all this information is just brought to the model, and it decides what to do with But today, the reality or the practicalities might mean that, like, yeah, maybe you maybe in your client application, like the AI application, you do some filtering over the toolset, or, like, maybe you you run, like, a faster, smaller LLM to like filter to what's most relevant, and then only pass those tools to the bigger model, or you could use an MCP server, which is a proxy to other MCP servers, and does some filtering at that level or something like that. I think hundreds, as you referenced, is still a fairly safe bet, at least for Claude. I can't speak to the other models.

But, yeah. I don't know. I think over time, we should just expect this to get better.

Speaker 5

Yeah. Obviously, it highly it highly depends on the overlap of the description. Right?

Like, if you if you have like very separate servers that do very separate things and the tools have very clear unique names, very clear, well written descriptions, you know, your mileage might be way higher than if you have a GitLab and a GitHub server at the same time in your context. And, and then the overlap is quite significant because they look very similar to the model and confusion becomes easier.

Speaker 4

There's different considerations too, depending on the AI application. If you're if you're trying to build something very agentic, maybe you are trying to minimize the amount of times you need to go back to the user with a question, or, you know, minimize the amount of, like, configurability in your interface or something.

Speaker 3

the full list always on all the time. Yeah. That's where I think the concepts of resources and tools get to blend a little bit.

Right? Because now you're saying you want some degree of user control, right, or application control. And other times, you want the model to control it.

Right? So now we're choosing just subsets of tools. I don't know.

Speaker 4

Yeah. I think it's a fair point or or a fair concern. I I guess the way I think about this is still, like, at the end of the day, and and this is a core MCP design principle, is, like, ultimately, the client application and, by extension, the user, ultimately, they should be in full control of absolutely everything that's happening via MCP.

When we say that tools are model controlled, what we really mean is, like, tools should only be invoked by the model. Like, there really shouldn't be an application interaction or a user interaction where it's like, okay. As a user, I now want you to use this tool.

I mean, occasionally, you might do that for prompting reasons, but, like, I think that shouldn't be, like, a UI affordance. But I I think the client application or the user deciding to, like, filter out things that MCP servers are offering, totally reasonable, or even, like, transform them.

Speaker 5

that takes full descriptions from an MCP server and, like, enriches that, makes them better. We we really want the client applications to have full control in the MCP paradigm. That in in addition, though, like, I think there one thing that that's very, very early in my thinking is there might be addition to the protocol where you want to give the server author the ability to like logically group certain primitives together potentially to, to inform that because they might know some of these logical groupings better, and that could like encompasses prompts, resources, and tools at the same time.

Speaker 4

I mean, personally, we can have a design discussion on there. I mean, personally, my take would be that those should be separate MCP servers, and then the user should be able to compose them together. But we can figure it out.

Speaker 2

standard library, so to speak, of, hey. These are, like, the canonical servers. Do not build this.

We're just gonna take care of those. And those can be maybe the building blocks that people can compose, or do you expect people to just rebuild their own MCP servers for like a lot of things?

Speaker 5

I think we will not be too prescriptive in that sense. I think there will be inherently, you know, there's a lot of power. Well, let me rephrase it.

Like, I I have I have a long history in an open source, and I feel the bizarre approach to this problem is, is somewhat useful. Right. And I think, so that the best and most interesting option wins, and I don't think we wanna be very prescriptive.

I do, we'll definitely foresee, and this already exists that there would be like 25 GitHub servers and like 25, you know, Postgres servers and whatnot. And and that's all cool and that's good. And and I think they all add in in their own way.

But effectively, eventually over months or years, the ecosystem will converge to like a set of, of very widely used ones who basically, I don't know if you call it winning, but like that will be the most used ones. And I think that's completely fine because be prescriptive about this. I don't think it's, is any useful, any use.

I do think of course that there will be like MCP servers and you see them already that are driven by companies for their products and of, you know, they will inherently be probably the canonical implementation. Like if you wanna work with Cloudflow workers and use an MCP server for that, you'll probably wanna use the one developed by Cloudflare. Yep.

Speaker 4

I think there's maybe a a related thing here too, just about, like, one big thing worth thinking about, we don't have any, like, solutions completely ready to go, is this question of, like, trust or, like, you know vetting is maybe a better word. Like, how do you determine which MCP servers are, like, the kinda good and safe ones to use? Regardless of if there are any implementations of GitHub MCP servers, that could be totally fine, but you wanna make sure that you're not using ones that are really, like, sus.

Right? And so trying to think about, like, how to of endow reputation, or, like, you know, if, hypothetically, Anthropic is, like, we've vetted this, it meets our criteria for secure coding or something, How can that be reflected in in kind of this open model where everyone in the ecosystem can benefit?

Speaker 2

Don't really know the answer yet, but that's very much top of mind. But but I think that's, like, a great design choice of NCPs, which is, like, language agnostic. Like, already and there's not, to my knowledge, an Anthropic official Ruby SDK nor an OpenAI SDK, and Alex Rodell that a great does a great job building those.

But now with MCPs, it's like, you don't actually have to translate an SDK to all these languages. You just do one one interface and kinda bless that interface as as Anthropic. So, yeah, that was that was nice.

Speaker 3

I have a quick answer to this thing. So, like, obviously, there's, like, five or six different registries already popped up. You guys announced your official registry that's gone the way, and a registry is very tempting to offer, like, counts, likes, reviews, and some kind of trust thing.

I think it's kind of brittle. Like, no matter what kind of social proof or other thing you can you can offer, the next update Can't compromise a trusted package. And actually, that's the one that does the most damage.

Right? So abusing the trust system is like setting up a trust system creates the damage from the trust system. And and so I actually wanna encourage people to try out MCP inspector because all you gotta do is, like, actually just look at the traffic.

And, like, I think that's that that goes for a lot of security issues.

Speaker 5

Yeah. Absolutely. I think it's like this very classic just supply chain problem that like all registries effectively have, and the the, you know, there are different approaches to this problem.

Like, you can take the Apple approach, like vet things and like have us like an army of of of both audio system and review teams to do this. Then you effectively build an app store. Right?

That's that's one approach to this type of problem. It it kind of works in in a in a very set certain set of ways.

Speaker 3

and PyPI, and they all have inherently these, like these, these supply chain attack problems, right? Yep. Yep.

Totally. Quick time check. I think we're going to go for another like twenty, twenty five minutes.

Is that okay for you guys? Okay. Awesome.

Cool. I wanted to double click, take the time. So I I'm going to sort of, we previewed a little bit on like the future coming stuff.

So I want to leave the future coming stuff to the end, like registry the the the stateless servers, the remote servers, all the other stuff. But I wanted to double click a little bit more on the launch, the the the core servers that are part of the official repo. And some of them are special ones, like the like the ones we already talked about.

So let me just pull them up already. You so for example, you mentioned memory. You mentioned sequential thinking.

And I think I really, really encourage people should look at these, what I call special servers. Like, they're they're not normal servers in the in the sense that they they wrap some API, and it's just easier to interact with those than to work with the APIs. And so I I'll I'll highlight the the memory one first just because, like, I think there are there are a few memory startups, but actually, don't need them if you just use this one.

It's also like 300 lines of code. It's super simple. And, and obviously then if you need to scale it up, you should probably do some, some more battle tested thing.

But if you're interest if you're just introducing memory, I think this is a really good implementation. I don't know if there's like special stories that you want to highlight with with some of these.

Speaker 4

I think no. I don't I don't think there's anything particularly special. I think a lot of these not all of them, but a lot of them originated from that hackathon that I mentioned before where folks got excited about the idea of MCPE.

People internally inside Anthropic who wanted to have memory or, like, wanted to play around with the idea could quickly now prototype something using MCPE in a way that wasn't possible before. Someone who's not, like, you know, you don't have to become the end to end expert. You don't have access to this, like, private, you know, proprietary code base.

You can just now extend Cloud with this memory capability. So that's how a lot of these came about. And then also just thinking about, like, you know, what is the breadth of functionality that we want to demonstrate at launch.

Speaker 3

Totally. And I think that is partially why it made your launch successful because you launch with a sufficiently spanning set of here's the examples, and then people just copy paste and expand from there. I would also highlight the file system SCP server only because it has edit file.

And basically I think people were very excited when we had Eric, who built your sort of SweetBench projects on the podcast as well. And people were very interested in this sort of like file editing tool that is basically open source via this project. And and I think a lot of there there's some libraries out there.

There's some other implementations that, like, you know, this is core IP for them, and now it's just you guys just put it out there. It's just really cool.

Speaker 4

Yeah. I I really I mean, honestly, the file system server is one of my favorites, because I I think it really speaks to, like, a limitation that I was feeling. You know, I was, like, hacking on a a game as a side project, and really wanted to connect it to like Cloud and artifacts, like David talked about before.

Just giving Cloud or like, suddenly being able to give Cloud the ability to like, actually interact with my local machine was huge. I really love that sort of capability.

Speaker 5

I mean, this is this is the classic example of, this server directly comes out of the frustration that both created MCP and that server. That was a very clear direct path of, like, here's the frustration we're currently having to MCP plus the server that that we both have felt and Justin in particular. So in that regard, it's close to our heart as like, as as a spiritual inception point of the protocol itself.

Speaker 3

Okay. And then I think the last thing I will highlight is sequential thinking, which we already talked about. This is, this gives like branching, which is kind of interesting.

It gives us sort of a, you know, I need more, need more space to write, which is kind of super interesting. And I think one thing I also wanted to clarify was Anthropic this week, well, this past week, put out a new engineering blog with a think tool. And there's a bit of community confusion how sequential thinking overlaps with the think tool.

I just think that it's just different teams doing similar things in different parts of the world, but I just wanted to let you guys clarify.

Speaker 4

I mean, there's there's definitely, like sorry. Let me start over. As far as I know, there is no common lineage between these two things, but I think it just speaks to a larger thing that, like, there are many different strategies to get an LLM to be more thoughtful or holistically less or whatever it might be, to to kind of, like, express these different dimensions more fully or more reliably.

And I don't know. I I think this is, like, the power of MCP, that, like, you could build different servers that do these different things, or have, like, you know, different prompts or different tools within the same server that do these different things, and, like, ask the LLM to apply a particular, like, mental model or thinking pattern or whatever for for different results. So I I don't know.

I I think I I I guess don't know that there will be, like, one ideal prescribed method, LLM, here's how you should think all the time. I think there will be different applications for different purposes, and MCP allows you to do that. Right?

Speaker 5

Yeah. I think in addition, there's also like the the way that the approach to this, that some of the MCP servers, they're filling a gap that existed at the, at a point in time that the, the models later catch up to by themselves, because, you know, they have. There's training time and preparation, least research that goes into making models do things natively, so to speak.

And you can get a lot of mileage of, of something as simple as a sequential thinking tool like Cerner. It's not simple, but it's like it's doable within a few days, which is definitely not the time frame you look at adding thinking to a model natively.

Speaker 4

I guess to come up with an example on the fly, like I could imagine building, you know, if I'm working with a model that is not particularly reliable, or, you know, maybe someone considers the generation today overall not particularly reliable. Like, I could imagine building an MCP server that gives me, like, best of three, you know, like, three times to answer a query with the model and then picks the best one or something like that. Like, you could get this kind of, like, recursive and composable LLM interactions with MC Awesome.

Okay. Cool. I I think so, you know, we sorry.

Thanks for indulging on on, like, some of the the the service. We just wanted to double click on these. I think we have time for just, like, future roadmap things.

Speaker 3

about this recent update moving from stateful to stateless servers. You guys picked SSE as your sort of launch protocol, transport transport, and obviously, transport is pluggable. The behind the scenes of that, like, was it Jared Palmer's tweet that caused it, or were you already working on it?

Speaker 4

No. We have we have GitHub discussions going back, like, know, in in public going back months, really, talking about this this dilemma and the the trade offs involved. You know, we do believe that, like, the future of AI applications and ecosystem and agents, all of these things, I think, will be stateful or will be more in the direction of faithfulness.

So we we had a lot of I I think, honestly, this is one of the most contentious topics we've discussed as, like, the core MCP team and, like, gone through multiple iterations on and back and forth. But ultimately just came back to this conclusion that, like, if the future looks more stateful, we we don't wanna move away from that paradigm completely. Now we have to balance that against it's it's been operationally complex, or, like, it's hard to deploy an MCP server if it requires this, like, long lived persistent connection.

This this is the original, like, SSE transport design is basically, you deploy an MCP server, and then a client can come in and connect. And then, basically, you should remain connected indefinitely, which is that's like a tall order for anyone operating at scale. It's just like not a a deployment or operational model you really want to support.

So we were trying to think, like, how can we balance the belief that statefulness is important with sort of simpler operation and maintenance and stuff like that. And the new sort of we're we're calling it the streamable HTTP transport that we came up with still has SSE in there, but it has a more, like, a gradual approach, where, like, a server could be just plain HTTP, like, you know, have one endpoint that you send HTTP posts to, and then, you know, get a result back. But then you can, like, gradually enhance it with, like, okay, now I want the results to be streaming, or, like, now I want the server to be able to issue its own requests.

And as long as the server and client both support the ability to, like, resume sessions, like, you know, to disconnect and come back later and pick up where you left off, then you get kind of the best of both worlds, where it could still be the stateful interaction and and stateful server, but allows you to, like, horizontally scale more easily or, like, deal with spotty network connections or or whatever the case may be.

Speaker 2

Yep. Yeah. And you had a, as you mentioned, session ID.

How do you think about auth going forward? For some MCPs, I just need to, like, paste my API key in the command. Is there kinda like a yeah.

What do you see as the future of that? Is there gonna be, like, the dot m equivalent of like, for MCPs or yeah.

Speaker 5

in the current draft of the next supervision of the protocol. It's mostly at the moment focused on user to server authorization using like OAuth 2.1 or like, you know, a subset of of modern OAuth basically.

And I think that has that has seems to be working well for people and people building on top of that. And that will solve a lot of these issues because you don't really wanna have people bring API keys, and particularly when you have, like, when you think about a world which which I truly believe will happen, where the majority of servers will be remote servers, so you need some sort of authorization with that server. Now for the local case, because the authorization is defined on on the transport layer, and so requires framing, which means like headers effectively.

This does not work in SAN IO. But in SAN IO, you run locally and you can do whatever you want anyway, and you might just pop open a browser and deal with it that way. And then there's also like some thinking that is somewhat con somewhat not fully decided on about, you know, even using HTTP locally, which would solve that problem.

And Justin is laughing because he's very much in favor of this where I'm very much not in favor of this. So there there's some debate going on there, but like authorization, think, you know, we have something. I think it's like it's as everything in the protocol is like fairly minimal, like trying to solve a very practical problem and tries to be very minimal in what it, what it does.

And then we go from there and add based on practical pain points people have on top of the protocol and don't try to over design it from the beginning. So we'll just see how far our current aspect gets us, basically. Yeah.

I I want to build on that a bit, because I think that last point is really important.

Speaker 4

you know, when when you're designing a protocol, you have to be extremely conservative. Because if you make a mistake, you basically can't undo that mistake or you break backwards compatibility. So it's far easier to, like, only accept things or, like, only add things that you're extremely certain about and let people kinda do ad hoc extensions until maybe there's more, like, consensus that something is worth worth adding to the core thing and, like, supporting indefinitely going forward.

And and with auth in particular, and this example of API keys, think this is really illustrative because we we did a lot of this sort of, like, brainstorming, like, okay. If I have this use case, could I accomplish that with this version of auth? And I think the answer is yes for, like, the API key example.

Like, you can have an MCP server, which is an OAuth authorization server, and at the, like, slash authorize web page, it just has, like, a text box for you to put in an API key. Like, that would be a totally valid OAuth flow for the MCP server. Maybe not the most ergonomic, or not what people would ideally like, but because it does fit into the existing paradigm and is possible today, we're worried about, like, adding too much other too many other options that both then clients and servers need to think about.

Speaker 2

Yep. Have you guys gave scopes? Any thought?

If it's like we had a episode with Dhrmesh Shah yesterday from agent AI and HubSpot, and he was given the example of, like, email. Like, he has all of his emails and, you know, he would like to have more granular scope for, hey. You can only access these types of emails or, like, emails to this person.

Today, most scopes are, like, REST driven, basically. It's like what endpoints can you access. Do you see a feature in which the model kinda acts as like the scope layer, so to speak, and kind of dynamically limits the data that passes through?

Speaker 5

I think the, I think there is a potential need for scopes. That goes back to like, we have discussions around this, but what we are currently trying to do is just like rooting them in very specific example and like have a good set of like, these are actual problems that you cannot currently solve with the current implementations. And that's like the bar we set to add to the protocol.

And I think that, and then, you know, based on that prototype using that extensibility that we have at the moment where every structure that's returned is extensible, and then build on top of that and prove that you, that this will have a good user experience. And then we put it at the protocol. That's usually been for the most part the case.

It's actually been not quite the case for authorization in general. That's been a bit more top down. But I I can totally see why people want it.

It's just a matter of like showcasing the the specific examples and like what the what potential solutions would be so that we don't accidentally run into this, like, yeah, the soft, the, into this approach where like, it sounds roughly right. And we put it in and it was actually not really right. And now you're back to this, like adding is easy, removing is hard in protocol design.

And so we're just a little bit, we're just a little bit, you know, careful around this, so to speak.

Speaker 4

description, it makes sense. I would love to have a very practical end to end user example of this and where falls apart the current implementation, then we can have a discussion. There's a little bit of weariness from my perspective too.

Maybe not with scope specifically. I think those could make a lot of sense as long as we have the the use cases in mind. But I do think, you know, in in thinking about composability and logical groupings of things, I think it does often make sense for MCP servers to be quite small things, and if you want lots of collections of functionality for those to be discrete servers that you kinda combine together as a user or in the application layer, and so some of the pushback about auth has been like, well, if I need to authorize with like 20 different things on the other side, how can I do that?

It's like, well, maybe maybe that's not what the server should be doing, and maybe it shouldn't be connecting to 20 different things. Maybe those should be separate servers that combine up somehow. Awesome.

Lots of discussion there. Where should people go if they wanna get involved in these debates?

Speaker 5

repo discussion page? That is, that's a good start. I want to caveat it slightly that on the internet, it's very easy to, to be part of a discussion and having an opinion without them actually doing the work.

And so I think there, we were both Chancellor and I are very old school open source people that like, it's, it's merit driven in the sense that if you have done work and if you, if you showcase this with like practical examples and work in SDKs towards the ex extensions you want to make, you have a good chance that it gets in. If you're just there to have an opinion, you're very likely just being ignored to be frank, because there's a limit to how much discussion points we can read.

Speaker 4

doing the most work. We're trying to figure out, you know, that honestly, like, I think, even compared to open source work I've done in the past, just the sheer volume of conversation and notifications around MCP stuff is extraordinary, which is great on one hand. But I think we do need to figure out more scalable structures to both engage with the community, but also keep, you know, conversations high signal and, like, effective.

And I guess there's something else to be aware of related to David's point is, like, I do believe that a big part of running a successful open source project is sometimes making hard decisions that people will be unhappy about. And you kind of just have to, like, you know, learn to to, like, figure out, like, what what are the things what what is, like, the actual vision for the project? Where where do we, the kind of, like, maintainers or, like, shepherds or whatever believes that it's going?

And just commit to that, and like understand that some people won't agree with that vision, and that's totally fine. But then maybe maybe there will be other projects that are more in line with what they're hoping for or something like that.

Speaker 5

Yeah. I think that's a very interesting and quite good point. It's like there, like a, like a project like MCP is an entry into like a, into a solution space of, of the problems in that, in the general, space.

And it's, and it's one of many entries in a way. And, and if you do not like the direction, you know, that we and, like, people that are very close, you know, in in the development of the protocol choose, then and then we cannot then then there's always place for more. Right?

That's the beauty of OpenSearch. Right? The good old, you know, forget approach.

Speaker 4

We we do always wanna hear the feedback, and we need to make it scalable, I think, but also just the recognition that, like, sometimes we we will be going with our intuition about what is the right choice. There might be a lot of of, like, flame in the open source discussions about it, but that's just the nature of projects like this sometimes.

Speaker 3

Yeah. Fortunately, neither of you are new to that. I would also say there's a lot of history to be drawn from Facebook open source.

Right? And both of you if you weren't directly involved, you'd know everyone who was directly involved. I would say React, we we eventually started because I was obviously deeply part of the React ecosystem.

We eventually started working groups where it was it was open. It was conducted on in discussions, and each member of the working group had a voice that represented a significant part of the community, but also showed that they did the work. They they they had a significance.

They weren't, like, sort of drive by people with with no skin in the game. And I think that was helpful for a while. I'm not sure it's like a actively managed thing because of React's own issues with the multi company situation they're they're in.

The other thing that actually is to me is more interesting is GraphQL because MCP where like, currently has the gri the hype that GraphQL had, and I lived through that one. And eventually, you know, Facebook donated GraphQL to an open source foundation. And I think that there's a question of, like, do we want to do that?

There's trade offs, right? It's not a clear yes or no. I would say that most people are happy with Anthropic and you guys, obviously, because you created it, you guys being the stewards.

But at some point, at some scale, you're going to hit some ceiling there where you're like, okay, like, you know, this is owned by one company and, you know, eventually people want to like, know, the truly open standard is, is a nonprofit and there's multiple stakeholders. There's a good governance process, all of which is governed by like Linux foundation, Apache, whatever. So I want to ask like any thoughts there?

I personally would say it's too early.

Speaker 5

You know, like what are your thoughts? Yeah, I think governance in general is a super interesting problem in the open source space. I think there are two things.

On one hand side, we really, we really, really want to make this and have this being an open standard and open protocol and open project with, you know, participation from everyone who wants to be partake. And I think that actually is working quite well so far. If you look at the poll request, if you look, for example, a lot of the inputs on the streamable HTTP thing came from, from companies like, you know, Shopify and others that had discussed and worked on this and, and brought proposals to the table.

And I think that works really well. The thing that we are a bit wary about is any type of official standardization, particularly you're going through an actual standardization body or any type of like foundational work that starts having processes as part of this to, to stay, to, to, to stay somewhat fair to, to everyone that can act process that in, in a fast moving field like AI can be detrimental to the project. And that's what we worry about.

We worry about processes that are slowing us down. And so we're trying to find this nice middle ground of like, how can we have participation that we let that we luckily do have from everyone work towards everyone's, you know, everyone's like like problems that they have potentially with the governance model and figure the right path forward out without accidentally without accidentally slowing down the project. I think that's what we're trying to do.

Speaker 4

we are very genuine in our desire to have this be an open project. And, like, yes, it's it was initiated by Anthropic, and and David and I work at Anthropic. But, like, we don't want it to be seen as, like, this is Anthropic's protocol.

I think it's very important for for the whole ecosystem that this is something that, like, any AI lab could have a stake in or contribute to or or make use of. But, yeah, it's it's just it's it's balancing that against avoiding death by committee, basically. And so, like, I think there are a lot of models for doing this successfully in open source.

I think most of the delicacies are really around, like, you know, sort of corporate sponsorship and and corporate say, and we'll kind of navigate that as it comes up. But we absolutely want this to be like a community project.

Speaker 5

That that being said, I wanna highlight this, that at the moment, as we speak, there's plenty of people at non Anthropic employees who have commit access and admin access to the repositories right there. You know, some of the people from Pydantic have commit access to the Python SDK because they did a lot of really good work there. And we had a lot of contributions from block and others to the, to the specifications.

SDKs like the Java SDK and the C sharp SDKs, they're completely done by different companies like the C sharp one is done by Microsoft. It's a very recent addition last week and they do everything there. They have full admin rights over that.

The same goes with JetBench doing the Kotlin one and Spring AI doing the Java one. So it is actually, if you really look at it, it's it's already like a multi company big project with everyone. It was a lot of people beyond just us to having commit access to and rights to the to the project as is.

Yeah.

Speaker 2

Awesome, guys. This was great. Just to wrap up, do you have any MCP server wish list?

What do you want people to build you, that is not there yet? Oh, client.

Speaker 5

Client or server. I want some I want more sampling clients. That's all I want.

I want cool I want someone to build a client that is sampling and as someone else that builds me a server that does summarize my Reddit threads or summarize like, I'm an old Eve Online player. Summarize what happened in Eve Online in the last week for me. I wish that would someone would do that.

But for that, I want a sampling client. I want this model independent. Not because I wanted to use any other model than Cloud, because Cloud is by far the best, but I just wanna I just wanna have a sampling client for the sake of having a sampling client.

Just a little bit you.

Speaker 4

more clients that support the full breadth of the spec would be amazing. I mean, we we kinda design things so that things could be adopted incrementally anyway, but, like, still, it would be great if, you know, all these primitives that we've put this this thought into do get manifested somehow. That would be amazing.

But going back to, you know, some of my initial motivation for working on MCP and, like, excitement about the file system server, you know, like, I I like hacking on a game as a side project, so I would really love to have an MCP client and or MCP server with, like, the Godot engine, which I was using to build the game, and just, like, really easy, like, AI integration with that or, like, have, you know, Claude run and play test my game or something. Like, Claude plays Pokemon. Who knows?

Hey, at least you have them already built have Claude already built your three d model from now on with Blender. Right? But yeah.

I mean, honestly, even like shader code and stuff already, was just like, this is not my wheelhouse. It's amazing what you can do when you enable builders. Yeah.

We're we're actually working on Cloudplace Pokemon hackathon with David Hershey.

Speaker 3

So Oh, to

Speaker 2

bring MCP into that. I had no plans, but if he wants to, he can. Awesome, guys.

Well, thank you for the time. Yeah. And keep up the good work.

Thank you both. This was fun. Yeah.

Thank you. I really appreciate it. Cheers.

Shared via Hopper