{"id":2755,"date":"2025-11-06T21:24:46","date_gmt":"2025-11-06T21:24:46","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/11\/06\/dynamic-mcps-with-docker-stop-hardcoding-your-agents-world\/"},"modified":"2025-11-06T21:24:46","modified_gmt":"2025-11-06T21:24:46","slug":"dynamic-mcps-with-docker-stop-hardcoding-your-agents-world","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/11\/06\/dynamic-mcps-with-docker-stop-hardcoding-your-agents-world\/","title":{"rendered":"Dynamic MCPs with Docker: Stop Hardcoding Your Agents\u2019 World"},"content":{"rendered":"<p>The MCP protocol is almost one year old and during that time, developers have built thousands of new MCP servers. Thinking back to MCP demos from six months ago, most developers were using one or two local MCP servers, each contributing just a handful of tools. Six months later and we have access to thousands of tools, and a new set of issues.<\/p>\n<ol class=\"wp-block-list\">\n<li>Which MCP servers do we trust?<\/li>\n<li>How do we avoid filling our context with tool definitions that we won\u2019t end up needing?<\/li>\n<li>How do agents discover, configure, and use tools <em>efficiently <\/em>and <em>autonomously<\/em>?<\/li>\n<\/ol>\n<p>With the latest features in <a href=\"https:\/\/docs.docker.com\/ai\/mcp-catalog-and-toolkit\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">Docker MCP Gateway<\/a>, including <strong>Smart Search<\/strong> and <strong>Tool Composition<\/strong>, we\u2019re shifting from <em>\u201cWhat do I need to configure?\u201d<\/em> to <em>\u201cWhat can I empower agents to do?\u201d\u00a0<\/em><\/p>\n<p>This week, Anthropic also released a post about <a href=\"https:\/\/www.anthropic.com\/engineering\/code-execution-with-mcp\" rel=\"nofollow noopener\" target=\"_blank\">building more efficient agents<\/a>, and they have called out many of the same issues that we\u2019ll be discussing in this post. Now that we\u2019ve made progress towards <em>having<\/em> tools, we can start to think more about effectively <em>using<\/em> tools.<\/p>\n<p>With dynamic MCPs, agents don\u2019t just search for or add tools, but write code to compose new ones within a secure sandbox, improving both tool efficiency and token usage.<\/p>\n<h2 class=\"wp-block-heading\">Enabling Agents to Find, Add, and Configure MCPs Dynamically with Smart Search\u00a0<\/h2>\n<p>If you think about how we configure MCPs today, the process is not particularly <em>agentic<\/em>. Typically, we leave the agent interface entirely, do some old-school configuration hacking (usually editing a JSON file of some kind), and then restart our agent session to check if the MCPs have become available. As the number of MCP servers grows, is this going to work?<\/p>\n<p>So what prevents our agents from doing more to help us <a href=\"https:\/\/hub.docker.com\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">discover useful MCP servers<\/a>?<\/p>\n<p>We think that <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">Docker\u2019s OSS gateway<\/a> can help here. As the gateway manages the interface between an agent and any of the MCP servers in the gateway\u2019s catalog, there is an opportunity to mediate that relationship in new ways.\u00a0<\/p>\n<p>Out of the box, the gateway ships with a default catalog, the <a href=\"https:\/\/hub.docker.com\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">Docker MCP Catalog<\/a>,\u00a0 including over 270 curated servers and of course the ability to curate your own private catalogs (e.g. using servers from the <a href=\"https:\/\/github.com\/modelcontextprotocol\/registry\" rel=\"nofollow noopener\" target=\"_blank\">community registry<\/a>). And because it runs on Docker, you can pull and run any of them with minimal setup. That directly tackles the first friction point: discovery of trusted MCP servers.\u00a0<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1655497806  fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"482\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/Dynamic-tools-fig1.png\" class=\"attachment-full size-full\" alt=\"Dynamic tools fig1\" title=\"- Dynamic tools fig1\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 1: The Docker MCP Gateway now includes mcp-find and mcp-add, new Smart Search features that let agents discover and connect to trusted MCP servers in the Docker MCP Catalog, enabling secure, dynamic tool usage.<\/p>\n<p>However, the real key to dynamic MCPs is a small but crucial adjustment to the agent\u2019s MCP session. The gateway provides a small set of <em>primordial<\/em> tools that the agent uses to search the catalog and to either add or remove servers from the current session. Just as in the <a href=\"https:\/\/www.anthropic.com\/engineering\/code-execution-with-mcp\" rel=\"nofollow noopener\" target=\"_blank\">post from Anthropic<\/a>, which suggests a <em>search_tools<\/em> tool, we have added new tools to help the agent manage their MCP servers.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>mcp-find: <\/strong>Find MCP servers in the current catalog by name or description. Return matching servers with their details.<\/li>\n<li><strong>mcp-add: <\/strong>Add a new MCP server to the session. The server must exist in the catalog.<\/li>\n<\/ul>\n<p>With this small tweak, the agent can now help us negotiate a new MCP session. To make this a little more concrete, we\u2019ll show an agent connected to the gateway asking for the DuckDuckGo MCP and then performing a search.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1107639522  fetchpriority=\"high\" decoding=\"async\" width=\"700\" height=\"480\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/Dynamic-tools-fig2.gif\" class=\"attachment-full size-full\" alt=\"Dynamic tools fig2\" title=\"- Dynamic tools fig2\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 2: A demo of using mcp-find and mcp-add to connect to the DuckDuckGo MCP server and run a search<\/p>\n<h3 class=\"wp-block-heading\">Configuring MCP Servers with Agent-Led Workflows<\/h3>\n<p>In the example above, we started by connecting our agent to the catalog of MCPs (see docker mcp client connect \u2013help for options). The agent then adds a new MCP server to the current session. To be clear, the duckduckgo MCP server is quite simple. Since it does not require any configuration, all we needed to do was search the catalog, pull the image from a trusted registry, and spin up the MCP server in the local docker engine.<\/p>\n<p>However, some MCP servers will require <em>inputs<\/em> before they can start up. For example, remote MCP servers might require that the user go through an OAuth flow. In the next example, the gateway responds by requesting that we authorize this new MCP server. Now that MCP supports <a href=\"https:\/\/modelcontextprotocol.io\/specification\/draft\/client\/elicitation\" rel=\"nofollow noopener\" target=\"_blank\">elicitations<\/a>, and frameworks like <a href=\"https:\/\/mcpui.dev\/\" rel=\"nofollow noopener\" target=\"_blank\">mcp-ui<\/a> allow MCPs to render UI elements into the chat, we have begun to optimize these flows based on client-side capabilities.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=7665921  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/Dynamic-tools-fig3.gif\"  decoding=\"async\" width=\"708\" height=\"480\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"optimole-lazy-only  attachment-full size-full\" alt=\"Dynamic tools fig3\" title=\"- Dynamic tools fig3\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 3: Using mcp-find and mcp-add to connect to the Notion MCP server, including an OAuth flow<\/p>\n<h3 class=\"wp-block-heading\">Avoid An Avalanche of Tools: Dynamic Tool Selection<\/h3>\n<p>In the <a href=\"https:\/\/www.anthropic.com\/engineering\/code-execution-with-mcp\" rel=\"nofollow noopener\" target=\"_blank\">building more efficient agents<\/a> post, the authors highlight two ways that tools currently make token consumption less efficient.<\/p>\n<ol class=\"wp-block-list\">\n<li>Tool definitions in the context window<\/li>\n<li>Intermediate tool results<\/li>\n<\/ol>\n<p>The result is the same in both cases. Too many tokens are not being sent to the model. It takes surprisingly few tools for the context window to accumulate hundreds of thousands of tokens of nothing but tool definition.<\/p>\n<p>Again, this is something we can improve. In the <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">mcp gateway<\/a> project, we\u2019ve started distinguishing between tools that are <em>available<\/em> to a find tool, and ones that are added to the context window. Just as we\u2019re giving agents tools for server selection, we can give them new ways to select tools.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=827612907  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/Dynamic-tools-fig4.png\"  decoding=\"async\" width=\"1000\" height=\"461\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"attachment-full size-full\" alt=\"Dynamic tools fig4\" title=\"- Dynamic tools fig4\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 4: Dynamic Tools in action: Tools can now be actively selected, avoiding the need to load all available tools into every LLM request.<\/p>\n<p>The idea is conceptually simple. We are providing an option to allow agents to add servers that do not automatically put their tools into the context window. With today\u2019s agents, this means adding MCP servers that don\u2019t return tool definitions in <em>tools\/list<\/em> requests, but still make them available to <em>find tool<\/em> calls. This is easy to do because we have an MCP gateway to mediate <em>tools\/list requests<\/em> and to inject new task-oriented <em>find<\/em> tools. New <em>primordial<\/em> tools like <em>mcp-exec<\/em> and <em>mcp-find<\/em> provide agents with new ways to discover and use MCP server tools.<\/p>\n<p>Once we start to think about tool selection differently, it opens up a range of possibilities.<\/p>\n<h2 class=\"wp-block-heading\">Using Tools in a new way: From Tool Calls to Tool Composition with code-mode<\/h2>\n<p>The idea of \u201ccode mode\u201d has been getting a lot of attention since CloudFlare posted about <a href=\"https:\/\/blog.cloudflare.com\/code-mode\/\" rel=\"nofollow noopener\" target=\"_blank\">a better way to use Tools<\/a> several weeks ago. The idea actually dates back to a paper \u201c<a href=\"https:\/\/machinelearning.apple.com\/research\/codeact\" rel=\"nofollow noopener\" target=\"_blank\">CodeAct: Your LLM Agent Acts Better when Generating Code<\/a>\u201c, which proposed that LLMs could improve agent-oriented tasks by first consolidating agent actions into code. The recent post from Anthropic also frames code mode as a way to improve agent efficiency by reducing the number of tool definitions and tool outputs in the context window.<\/p>\n<p>We\u2019re really excited by this idea. By making it possible for agents to \u201ccode\u201d directly against MCP tool interfaces, we can provide agents with \u201ccode-mode\u201d tools that use the tools in our current MCP catalog in new ways. By combining <em>mcp-find<\/em> with <em>code-mode,<\/em> the agent can still access a large, and dynamic, set of <em>available<\/em> tools while putting just one or two new tools into the context window. Our current code-mode tool writes javascript and takes available MCP servers as parameters.<\/p>\n<p><strong>code-mode:<\/strong><strong><em> <\/em><\/strong>Create a JavaScript-enabled tool that can call tools from any of the servers listed in the servers parameter.<\/p>\n<p>However, this is still code written by an agent. If we\u2019re going to run this code, we\u2019re going to want it to run in a sandbox. Our MCP servers are already running in Docker containers, and the code mode sandbox is no different. In fact, it\u2019s an ideal case because this container only needs access to other MCP servers! The permissions for accessing external systems are already managed at the MCP layer.<\/p>\n<p>This approach offers three key benefits:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Secure by Design:<\/strong> The agent stays fully contained within a sandbox. We do not give up any of the benefits of sandboxing. The code-mode tool uses only containerized MCP servers selected from the catalog.<\/li>\n<li><strong>Token and Tool Efficiency:<\/strong> The tools it uses do not have to be sent to the model on every request. On subsequent turns, the model just needs to know about one new <em>code-mode<\/em> tool. In practice, this can result in hundreds of thousands of fewer tokens being sent to the model on each turn.<\/li>\n<li><strong>State persistence:<\/strong><strong><em> <\/em><\/strong>Using volumes to manage how state is managed across tool calls, and to track intermediate results that need not, or even <em>should<\/em> not be sent to the model.<\/li>\n<\/ul>\n<p>A popular illustration of this pattern is building a code mode tool using the GitHubofficial MCP servers. The GitHub server happens to ship with a large number of tools, so code-mode will have a dramatic impact. In the example below, we\u2019re prompting an agent to create a new code-mode tool out of the Github-official and markdownify MCP servers.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=306413893  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/Dynamic-tools-fig5.gif\"  decoding=\"async\" width=\"656\" height=\"480\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"optimole-lazy-only  attachment-full size-full\" alt=\"Dynamic tools fig5\" title=\"- Dynamic tools fig5\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 5: Using the MCP code-mode to write code to call tools from the GitHub Official and Markdownify MCP servers<\/p>\n<p>The combination of Smart Search and Tool Composition unlocks dynamic, secure use of MCPs. Agents can now go beyond simply finding or adding tools; they can write code to compose new tools, and run them safely in a secure sandbox.\u00a0<\/p>\n<p>The result: faster tool discovery, lower token usage, fewer manual steps, and more focused time for developers.<\/p>\n<div class=\"wp-block-ponyo-table style__default\">\n<table class=\"responsive-table\">\n<tbody class=\"wp-block-ponyo-table-body\">\n<tr class=\"wp-block-ponyo-table-header\">\n<th class=\"wp-block-ponyo-cell\" data-responsive-table-heading=\"Workflow\">\n<p><strong>Workflow<\/strong><\/p>\n<\/th>\n<th class=\"wp-block-ponyo-cell\" data-responsive-table-heading=\"Before: Static MCP setup\">\n<p><strong>Before: Static MCP setup<\/strong><\/p>\n<\/th>\n<th class=\"wp-block-ponyo-cell\" data-responsive-table-heading=\"After: Dynamic MCPs via Docker MCP Gateway\">\n<p><strong>After: Dynamic MCPs via Docker MCP Gateway<\/strong><\/p>\n<\/th>\n<th class=\"wp-block-ponyo-cell\" data-responsive-table-heading=\"Impact\">\n<p>Impact<\/p>\n<\/th>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Tool discovery<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Manually browse the MCP servers<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>mcp-find searches a Docker MCP Catalog (230+ servers) by name\/description<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Faster discovery<\/p>\n<\/td>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Adding tools<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Enable the MCP servers manually<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>mcp-add pulls only the servers an agent needs into the current session<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Zero manual config; just-in-time tooling<\/p>\n<\/td>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Authentication<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Configure the MCP servers ahead of time<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Prompt user to complete OAuth when a remote server requires it<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Some clients starting to support things like <a href=\"https:\/\/modelcontextprotocol.io\/specification\/draft\/client\/elicitation\" rel=\"nofollow noopener\" target=\"_blank\">mcp <em>elicitations<\/em><\/a> and UX like <a href=\"https:\/\/mcpui.dev\/\" rel=\"nofollow noopener\" target=\"_blank\">mcp-ui<\/a> for smoother onboarding flows<\/p>\n<\/td>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Tool composition<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Agent generated tool calls; tool definitions are sent to the model<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>With <em>code-mode , <\/em>agents write code that use\u00a0 multiple MCP tools<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Multi-tool workflows and unified outputs<\/p>\n<\/td>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Context size<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Load lots of unused tool definitions<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Keep only the tools actually required for the task<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Lower token usage and latency<\/p>\n<\/td>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Future-proofing<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Static integrations<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Dynamic, composable tools with sandboxed scripting<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Ready for evolving agent behaviors and catalogs<\/p>\n<\/td>\n<\/tr>\n<tr class=\"wp-block-ponyo-table-row\">\n<td class=\"wp-block-ponyo-cell\">\n<p>Developer involvement<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Constant context switching and config hacking<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Agents self-serve: discover, authorize, and orchestrate tools<\/p>\n<\/td>\n<td class=\"wp-block-ponyo-cell\">\n<p>Fewer manual steps; better focus time<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"has-xs-font-size\">Table 1: Summary of Benefits from Docker\u2019s Smart Search and Tool Composition for Dynamic MCPs\u00a0<\/p>\n<h2 class=\"wp-block-heading\">From Docker to Your Editor: Running dynamic MCP tools with cagent and ACP<\/h2>\n<p>Another new component of the Docker platform is <a href=\"https:\/\/github.com\/docker\/cagent\" rel=\"nofollow noopener\" target=\"_blank\">cagent<\/a>, our open source agent builder &amp; runtime, which provides a simple way to build and distribute <a href=\"https:\/\/www.docker.com\/blog\/how-to-build-a-multi-agent-system\/\">new agents<\/a>. The latest version of cagent now supports the <a href=\"https:\/\/agentclientprotocol.com\/overview\/introduction\" rel=\"nofollow noopener\" target=\"_blank\">Agent Client Protocol<\/a> which allows developers to add custom agents to ACP-enabled editors like neovim, or <a href=\"https:\/\/zed.dev\/\" rel=\"nofollow noopener\" target=\"_blank\">Zed<\/a>, and then to share these agents by pushing them to or pulling them from <a href=\"https:\/\/www.docker.com\/blog\/cagent-build-and-distribute-ai-agents-and-workflows\/\">Docker Hub<\/a>.<\/p>\n<p>This means that we can now build <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/blob\/main\/examples\/cagent\/agent.yaml\" rel=\"nofollow noopener\" target=\"_blank\">agents<\/a> that know how to use features like smart search tools or code mode, and then embed these agents in ACP-powered editors using cagent. Here\u2019s an example agent, running in neovim, that helps us discover new tools relevant to whatever project we are currently editing.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=714514503  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/Dynamic-tools-fig6.gif\"  decoding=\"async\" width=\"688\" height=\"480\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"optimole-lazy-only  attachment-full size-full\" alt=\"Dynamic tools fig6\" title=\"- Dynamic tools fig6\" \/>\n    <\/div>\n<p class=\"has-xs-font-size\">Figure 6: Running Dynamic MCPs in Neovim via Agent Client Protocol and a custom agent built with cagent, preconfigured with MCP server knowledge<\/p>\n<p>In their section on state persistence and skills, the folks at Anthropic also hint at the idea that dynamic tools and code mode execution bring us closer to a world where over time, agents accumulate code and tools that work well together. Our current <em>code-mode<\/em> tool does not yet save the code it writes to the project but we\u2019ll be working on this <a href=\"https:\/\/github.com\/docker\/mcp-gateway\" rel=\"nofollow noopener\" target=\"_blank\">here<\/a>.<\/p>\n<p>For the neovim example above, we have used ACP support in the <a href=\"https:\/\/github.com\/olimorris\/codecompanion.nvim\" rel=\"nofollow noopener\" target=\"_blank\">code companion<\/a> plugin. Also, please check out the cagent adapter in <a href=\"https:\/\/github.com\/slimslenderslacks\/nvim-cagent\" rel=\"nofollow noopener\" target=\"_blank\">this repo.<\/a> For Zed, see their doc on <a href=\"https:\/\/zed.dev\/docs\/ai\/external-agents#add-custom-agents\" rel=\"nofollow noopener\" target=\"_blank\">adding custom agents<\/a> and of course, try out <strong>cagent acp agent.yaml<\/strong> with your own custom <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/blob\/main\/examples\/cagent\/agent.yaml\" rel=\"nofollow noopener\" target=\"_blank\">agent.yaml<\/a> file.<\/p>\n<h2 class=\"wp-block-heading\">Getting Started with Dynamic MCPs Using Smart Search and Tool Composition<\/h2>\n<p>Dynamic tools are now available in the <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">mcp gateway<\/a> project.\u00a0 Unless you are running the gateway with an explicit set of features (using the existing <strong>\u2013servers<\/strong> flag), then these tools are available to your agent by default. The dynamic tools feature can also be disabled using <strong>docker mcp feature disable dynamic-tools<\/strong>. This is a feature that we\u2019re actively developing so please try it out and let us know what you think by opening an <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/issues\" rel=\"nofollow noopener\" target=\"_blank\">issue<\/a>, or starting a <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/discussions\" rel=\"nofollow noopener\" target=\"_blank\">discussion<\/a> in our repo.\u00a0<\/p>\n<p>Get started by connecting your favorite client to the MCP gateway using <strong>docker mcp client connect<\/strong>, or by adding a connection using the \u201cClients\u201d tab in the Docker Desktop <a href=\"https:\/\/open.docker.com\/dashboard\/mcp\" rel=\"nofollow noopener\" target=\"_blank\">MCP Toolkit panel<\/a>.<\/p>\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n<p>The Docker MCP Toolkit combines a trusted runtime (the docker engine), with catalogs of MCP servers. Beginning with <a href=\"https:\/\/docs.docker.com\/desktop\/release-notes\/\" rel=\"nofollow noopener\" target=\"_blank\">Docker Desktop 4.50<\/a>, we are now extending the <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">mcp gateway<\/a> interface with new tools like <em>mcp-find<\/em>, <em>mcp-add<\/em>, and <em>code-mode<\/em>, to enable agents to discover MCP servers more effectively, and even to use these servers in new ways.<\/p>\n<p>Whether it\u2019s searching or pulling from a trusted catalog, initiating an OAuth flow, or scripting multi-tool workflows in a sandboxed runtime, agents can now do more on their own. And that takes us a big step closer to the agentic future we\u2019ve been promised!\u00a0<\/p>\n<p>Got feedback? Open an <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/issues\" rel=\"nofollow noopener\" target=\"_blank\">issue<\/a> or start a <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/discussions\" rel=\"nofollow noopener\" target=\"_blank\">discussion<\/a> in our repo.<\/p>\n<h3 class=\"wp-block-heading\">Learn more<\/h3>\n<ul class=\"wp-block-list\">\n<li>Explore the MCP Gateway Project: Visit the <a href=\"https:\/\/github.com\/docker\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">GitHub repository<\/a> for code, examples, and contribution guidelines.<\/li>\n<li>Dive into Smart Search and Tool Composition: Read the <a href=\"https:\/\/docs.docker.com\/ai\/mcp-catalog-and-toolkit\/dynamic-mcp\/\" rel=\"nofollow noopener\" target=\"_blank\">full documentation<\/a> to understand how these features enable dynamic, efficient agent workflows.<\/li>\n<li>Learn more about <a href=\"https:\/\/www.docker.com\/products\/mcp-catalog-and-toolkit\/\">Docker\u2019s MCP Solutions<\/a>.\u00a0<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>The MCP protocol is almost one year old and during that time, developers have built thousands of new MCP servers. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2756,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=2755"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2755\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/2756"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=2755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=2755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=2755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}