{"id":189932,"date":"2025-06-16T21:05:07","date_gmt":"2025-06-16T21:05:07","guid":{"rendered":"https:\/\/www.europesays.com\/uk\/189932\/"},"modified":"2025-06-16T21:05:07","modified_gmt":"2025-06-16T21:05:07","slug":"agents-apis-and-the-next-layer-of-the-internet","status":"publish","type":"post","link":"https:\/\/www.europesays.com\/uk\/189932\/","title":{"rendered":"Agents, APIs, and the Next Layer of the Internet"},"content":{"rendered":"<p>Part I:  for Thought<\/p>\n<p class=\"wp-block-paragraph\">Every so often a simple idea rewires everything. The shipping container didn\u2019t just optimise logistics; it flattened the globe, collapsed time zones, and rewrote the economics of trade. In its geometric austerity was a quiet revolution: standardisation.<\/p>\n<p class=\"wp-block-paragraph\">Similarly, HTML and HTTP didn\u2019t invent information exchange \u2014 any more than the shipping crate invented trade \u2014 but by imposing order on chaos, they transformed it.<\/p>\n<p class=\"wp-block-paragraph\">RESTful APIs, for their part, standardised software-web interaction, and made services programmable. The web became not just browsable, but buildable \u2014 a foundation for automation, orchestration, and integration, and entire industries sprang up around that idea.<\/p>\n<p class=\"wp-block-paragraph\">Now, the \u2018agentic web\u2019\u2014where AI agents call APIs and other AI agents\u2014needs its own standards.<\/p>\n<p class=\"wp-block-paragraph\">This isn\u2019t just an extension of the last era \u2014 it\u2019s a shift in how computation works.<\/p>\n<p class=\"wp-block-paragraph\">Two promising approaches have emerged for agent-web interaction: Model Context Protocol (MCP) and Invoke Network.<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong><a href=\"https:\/\/modelcontextprotocol.io\/introduction\" target=\"_blank\" rel=\"noopener\">Model Context Protocol<\/a> (MCP):<\/strong> a communication standard designed for chaining reasoning across multiple agents, tools, and models.<\/li>\n<li class=\"wp-block-list-item\"><strong><a href=\"https:\/\/invoke.network\/\" target=\"_blank\" rel=\"noopener\">Invoke Network<\/a>:<\/strong> a lightweight, open-source framework that lets models interact directly with real-world APIs at inference time \u2014 without needing orchestration, backends, or agent registries.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">This essay compares these two paradigms \u2014 MCP and Invoke Network (disclosure: I\u2019m a contributor to Invoke Network) \u2014 and argues that agentic interoperability will require not just schemas and standards, but simplicity, statelessness, and runtime discovery.<\/p>\n<p>Part II: Model Context Protocol: Agents That Speak the Same Language<\/p>\n<p>Origins: From Local Tools to Shared Language<\/p>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/modelcontextprotocol.io\/introduction\" target=\"_blank\" rel=\"noopener\"><strong>Model Context Protocol<\/strong> <\/a>(MCP) emerged from a simple, powerful idea: that large language models (LLMs) should be able to talk to each other \u2014 and that their interactions should be modular, composable, and inspectable.<\/p>\n<p class=\"wp-block-paragraph\">It began as part of the AI Engineer community on GitHub and Twitter \u2014 a loose but vibrant collective of developers exploring what happens when models gain agency. Early projects like OpenAgents and LangChain had already introduced the idea of tools: giving LLMs controlled access to functions. But MCP pushed the idea further.<\/p>\n<p class=\"wp-block-paragraph\">Rather than hardcoding tools into individual agents, MCP proposed a standard \u2014 a shared grammar \u2014 that would allow any agent to dynamically expose capabilities and receive structured, interpretable requests. The goal: make agents composable and interoperable. Not just one agent using a tool, but agents calling agents, tools calling tools, and reasoning passed like a baton between models.<\/p>\n<p class=\"wp-block-paragraph\">Introduced by Anthropic in November 2024, MCP is not a product. It\u2019s a protocol. A social contract for how agents communicate \u2014 much like HTTP was for web pages.<\/p>\n<p>How MCP Works<\/p>\n<p class=\"wp-block-paragraph\">At its core, MCP is a JSON-based interface description and call\/response format. Each agent (or tool, or model) advertises its capabilities by returning a set of structured functions \u2014 similar to an OpenAPI schema, but tailored for LLM interpretation.<\/p>\n<p class=\"wp-block-paragraph\">A typical MCP exchange has three parts:<\/p>\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>Listing Capabilities<\/strong><strong><br \/><\/strong> An agent exposes a set of callable functions \u2014 their names, parameters, return types, and descriptions. These can be real tools (like get_weather) or delegations to other agents (like research_topic).<\/li>\n<li class=\"wp-block-list-item\"><strong>Issuing a Call<\/strong><strong><br \/><\/strong> Another model (or the user) sends a request to that agent using the defined format. MCP keeps the payloads structured and minimal, avoiding ambiguous natural language where it matters.<\/li>\n<li class=\"wp-block-list-item\"><strong>Handling the Response<\/strong><strong><br \/><\/strong> The receiving agent executes the function (or prompts another model), and returns a structured response, often annotated with rationale or follow-up context.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">This sounds abstract, but it\u2019s surprisingly elegant in practice. Let\u2019s look at a real example \u2014 and use it to draw out the strengths and limits of MCP.<\/p>\n<p>A Worked MCP Example: Agents That Call Each Other<\/p>\n<p class=\"wp-block-paragraph\">Let\u2019s imagine two agents:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">WeatherAgent: Provides weather data.<\/li>\n<li class=\"wp-block-list-item\">TripPlannerAgent: Plans a day trip, and uses the WeatherAgent via MCP to check the weather.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">In this scenario, TripPlannerAgent has no hardcoded knowledge of how to fetch weather. It simply asks another agent that speaks MCP.<\/p>\n<p>Step 1: WeatherAgent describes its capabilities<\/p>\n<p>{<br \/>\n\u00a0\u00a0&#8220;functions&#8221;: [<br \/>\n\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;get_weather&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;description&#8221;: &#8220;Returns the current weather in a given city&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;parameters&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;object&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;properties&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;city&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;string&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;description&#8221;: &#8220;The city to get weather for&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;required&#8221;: [&#8220;city&#8221;]<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0]<br \/>\n}<\/p>\n<p class=\"wp-block-paragraph\">This JSON schema is MCP-compliant. Any other agent can introspect this and know exactly how to invoke the weather function.<\/p>\n<p>Step 2: TripPlannerAgent makes a structured call<\/p>\n<p>{<br \/>\n\u00a0\u00a0&#8220;call&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;function&#8221;: &#8220;get_weather&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;arguments&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;city&#8221;: &#8220;San Francisco&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0}<br \/>\n}<\/p>\n<p class=\"wp-block-paragraph\">The agent doesn\u2019t need to know how the weather is fetched \u2014 it just needs to follow the protocol.<\/p>\n<p>Step 3: WeatherAgent responds with structured data<\/p>\n<p>{<br \/>\n\u00a0\u00a0&#8220;response&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;result&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;temperature&#8221;: &#8220;21\u00b0C&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;condition&#8221;: &#8220;Sunny&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;explanation&#8221;: &#8220;It\u2019s currently sunny and 21\u00b0C in San Francisco.&#8221;<br \/>\n\u00a0\u00a0}<br \/>\n}<\/p>\n<p class=\"wp-block-paragraph\">TripPlannerAgent can now use that result in its own logic \u2014 maybe suggesting a picnic or a museum day based on the weather.<\/p>\n<p>What This Enables<\/p>\n<p class=\"wp-block-paragraph\">This tiny example demonstrates several powerful capabilities:<\/p>\n<p class=\"wp-block-paragraph\">\u2705 <strong>Agent Composition<\/strong> \u2014 agents can call other agents as tools<br \/>\u2705 <strong>Inspectability<\/strong> \u2014 capabilities are defined in schemas, not prose<br \/>\u2705 <strong>Reusability<\/strong> \u2014 agents can serve many clients<br \/>\u2705 <strong>LLM-native design<\/strong> \u2014 responses are still interpretable by models<\/p>\n<p class=\"wp-block-paragraph\">But MCP has its limits \u2014 which we\u2019ll explore next.<\/p>\n<p><strong>When to Use MCP (And When Not To)<\/strong><\/p>\n<p class=\"wp-block-paragraph\">Model Context Protocol (MCP) is elegant in its simplicity: a protocol for describing tools and delegating tasks between agents. But, like all protocols, it shines in some contexts and struggles in others.<\/p>\n<p>\u2705 Where MCP Excels<\/p>\n<p class=\"wp-block-paragraph\"><strong>1. LLM-to-LLM Communication<\/strong><strong><br \/><\/strong> MCP was designed from the ground up to support inter-agent calls. If you\u2019re building a network of AI agents that can call, query, or consult one another, MCP is ideal. Each agent becomes a service endpoint, with a schema that other agents can reason about.<\/p>\n<p class=\"wp-block-paragraph\"><strong>2. Decentralised, Model-Agnostic Systems<\/strong><strong><br \/><\/strong> Because MCP is just a schema convention, it doesn\u2019t depend on any particular runtime, framework, or model. You can use OpenAI, Claude, or your local LLM \u2014 if it can interpret JSON, it can speak MCP.<\/p>\n<p class=\"wp-block-paragraph\"><strong>3. Multi-Hop Planning<\/strong><strong><br \/><\/strong> MCP is especially powerful when combined with a planner agent. Imagine a central planner that orchestrates workflows by dynamically selecting agents based on their schemas. This enables highly modular, dynamic systems.<\/p>\n<p>\u274c Where MCP Struggles<\/p>\n<p class=\"wp-block-paragraph\"><strong>1. No Real \u201cRuntime\u201d<\/strong><strong><br \/><\/strong>MCP is a protocol \u2014 not a framework. It defines the interface, but not the execution engine. That means you need to implement your own glue logic for:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Auth<\/li>\n<li class=\"wp-block-list-item\">Input\/output mapping<\/li>\n<li class=\"wp-block-list-item\">Routing<\/li>\n<li class=\"wp-block-list-item\">Error handling<\/li>\n<li class=\"wp-block-list-item\">Retries<\/li>\n<li class=\"wp-block-list-item\">Rate limits<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">MCP doesn\u2019t manage that for you \u2014 it\u2019s just the language agents use to communicate.<\/p>\n<p class=\"wp-block-paragraph\"><strong>2. Requires Structured Thinking<\/strong><strong><br \/><\/strong>LLMs love ambiguity. MCP doesn\u2019t. It forces developers (and models) to be explicit: here\u2019s a tool, here\u2019s its schema, here\u2019s how to call it. That\u2019s great for clarity \u2014 but requires more upfront thinking than, say, slapping .tools = [\u2026] on an OpenAI agent.<\/p>\n<p class=\"wp-block-paragraph\"><strong>3. Tool Discovery and Versioning<\/strong><\/p>\n<p class=\"wp-block-paragraph\">MCP is still early \u2014 there\u2019s no central registry of agents, no real system for versioning or namespacing. In practice, developers often pass around schemas manually or hardcode references.<\/p>\n<tr>\n<td><strong>Use Case<\/strong><\/td>\n<td><strong>Should You Use MCP?<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Agent calling another agent<\/td>\n<td>\u2705 Perfect fit<\/td>\n<\/tr>\n<tr>\n<td>Building a large, modular agent network<\/td>\n<td>\u2705 Ideal<\/td>\n<\/tr>\n<tr>\n<td>Call a REST API or webhook<\/td>\n<td>\u274c Overkill<\/td>\n<\/tr>\n<tr>\n<td>Need built-in routing, OAuth, retries<\/td>\n<td>\u274c Use a framework<\/td>\n<\/tr>\n<tr>\n<td>Tool discovery at inference time<\/td>\n<td>\u274c Use Invoke Network<\/td>\n<\/tr>\n<p class=\"wp-block-paragraph\">And this is where <strong>Invoke Network<\/strong> enters \u2014 not as a competitor, but as a counterpart. If MCP is like <strong>WebSockets<\/strong> for agents (peer-to-peer, structured, low-level), then Invoke is like <strong>HTTP<\/strong> \u2014 a fire-and-forget API surface for LLMs.<\/p>\n<p>Part III: Invoke Network<\/p>\n<p>HTTP for LLMs<\/p>\n<p class=\"wp-block-paragraph\">While MCP emerged to coordinate agents, <strong><a href=\"https:\/\/invoke.network\" data-type=\"link\" data-id=\"https:\/\/invoke.network\" target=\"_blank\" rel=\"noopener\">Invoke<\/a> <\/strong>was born from a simpler, sharper pain: the chasm between LLMs and the real world.<\/p>\n<p class=\"wp-block-paragraph\">Language models can reason, write, and plan \u2014 but without tools, they\u2019re sealed in a sandbox. Invoke began with a question:<\/p>\n<p class=\"wp-block-paragraph\">What if any LLM could discover and use any real-world API, just like a human browses the web?<\/p>\n<p class=\"wp-block-paragraph\">Existing approaches \u2014 MCP, OpenAI functions, AgentOps \u2014 while powerful, were either bloated, too rigid, or fragile for the vision. Tool use felt like duct-taping SDKs to natural language. Models had to be pre-wired to scattered tools, each with their own quirks.<\/p>\n<p class=\"wp-block-paragraph\">Invoke approached it differently:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">One tool, many APIs<\/li>\n<li class=\"wp-block-list-item\">One standard, infinite interfaces<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">Just define your endpoint \u2014 method, URL, parameters, auth, example \u2014 in clean, readable JSON. That\u2019s it. Now <strong>any model<\/strong> (GPT, Claude, Mistral) can call it naturally, securely, and repeatedly.<\/p>\n<p>\u2699\ufe0f How Invoke Works<\/p>\n<p class=\"wp-block-paragraph\">At its core, <strong>Invoke is a tool router built for LLMs<\/strong>. It\u2019s like openapi.json, but leaner \u2014 built for inference, not engineering.<\/p>\n<p class=\"wp-block-paragraph\">Here\u2019s how it works:<\/p>\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">You write a structured tool definition (agents.json) with:\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">method, url, auth, parameters, and an example.<\/li>\n<\/ul>\n<\/li>\n<li class=\"wp-block-list-item\">Invoke parses that into a callable function for any model that supports tool use.<\/li>\n<li class=\"wp-block-list-item\">The model sees the tool, decides when to use it, and fills out the parameters.<\/li>\n<li class=\"wp-block-list-item\">Invoke handles the rest \u2014 auth, formatting, execution \u2014 and returns the result.<\/li>\n<\/ol>\n<p class=\"wp-block-paragraph\">No custom wrappers. No chains. No scaffolding. Just one clean interface. And if something goes wrong?<strong> <\/strong>We don\u2019t preprogram retries. We let the model decide. Turns out: it\u2019s pretty good at it.<\/p>\n<p class=\"wp-block-paragraph\">Here\u2019s a real example:<\/p>\n<p>{<br \/>\n  &#8220;agent&#8221;: &#8220;openweathermap&#8221;,<br \/>\n  &#8220;label&#8221;: &#8220;\ud83c\udf24 OpenWeatherMap API&#8221;,<br \/>\n  &#8220;base_url&#8221;: &#8220;https:\/\/api.openweathermap.org&#8221;,<br \/>\n  &#8220;auth&#8221;: {<br \/>\n    &#8220;type&#8221;: &#8220;query&#8221;,<br \/>\n    &#8220;format&#8221;: &#8220;appid&#8221;,<br \/>\n    &#8220;code&#8221;: &#8220;i&#8221;<br \/>\n  },<br \/>\n  &#8220;endpoints&#8221;: [<br \/>\n    {<br \/>\n      &#8220;name&#8221;: &#8220;current_weather&#8221;,<br \/>\n      &#8220;label&#8221;: &#8220;\u2600\ufe0f Current Weather Data&#8221;,<br \/>\n      &#8220;description&#8221;: &#8220;Retrieve current weather data for a specific city.&#8221;,<br \/>\n      &#8220;method&#8221;: &#8220;GET&#8221;,<br \/>\n      &#8220;path&#8221;: &#8220;\/data\/2.5\/weather&#8221;,<br \/>\n      &#8220;query_params&#8221;: {<br \/>\n        &#8220;q&#8221;: &#8220;City name to retrieve weather for (string, required).&#8221;<br \/>\n      },<br \/>\n      &#8220;examples&#8221;: [<br \/>\n        {<br \/>\n          &#8220;url&#8221;: &#8220;https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=London&#8221;<br \/>\n        }<br \/>\n      ]<br \/>\n    }<br \/>\n  ]<br \/>\n}<\/p>\n<p class=\"wp-block-paragraph\">From the model\u2019s point of view, this is one use of the \u2018Invoke\u2019 tool, not a new one for each added endpoint. Not a custom plugin. Just one discoverable interface. This means the model can discover APIs on the fly, just like humans browse the web. To use the shipping container analogy, if MCP allows highly coordinated workflows with tightly orchestrated infrastructure between select ports, Invoke enables you to send any package, anywhere, any time.<\/p>\n<p class=\"wp-block-paragraph\">Now we can use:<\/p>\n<p># 1. Install dependencies:<br \/>\n# pip install langchain-openai invoke-agent<\/p>\n<p>from langchain_openai import ChatOpenAI<br \/>\nfrom invoke_agent.agent import InvokeAgent<\/p>\n<p># 2. Initialize your LLM and Invoke agent<br \/>\nllm = ChatOpenAI(model=&#8221;gpt-4.1&#8243;)<br \/>\ninvoke = InvokeAgent(llm, agents=[&#8220;path-or-url\/agents.json&#8221;])<\/p>\n<p># 3. Chat loop\u2014any natural-language query that matches your agents.json<br \/>\nuser_input = input(&#8220;\ud83d\udcdd You: &#8220;).strip()<br \/>\nresponse = invoke.chat(user_input)<\/p>\n<p>print(&#8220;\ud83e\udd16 Agent:&#8221;, response)<\/p>\n<p class=\"wp-block-paragraph\">In under a minute, your model is fetching live data\u2014no wrappers, no boilerplate.<\/p>\n<p class=\"wp-block-paragraph\">You\u2019ll say: \u201cCheck weather in London.\u201d<br \/>The agent will go to openweathermap.org\/agents.json, read the file, and just\u2026 do it.<\/p>\n<p class=\"wp-block-paragraph\">Just as robots.txt let crawlers safely navigate the web, agents.json lets LLMs safely act on it. Invoke turns the web into an LLM-readable ecosystem of APIs. Much like HTML allowed humans to discover websites and services on the fly, Invoke allows LLMs to discover APIs at inference time.<\/p>\n<p class=\"wp-block-paragraph\">Want to see this in action? Check out the Invoke repo\u2019s <a href=\"https:\/\/github.com\/mercury0100\/invoke\/tree\/master\/notebooks\" target=\"_blank\" rel=\"noopener\">example notebooks<\/a>, see <a href=\"https:\/\/invoke.network\/create-agents-txt\" target=\"_blank\" rel=\"noopener\">how to define<\/a> an agents.json, wire up auth, and call APIs from any LLM in under a minute. (Full \u201cnetwork\u201d-style discovery is on the roadmap once adoption reaches critical mass.)<\/p>\n<p>When to Use Invoke: Strengths and Tradeoffs<\/p>\n<p class=\"wp-block-paragraph\">Invoke shines brightest in the real world.<\/p>\n<p class=\"wp-block-paragraph\">Its core premise \u2014 that a model can call any API, securely and accurately, from a single schema \u2014 unlocks a staggering range of use cases: calendar assistants, email triage, weather bots, automation interfaces, customer support agents, enterprise copilots, even full-stack LLM-powered workflows. And it works out of the box with OpenAI, Claude, LangChain, and more.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Strengths:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>Simplicity.<\/strong> Define a tool once, use it everywhere. You don\u2019t need a dozen Python wrappers or agent configs.<\/li>\n<li class=\"wp-block-list-item\"><strong>Model-agnostic.<\/strong> Invoke works with any model that supports structured tool use \u2014 including open-source LLMs.<\/li>\n<li class=\"wp-block-list-item\"><strong>Open &amp; extensible.<\/strong> Serve tools from local config, hosted registries, or future public endpoints (example.com\/agents.json).<\/li>\n<li class=\"wp-block-list-item\"><strong>Composable.<\/strong> Models can reason over tool metadata, inspect auth requirements, and even decide when to explore new capabilities.<\/li>\n<li class=\"wp-block-list-item\"><strong>Developer-focused.<\/strong> Unlike agentic frameworks that require complex orchestration, Invoke slots neatly into existing stacks \u2014 frontends, backends, workflows, RAG pipelines, and more.<\/li>\n<li class=\"wp-block-list-item\"><strong>Context-efficient<\/strong>. API configurations are defined in the execution chain and do not use precious context.<\/li>\n<li class=\"wp-block-list-item\"><strong>Discoverable at runtime.<\/strong> Invoke connections are not hard-wired at compile and are not limited at setup.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">But like any system, Invoke has tradeoffs.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Limitations:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>No central memory or state.<\/strong> It doesn\u2019t manage long-term plans, context windows, or recursive subtasks. That\u2019s left to you \u2014 or to other frameworks layered on top.<\/li>\n<li class=\"wp-block-list-item\"><strong>No retries, timeouts, or multi-step workflows baked in.<\/strong> Invoke trusts the model to handle partial failure. In practice, GPT-4 and Claude do this remarkably well \u2014 but it\u2019s still a philosophical choice.<\/li>\n<li class=\"wp-block-list-item\"><strong>Statelessness.<\/strong> Tools are evaluated per invocation. While this keeps things clean and atomic, it may not suit complex, multi-step agents without additional scaffolding.<\/li>\n<\/ul>\n<p>MCP vs. Invoke: Two Roads Into the Agentic Web<\/p>\n<p class=\"wp-block-paragraph\">Both MCP and Invoke aim to bring LLMs into contact with the real world \u2014 but they approach it from opposite directions.<\/p>\n<tr>\n<td><strong>Feature<\/strong><\/td>\n<td><strong>Model Context Protocol (MCP)<\/strong><\/td>\n<td><strong>Invoke<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Core Goal<\/strong><\/td>\n<td>Agent-to-agent coordination via message passing<\/td>\n<td>LLM-to-API integration via structured tool use<\/td>\n<\/tr>\n<tr>\n<td><strong>Design Origin<\/strong><\/td>\n<td>Comparable to protocols like WebSockets and JSON-RPC<\/td>\n<td>Inspired by REST\/HTTP and OpenAPI<\/td>\n<\/tr>\n<tr>\n<td><strong>Primary Use Case<\/strong><\/td>\n<td>Composing multi-agent workflows and message pipelines<\/td>\n<td>Connecting LLMs directly to real-world APIs<\/td>\n<\/tr>\n<tr>\n<td><strong>Communication Style<\/strong><\/td>\n<td>Stateful sessions and messages exchanged between agents<\/td>\n<td>Stateless, schema-driven tool calls<\/td>\n<\/tr>\n<tr>\n<td><strong>Tool Discovery<\/strong><\/td>\n<td>Agents must be pre-wired with capabilities<\/td>\n<td>Tool schemas can be discovered at runtime (agents.json)<\/td>\n<\/tr>\n<tr>\n<td><strong>Error Handling<\/strong><\/td>\n<td>Delegated to agent frameworks or orchestration layers<\/td>\n<td>Handled by the model, optionally guided by context<\/td>\n<\/tr>\n<tr>\n<td><strong>Dependencies<\/strong><\/td>\n<td>Requires MCP-compatible infra and agents<\/td>\n<td>Just needs model + JSON tool definition<\/td>\n<\/tr>\n<tr>\n<td><strong>Composable With<\/strong><\/td>\n<td>AutoGPT-style ecosystems, custom agent graphs<\/td>\n<td>LangChain, OpenAI tool use, custom scripts<\/td>\n<\/tr>\n<tr>\n<td><strong>Strengths<\/strong><\/td>\n<td>Fine-grained control, extensible routing, agent memory<\/td>\n<td>Simplicity, developer ergonomics, real-world compatibility<\/td>\n<\/tr>\n<tr>\n<td><strong>Limitations<\/strong><\/td>\n<td>Heavier to implement, requires full stack, context bloat, tool overload<\/td>\n<td>Stateless by design, no agent memory or recursion<\/td>\n<\/tr>\n<p>Conclusion: The Shape of the Agentic Web<\/p>\n<p class=\"wp-block-paragraph\">We are witnessing the emergence of a new layer of the internet \u2014 one defined not by human clicks or software calls, but by autonomous agents that reason, plan, and act.<\/p>\n<p class=\"wp-block-paragraph\">If the early web was built on human-readable pages (HTML) and programmatic endpoints (REST), the agentic web demands a new foundation: standards and frameworks that let models interact with the world as fluidly as humans once did with hyperlinks.<\/p>\n<p class=\"wp-block-paragraph\">Two approaches \u2014 <strong>Model Context Protocol<\/strong> and <strong>Invoke<\/strong> \u2014 offer different visions of how this interaction should work:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>MCP<\/strong> is ideal when you need coordination between multiple agents, session state, or recursive reasoning \u2014 the WebSockets of the agentic web.<\/li>\n<li class=\"wp-block-list-item\"><strong>Invoke<\/strong> is ideal when you need lightweight, one-shot tool use with real-world APIs \u2014 the HTTP of the agentic web.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">Neither is the solution. Much like the early internet needed both TCP and HTTP, the agentic layer will be pluralistic. But history suggests something: <strong>the tools that win are the ones that are easiest to adopt<\/strong>.<\/p>\n<p class=\"wp-block-paragraph\">Invoke is already proving useful to developers who just want to connect an LLM to the services they already use. MCP is laying the groundwork for more complex agent systems. Together, they\u2019re sketching the contours of what\u2019s to come.<\/p>\n<p class=\"wp-block-paragraph\">The agentic web won\u2019t be built in a single day, and it won\u2019t be built by a single company. But one thing is clear: the future of the web is no longer just human-readable or machine-readable \u2014 it\u2019s model-readable.<\/p>\n<p class=\"wp-block-paragraph\"><strong>About the author<\/strong><br \/>I\u2019m a lead researcher at Commonwealth Bank AI Labs and contributor to Invoke Network, an open-source agentic-web framework. Feedback and forks welcome: <a href=\"https:\/\/github.com\/mercury0100\/invoke\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/mercury0100\/invoke<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Part I: for Thought Every so often a simple idea rewires everything. The shipping container didn\u2019t just optimise&hellip;\n","protected":false},"author":2,"featured_media":189933,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3161],"tags":[39225,17506,77831,3082,6773,77832,53,16,15],"class_list":{"0":"post-189932","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-internet","8":"tag-agentic-ai","9":"tag-ai-agent","10":"tag-deep-dives","11":"tag-internet","12":"tag-mcp","13":"tag-product-management","14":"tag-technology","15":"tag-uk","16":"tag-united-kingdom"},"share_on_mastodon":{"url":"https:\/\/pubeurope.com\/@uk\/114695079458817335","error":""},"_links":{"self":[{"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/posts\/189932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/comments?post=189932"}],"version-history":[{"count":0,"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/posts\/189932\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/media\/189933"}],"wp:attachment":[{"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/media?parent=189932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/categories?post=189932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.europesays.com\/uk\/wp-json\/wp\/v2\/tags?post=189932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}