<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alejandro Ponce de León</title>
    <description>The latest articles on DEV Community by Alejandro Ponce de León (@aponcedeleonch).</description>
    <link>https://dev.to/aponcedeleonch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2422993%2F224b6352-bc81-4a2a-9412-5814b6f3bc78.jpg</url>
      <title>DEV Community: Alejandro Ponce de León</title>
      <link>https://dev.to/aponcedeleonch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aponcedeleonch"/>
    <language>en</language>
    <item>
      <title>Cut token waste across your entire team with the MCP Optimizer</title>
      <dc:creator>Alejandro Ponce de León</dc:creator>
      <pubDate>Wed, 11 Mar 2026 17:14:51 +0000</pubDate>
      <link>https://dev.to/stacklok/cut-token-waste-across-your-entire-team-with-the-mcp-optimizer-7e</link>
      <guid>https://dev.to/stacklok/cut-token-waste-across-your-entire-team-with-the-mcp-optimizer-7e</guid>
      <description>&lt;p&gt;You already cut your own token bill. Now imagine doing that for every member on your team, without them lifting a finger.&lt;/p&gt;

&lt;p&gt;Here's what you'll learn in this post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why per-person Optimizer setups don't scale, and what to do instead
&lt;/li&gt;
&lt;li&gt;How Stacklok's &lt;a href="https://stacklok.com/blog/introducing-virtual-mcp-server-unified-gateway-for-multi-mcp-workflows/" rel="noopener noreferrer"&gt;Virtual MCP Server (vMCP)&lt;/a&gt; delivers team-wide token savings from a single deployment
&lt;/li&gt;
&lt;li&gt;How AI agents benefit automatically, with no per-agent configuration required
&lt;/li&gt;
&lt;li&gt;How to deploy the Optimizer in Kubernetes in two steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8v141h8mzwkhsxd2b5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8v141h8mzwkhsxd2b5x.png" alt=" " width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The MCP Optimizer dynamically finds and exposes the right tools to clients only when needed, via a unified vMCP Gateway endpoint.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem at scale
&lt;/h2&gt;

&lt;p&gt;If you read &lt;a href="https://stacklok.com/blog/cut-token-waste-from-your-ai-workflow-with-the-toolhive-mcp-optimizer/" rel="noopener noreferrer"&gt;Cut Token Waste from Your AI Workflow with the ToolHive MCP Optimizer&lt;/a&gt;, you know the local Optimizer works great — download it, run it, and watch your token bill drop by 60-85% per request in our benchmarks. But individual setups aren't enterprise setups. You can't ask every team member to install an embedding model, tune search parameters, and keep the whole thing running alongside their other tools. And you can't ask your platform team to verify that each of those setups is configured correctly and stays that way. You need a solution that everyone benefits from the moment they connect.&lt;/p&gt;

&lt;p&gt;Configuration drift is the first headache. One person runs a different embedding model than another. Someone tweaked the hybrid search ratio three weeks ago and forgot to tell anyone. Someone else doesn't even know the Optimizer needs configuring and wonders why their token bill is 3x everyone else's. Meanwhile, each machine burns CPU and memory running its own embedding inference — resources that could be doing literally anything else.&lt;/p&gt;

&lt;p&gt;AI agents amplify both the problem and the payoff. Agents that fan out across multiple MCP servers stuff the full tool catalog into the context window on every invocation. When an agent connects to five or six MCP servers, that catalog grows quickly. The token bill climbs, inference slows, and the LLM starts picking the wrong tools because it's drowning in descriptions.&lt;/p&gt;

&lt;p&gt;Multiply that by hundreds of agent runs a day. Without a centralized Optimizer, you'd have to manually wire it up for each agent and each server combination.&lt;/p&gt;

&lt;p&gt;What you actually want — for users and AI agents alike — is to configure it once, in one place, and have everyone benefit automatically. That's exactly what Stacklok now delivers through the vMCP and Operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Optimizer works
&lt;/h2&gt;

&lt;p&gt;The core idea is simple. Instead of sending your AI agent the full list of every tool from every MCP server (which can easily run to hundreds of descriptions), the Optimizer collapses them into two meta-tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your agent receives a prompt&lt;/strong&gt; that requires tool use.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It calls &lt;code&gt;find_tool&lt;/code&gt;&lt;/strong&gt; with a natural language description of what it needs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Optimizer runs hybrid search&lt;/strong&gt; (semantic and keyword) against all registered tools.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only the relevant tools come back&lt;/strong&gt; — typically 8 instead of 200+.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent calls &lt;code&gt;call_tool&lt;/code&gt;&lt;/strong&gt; to invoke the one it needs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your agent never sees the full tool catalog. It discovers tools on demand, pays only for the descriptions it actually needs, and the LLM stays focused on fewer, more relevant options.&lt;/p&gt;

&lt;p&gt;For a deeper dive into the mechanics and benchmarks, see &lt;a href="https://stacklok.com/blog/cut-token-waste-from-your-ai-workflow-with-the-toolhive-mcp-optimizer/" rel="noopener noreferrer"&gt;the original Optimizer blog post&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  All the power of vMCP, now with cost savings
&lt;/h2&gt;

&lt;p&gt;If you're already running Stacklok in Kubernetes, you're likely using the vMCP— a unified gateway that aggregates multiple MCP servers behind a single endpoint. vMCP gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified gateway&lt;/strong&gt;. One endpoint for all your MCP servers. Onboarding a new team member means sharing one URL, not configuring five connections.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication and authorization&lt;/strong&gt;. Centralized auth for incoming clients (OIDC, anonymous, etc.) and outgoing connections, so you can enforce access policies without modifying each MCP server.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregation and conflict resolution&lt;/strong&gt;. Automatic prefixing, priority ordering, or manual overrides when tool names collide across MCP servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Optimizer adds one more layer on top:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token optimization&lt;/strong&gt;. Every tool behind the gateway gets indexed. Clients see only &lt;code&gt;find_tool&lt;/code&gt; and &lt;code&gt;call_tool&lt;/code&gt; instead of the full catalog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The savings are real. The &lt;a href="https://stacklok.com/blog/cut-token-waste-from-your-ai-workflow-with-the-toolhive-mcp-optimizer/" rel="noopener noreferrer"&gt;original Optimizer blog post&lt;/a&gt; walks through the benchmarks in detail, showing 60-85% token reductions per request. In a &lt;a href="https://stacklok.com/blog/stackloks-mcp-optimizer-vs-anthropics-tool-search-tool-a-head-to-head-comparison/" rel="noopener noreferrer"&gt;head-to-head comparison with Anthropic's tool search tool&lt;/a&gt;, the Optimizer matched or exceeded a first-party solution.&lt;/p&gt;

&lt;p&gt;Token savings aren't the only benefit. Fewer tool descriptions means less noise for the LLM to wade through, which means better tool selection and fewer hallucinated tool calls. You're saving tokens and getting better results.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to deploy the Optimizer in Kubernetes
&lt;/h2&gt;

&lt;p&gt;The Kubernetes setup is deliberately minimal. You need two things: an &lt;code&gt;EmbeddingServer&lt;/code&gt; and a reference to it from your &lt;code&gt;VirtualMCPServer&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Deploy an EmbeddingServer
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;EmbeddingServer&lt;/code&gt; Custom Resource Definition (CRD) manages a shared embedding model for the whole team. With sensible defaults baked in, the minimal configuration is just this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;toolhive.stacklok.dev/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;EmbeddingServer&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;optimizer-embedding&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The operator defaults to &lt;code&gt;BAAI/bge-small-en-v1.5&lt;/code&gt; as the model and runs the &lt;a href="https://github.com/huggingface/text-embeddings-inference" rel="noopener noreferrer"&gt;HuggingFace Text Embeddings Inference&lt;/a&gt; server. You can increase the replica count via &lt;code&gt;spec.replicas&lt;/code&gt; to match your team's throughput needs. One shared instance serves every vMCP in the namespace. For all available configuration options, see the &lt;a href="https://docs.stacklok.com/toolhive/guides-vmcp/optimizer" rel="noopener noreferrer"&gt;Optimizer docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Reference it from your VirtualMCPServer
&lt;/h3&gt;

&lt;p&gt;Add a single field to your existing &lt;code&gt;VirtualMCPServer&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;embeddingServerRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;optimizer-embedding&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the only change. When the operator sees &lt;code&gt;embeddingServerRef&lt;/code&gt; without an explicit &lt;code&gt;optimizer&lt;/code&gt; config block, it auto-populates the optimizer with sensible defaults and resolves the embedding server URL automatically. You don't need any manual wiring.&lt;/p&gt;

&lt;p&gt;For finer control — tuning search parameters, timeouts, and more — see the &lt;a href="https://docs.stacklok.com/toolhive/guides-vmcp/optimizer" rel="noopener noreferrer"&gt;Optimizer docs&lt;/a&gt; for the full reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost savings add up
&lt;/h2&gt;

&lt;p&gt;The per-request savings are compelling on their own, but they compound quickly when you multiply across a team: every team member, every request, every day. At typical API pricing, those savings add up fast. Fewer tokens also means faster responses and lower latency for your organization.&lt;/p&gt;

&lt;p&gt;Beyond the raw savings, the Kubernetes approach gives you operational advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitOps-friendly&lt;/strong&gt;. &lt;code&gt;EmbeddingServer&lt;/code&gt; and &lt;code&gt;VirtualMCPServer&lt;/code&gt; configurations live in Git, get reviewed in PRs, and deploy through your existing CI/CD pipeline. That gives you full change history and rollback for compliance requirements.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One shared embedding server&lt;/strong&gt;. Instead of every machine running a local embedding model, one instance serves the whole team. Less resource waste, consistent behavior.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero end-user setup&lt;/strong&gt;. Users point their MCP client at the vMCP endpoint. The Optimizer is transparent; they don't need to know it's there.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized security boundary&lt;/strong&gt;. All tool discovery flows through one place, giving you a single point to audit and control which tools your team can access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;Here's everything referenced above and some extra resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Optimizer docs:&lt;/strong&gt; &lt;a href="https://docs.stacklok.com/toolhive/guides-vmcp/optimizer" rel="noopener noreferrer"&gt;Configuration guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vMCP blog post:&lt;/strong&gt; &lt;a href="https://stacklok.com/blog/introducing-virtual-mcp-server-unified-gateway-for-multi-mcp-workflows/" rel="noopener noreferrer"&gt;Introducing Virtual MCP Server: a unified gateway for multi-MCP workflows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vMCP docs:&lt;/strong&gt; &lt;a href="https://docs.stacklok.com/toolhive/guides-vmcp" rel="noopener noreferrer"&gt;Virtual MCP Server configuration guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quickstart example:&lt;/strong&gt; &lt;a href="https://github.com/stacklok/toolhive/blob/main/examples/operator/virtual-mcps/vmcp_optimizer_quickstart.yaml" rel="noopener noreferrer"&gt;vmcp_optimizer_quickstart.yaml&lt;/a&gt;: deploys several MCP backends with a fully auto-configured optimizer
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All options example:&lt;/strong&gt; &lt;a href="https://github.com/stacklok/toolhive/blob/main/examples/operator/virtual-mcps/vmcp_optimizer_all_options.yaml" rel="noopener noreferrer"&gt;vmcp_optimizer_all_options.yaml&lt;/a&gt;: every tuning knob exposed
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Original Optimizer blog:&lt;/strong&gt; &lt;a href="https://stacklok.com/blog/cut-token-waste-from-your-ai-workflow-with-the-toolhive-mcp-optimizer/" rel="noopener noreferrer"&gt;Cut Token Waste from Your AI Workflow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolHive GitHub:&lt;/strong&gt; &lt;a href="https://github.com/stacklok/toolhive" rel="noopener noreferrer"&gt;github.com/stacklok/toolhive&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to see what Stacklok can do for your organization? &lt;a href="https://stacklok.com/contact" rel="noopener noreferrer"&gt;Book a demo&lt;/a&gt; or get started right away with &lt;a href="https://github.com/stacklok/toolhive" rel="noopener noreferrer"&gt;ToolHive&lt;/a&gt;, our open source project. Join the conversation and engage directly with our team on &lt;a href="https://discord.gg/stacklok" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>stacklok</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Build your first enterprise MCP server with GitHub Copilot</title>
      <dc:creator>Alejandro Ponce de León</dc:creator>
      <pubDate>Mon, 02 Feb 2026 08:53:54 +0000</pubDate>
      <link>https://dev.to/stacklok/build-your-first-enterprise-mcp-server-with-github-copilot-4gll</link>
      <guid>https://dev.to/stacklok/build-your-first-enterprise-mcp-server-with-github-copilot-4gll</guid>
      <description>&lt;p&gt;&lt;em&gt;Ever wondered how to bridge the gap between your company's private knowledge and AI assistants? You're about to vibecode your way there.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What all the fuss with MCP is about
&lt;/h2&gt;

&lt;p&gt;Back in November 2022, the world changed when OpenAI launched ChatGPT. It wasn't the first Large Language Model (LLM), but it was the most capable at the time, and most importantly, it was available for everyone to explore. To make a small analogy: it got to the moon first. LLMs sparked everyone's imagination and forever changed the way we work. Maybe that's a little far-fetched, but they definitely boosted productivity across many areas.&lt;/p&gt;

&lt;p&gt;Yet LLMs weren't (and still aren't) all-mighty. They've been trained on vast amounts of internet content, but they have two critical limitations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;They're not trained on private content.&lt;/strong&gt; No company wikis, internal docs, or how-tos.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They have a knowledge cutoff.&lt;/strong&gt; Their training stops at a fixed date, usually months in the past.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So if you ask ChatGPT something like "How was feature X designed in product Y, and how can I integrate it with my new feature Z?", it will have no idea what you're talking about. First of all, it would most probably not have access to the implementation details, since it would fall into the private content of an organization. Even if it did, there’s no guarantee because it’s frozen in time; it doesn’t know what’s changed in the world since that cutoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP to the rescue
&lt;/h2&gt;

&lt;p&gt;Fortunately, both problems can be solved with &lt;a href="https://huggingface.co/docs/smolagents/en/tutorials/tools" rel="noopener noreferrer"&gt;&lt;strong&gt;tools&lt;/strong&gt;&lt;/a&gt;. Tools empower LLMs with capabilities beyond their training. To solve the two issues above, we can create tools that tell the LLM: "When you're asked about product X at company Y, use tool Z to get the most up-to-date information." That tool might, for example, search an internal knowledge base.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro" rel="noopener noreferrer"&gt;&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;has quickly become the standard for tool calling.&lt;/strong&gt; Modern AI systems have two essential parts: the client (VS Code, Cursor, ChatGPT, Claude Code, etc.) and the model itself. Tools live on the client side. When the model doesn't know something, it calls a tool that the client executes. Originally introduced by Anthropic, MCP’s open design and community adoption have made it the clear industry standard, now supported by &lt;a href="https://techcrunch.com/2025/03/26/openai-adopts-rival-anthropics-standard-for-connecting-ai-models-to-data/" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;, &lt;a href="https://techcrunch.com/2025/04/09/google-says-itll-embrace-anthropics-standard-for-connecting-ai-models-to-data/" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, Microsoft, and others. That means you can write an MCP server once and use it with your favorite clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building your first MCP, the AI scrappy way
&lt;/h2&gt;

&lt;p&gt;Let's say your boss just tasked you with connecting your AI assistants to the corporate Confluence wiki. This is a perfect use case for MCP; you need to expose enterprise knowledge to AI tools in a standardized way.&lt;/p&gt;

&lt;p&gt;For this tutorial, we'll assume you already have a querying system in place, whether that's a Retrieval Augmented Generation (RAG) pipeline, a search API, or another knowledge retrieval mechanism. Our job is to wrap that existing system with an MCP server so AI assistants can access it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our approach: vibecoding
&lt;/h3&gt;

&lt;p&gt;We're going to build this MCP server using what &lt;a href="https://x.com/karpathy/status/1886192184808149383?lang=en" rel="noopener noreferrer"&gt;Andrej Karpathy&lt;/a&gt; sarcastically called "&lt;strong&gt;vibecoding&lt;/strong&gt;": letting LLMs do most, if not all, of the code. The term spread like wildfire because, well, it works surprisingly well for certain tasks. It's not a silver bullet, but it's perfect for handling boilerplate code and getting something functional quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ingredients
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.13+
&lt;/li&gt;
&lt;li&gt;VS Code with Copilot
&lt;/li&gt;
&lt;li&gt;uv for package management&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Copilot?
&lt;/h3&gt;

&lt;p&gt;While editors like Cursor, Codex, Windsurf, and Claude Code have gained wide popularity for their deep AI integration, GitHub Copilot remains the most widely available option for enterprise developers. It’s often already included in Microsoft or GitHub contracts, making it simple to deploy without extra approvals. We’ll still use Copilot here because it’s what most teams already have available and will get the job done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The initial prompt
&lt;/h4&gt;

&lt;p&gt;Getting started with AI-assisted development is all about setting clear expectations. Here's the first prompt I used to kick off the project. Being specific about tooling and goals helps guide the AI toward the implementation you actually want. After this initial prompt, we should have the scaffolding of the project and most of the implementation ready.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This is a new project called enterprise-mcp. It is a Python project using 3.13 or greater. The project is meant to be an MCP server that will access enterprise knowledge and make it available to LLMs. The project should:
- Use uv as package manager
- For adding packages use `uv add &amp;lt;package_name&amp;gt;`
- All configuration should be centralized in pyproject.toml file
- Use uv dependency groups when adding development dependencies like pytest, e.g. `uv add pytest --dev` or `uv add --group dev pytest`
- I would also like a Taskfile to centralize running commands, like `task format`, `task test`, or `task typecheck`
- Use `ruff` for linting and formatting
- Use `ty` for typechecking https://docs.astral.sh/ty/
- Use `async` functions wherever possible and `asyncio.gather` when parallelizing multiple tasks
- Use the official Python MCP SDK: https://github.com/modelcontextprotocol/python-sdk
- For now, make a single tool called search_enterprise_knowledge. Make sure the tool has appropriate descriptions that are descriptive enough for LLM usage
- Make the implementation with tests. I don't care so much about unit tests but about testing the overall functionality of the application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Where the AI got confused
&lt;/h4&gt;

&lt;p&gt;Even with a detailed prompt, the first pass required some corrections. Still, we had a working implementation even at the first prompt, which is also quite impressive. Two main issues emerged, both likely related to the AI's knowledge cutoff:&lt;/p&gt;

&lt;h5&gt;
  
  
  1. Misunderstanding the MCP SDK
&lt;/h5&gt;

&lt;p&gt;Instead of using the official Python SDK, Copilot attempted to semi-reimplement the MCP protocol from scratch, creating custom &lt;code&gt;list_tools&lt;/code&gt; and &lt;code&gt;call_tool&lt;/code&gt; endpoints. Since the MCP SDK is fairly recent, it wasn't in the training data, and crucially, the AI didn't check the documentation before implementing.&lt;/p&gt;

&lt;h5&gt;
  
  
  2. Using Mypy instead of Ty
&lt;/h5&gt;

&lt;p&gt;Similar story here. The AI defaulted to the more established Mypy rather than looking up the newer Ty package I'd specified.&lt;/p&gt;

&lt;h4&gt;
  
  
  Manual refinements
&lt;/h4&gt;

&lt;p&gt;Beyond fixing the AI's mistakes, I made some personal preference edits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structure of pyproject.toml.&lt;/strong&gt; No coding assistant until this day nails my pyproject.toml preferences on the first try (it may well be a me problem and not an AI problem). I referenced configurations from past projects I liked and adapted them here.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Taskfile.yml adjustments.&lt;/strong&gt; Same deal with the Taskfile.yml. That said, the AI got me 80-90% of the way there, which is pretty remarkable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Iterating with prompt #2
&lt;/h4&gt;

&lt;p&gt;After the initial implementation and manual edits, a few minor improvements remained. Rather than handle them manually, I asked Copilot to finish the job because it would certainly take less time than I would:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I have made some changes in my server.py to correctly use the Python SDK. I want you to:
1. Transform my server to a streamable HTTP server.
2. Add a comprehensive docstring for my handle_search method so that it's usable by LLMs whenever enterprise knowledge is needed.
Check the documentation of the Python SDK to know how to correctly transform the server to streamable HTTP: https://github.com/modelcontextprotocol/python-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Closing the loop
&lt;/h4&gt;

&lt;p&gt;The final step is updating project memory: the context file that helps future AI sessions (and human developers) understand your project quickly. For most coding assistants, this lives in &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;CLAUDE.md&lt;/code&gt; at the project root. Most coding assistants recognize either. It's a good place to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document the project structure, so the agent knows where to implement a new feature or fix a bug
&lt;/li&gt;
&lt;li&gt;Outline the project's best practices
&lt;/li&gt;
&lt;li&gt;Give instructions that can be repeated across runs, e.g., always run unit tests along with code linting
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Perfect, 3 final tasks after some manual modifications:
1. Make sure my commands `task format`, `task typecheck` and `task test` work and return without errors
2. Update the file AGENTS.md with relevant context information for coding agents. Take into account the best practices signaled at the beginning, like centralizing everything in pyproject.toml and using `task ..` commands to run relevant project commands. The code formatting and tests commands should be used every time a coding task is finished. Read the repo again for any other relevant information
3. Finally, update a README.md with a summary of the project and the development process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key lessons
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Tools are not API endpoints
&lt;/h4&gt;

&lt;p&gt;This is crucial to understand when building MCP servers: an MCP tool is fundamentally different from an API endpoint, even though it's tempting to map them one-to-one.&lt;/p&gt;

&lt;p&gt;API endpoints are designed as small, atomic, reusable operations. They're the building blocks you compose together: one endpoint to fetch user data, another to update preferences, another to send notifications. Each is focused and modular, meant to serve multiple use cases across your application.&lt;/p&gt;

&lt;p&gt;MCP tools, by contrast, are meant to accomplish complete deterministic workflows or actions. Think of an API as giving you a toolbox of small buttons, each doing one thing, that you wire together. An MCP tool is a single big button that says "do the thing." It handles an entire task from start to finish.&lt;/p&gt;

&lt;p&gt;For example, instead of separate tools for "search documents," "filter by date," and "format results," you'd create one &lt;code&gt;search_enterprise_knowledge&lt;/code&gt; tool that handles the full workflow of finding, filtering, and returning relevant information in one shot.&lt;/p&gt;

&lt;h4&gt;
  
  
  You're still accountable
&lt;/h4&gt;

&lt;p&gt;Whatever code the AI produces, you own it. If it breaks in production, you can't blame Copilot or Claude. Humans remain accountable for the code we ship.&lt;/p&gt;

&lt;p&gt;This means you should always review what gets generated. Not necessarily line-by-line, but at minimum: understand what it does, verify it follows your standards, and run it through your normal quality checks. A quick sanity check is never wasted time, especially when you're the one who'll be called at 2am to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the MCP server
&lt;/h2&gt;

&lt;p&gt;For this first iteration, it's better to remove all variables like coding assistants and configuration files. The easiest way to do that is with the &lt;a href="https://modelcontextprotocol.io/docs/tools/inspector" rel="noopener noreferrer"&gt;&lt;strong&gt;MCP Inspector&lt;/strong&gt;&lt;/a&gt;, a tool from Anthropic for inspecting an MCP server and querying it directly. To run the inspector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @modelcontextprotocol/inspector 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example response
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduk1l72xrtqu7m7bvy28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduk1l72xrtqu7m7bvy28.png" alt="The MCP Inspector connected to the enterprise knowledge MCP server" width="800" height="346"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Result 1
**Title:** API Documentation - Authentication
**Content:**
# API Authentication Guide
## Overview
Our REST API uses OAuth 2.0 for authentication.
## Getting Started
1. Register your application
2. Obtain client credentials
3. Request access token
4. Include token in requests

## Example

curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://api.company.com/v1/users
Access tokens expire after 1 hour.


**Metadata:**
- author: API Team
- created: 2024-02-01
- last_updated: 2024-10-20
- tags: ['api', 'authentication', 'oauth', 'documentation']
- source: confluence
**URL:** https://company.atlassian.net/wiki/spaces/API/pages/987654321
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;We've successfully built a working MCP server using Copilot and vibecoding, ready to access enterprise knowledge through a standardized protocol!&lt;/p&gt;

&lt;p&gt;By letting GitHub Copilot handle most of the boilerplate code, we created a functional Python MCP server with proper tooling, testing, and documentation, all while maintaining code quality and best practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full code repository:&lt;/strong&gt; &lt;a href="https://github.com/aponcedeleonch/enterprise-mcp" rel="noopener noreferrer"&gt;https://github.com/aponcedeleonch/enterprise-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next blog post, we're taking this further by introducing &lt;a href="https://docs.stacklok.com/toolhive" rel="noopener noreferrer"&gt;&lt;strong&gt;ToolHive&lt;/strong&gt;&lt;/a&gt;, a powerful platform that makes deploying and managing MCP servers effortless. ToolHive offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant deployment&lt;/strong&gt; using Docker containers or source packages (Python, TypeScript, or Go)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure by default&lt;/strong&gt; with isolated containers, customizable permissions, and encrypted secrets management
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless integration&lt;/strong&gt; with GitHub Copilot, Cursor, and other popular AI clients
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-ready features,&lt;/strong&gt; including OAuth-based authorization and Kubernetes deployment via the ToolHive Kubernetes Operator
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A curated registry&lt;/strong&gt; of verified MCP servers you can discover and run immediately, or create your own custom registry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay tuned to learn how to evolve our enterprise MCP server from a prototype into a production-ready service!&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>githubcopilot</category>
      <category>ai</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Stacklok's MCP Optimizer vs Anthropic's Tool Search Tool: A Head-to-Head Comparison</title>
      <dc:creator>Alejandro Ponce de León</dc:creator>
      <pubDate>Wed, 10 Dec 2025 15:36:56 +0000</pubDate>
      <link>https://dev.to/stacklok/stackloks-mcp-optimizer-vs-anthropics-tool-search-tool-a-head-to-head-comparison-2f32</link>
      <guid>https://dev.to/stacklok/stackloks-mcp-optimizer-vs-anthropics-tool-search-tool-a-head-to-head-comparison-2f32</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;TL;DR&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Both solutions tackle the critical problem of token bloat from excessive tool definitions. However, our testing with 2,792 tools reveals a stark performance gap: &lt;strong&gt;Stacklok MCP Optimizer achieves 94% accuracy&lt;/strong&gt; in selecting the right tools, while &lt;strong&gt;Anthropic's Tool Search Tool achieves only 34% accuracy&lt;/strong&gt;. If you're building production AI agents that need reliable tool selection without breaking the bank on tokens, these numbers matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Problem Both Are Solving&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When you connect AI agents to multiple Model Context Protocol (MCP) servers, tool definitions quickly consume massive portions of your context window, often before your actual conversation even begins. &lt;/p&gt;

&lt;p&gt;The reality? Most queries only need a handful of these tools. Loading all of them wastes tokens (read: money) and degrades model performance as the tool count grows.&lt;/p&gt;

&lt;p&gt;Both &lt;a href="https://dev.to/stacklok/cut-token-waste-from-your-ai-workflow-with-the-toolhive-mcp-optimizer-3oo6"&gt;Stacklok MCP Optimizer&lt;/a&gt; (launched October 28, 2025) and &lt;a href="https://www.anthropic.com/engineering/advanced-tool-use" rel="noopener noreferrer"&gt;Anthropic's Tool Search Tool&lt;/a&gt; (launched November 20, 2025 as part of their advanced tool use beta) address this by loading a single search tool that finds and loads only the necessary tools on demand.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why This Matters: Real Benefits and Trade-offs&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Upside&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Token savings are substantial.&lt;/strong&gt; We've observed up to 80% reductions in input tokens. In their internal testing, Anthropic reports their approach preserves 191,300 tokens of context compared to loading all tools upfront, an 85% reduction. In rate-limited enterprise environments, this translates directly to &lt;a href="https://docs.stacklok.com/toolhive/tutorials/mcp-optimizer" rel="noopener noreferrer"&gt;cost savings and faster response times.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved model performance.&lt;/strong&gt; Reducing token overhead doesn't just save money, it can improve model accuracy. Anthropic's internal testing showed substantial improvements with Tool Search Tool enabled: Opus 4 jumped from 49% to 74%, and Opus 4.5 improved from 79.5% to 88.1% on MCP evaluations. However, it's important to note that Anthropic's experiments and datasets are not publicly available, making direct comparisons challenging.&lt;/p&gt;

&lt;p&gt;Our own testing with MCP Optimizer across different model tiers revealed an interesting pattern: while state-of-the-art models like Claude Sonnet 4 maintained strong performance when benchmarking tool selection accuracy (94.6% → 93.4%), mid-tier and smaller models showed significant improvements. Gemini 2.5 Flash increased from 83.2% to 92.4%, and the gpt-oss-20B model nearly doubled its accuracy from 38% to 69.4%. This suggests that efficient tool loading particularly benefits models with tighter context constraints, making MCP Optimizer valuable across different deployment scenarios, from resource-constrained edge deployments to cost-optimized production systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Downside&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Risk of tool retrieval failure.&lt;/strong&gt; The benefits above assume the search tool successfully finds the right tool. But what happens when it doesn't? If the search tool can't find the right tool, your task fails or produces unexpected behavior. While the agent can retry searches, this introduces latency and still consumes tokens. The critical question becomes: &lt;em&gt;How often does the search actually work in practice ?&lt;/em&gt;  This is precisely what our head-to-head comparison measures.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How Each Approach Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Both solutions introduce a lightweight search tool, but their algorithms differ significantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stacklok MCP Optimizer&lt;/strong&gt;: Combines semantic search with BM25 for hybrid tool discovery
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic Tool Search Tool&lt;/strong&gt;: Offers two variants, BM25-only or regex-based pattern matching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The algorithmic difference has profound implications for real-world performance, as our testing reveals.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Head-to-Head Comparison&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We conducted a comprehensive evaluation to answer the question: &lt;em&gt;Which approach is more effective? (&lt;/em&gt;&lt;a href="https://github.com/StacklokLabs/mcp-optimizer/pull/148" rel="noopener noreferrer"&gt;Source code and full results&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Test Methodology&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Loaded 2,792 tools from various MCP servers using the &lt;a href="https://github.com/xfey/MCP-Zero?tab=readme-ov-file#dataset-mcp-tools" rel="noopener noreferrer"&gt;MCP-tools dataset&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;For each tool, generated a synthetic query using an LLM that would naturally require that specific tool

&lt;ul&gt;
&lt;li&gt;Example: For GitHub's &lt;code&gt;create_pull_request&lt;/code&gt; tool → Generated query: "Create a pull request from feature-branch to main branch in the octocat/Hello-World repository on GitHub"
&lt;/li&gt;
&lt;li&gt;Example: Slack's &lt;code&gt;channels_list&lt;/code&gt; tool → Generated query: "Show me all channels in my Slack workspace"
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Used Claude Sonnet 4.5 to test whether each approach could correctly search and select the original tool that generated the query

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval Accuracy&lt;/strong&gt;: Does the correct tool appear anywhere in the search results returned by the search tool?
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selection Accuracy&lt;/strong&gt;: Is the correct tool actually selected by the model for use?
&lt;/li&gt;
&lt;li&gt;This direct mapping lets us objectively measure retrieval accuracy: we know the ground truth for every query. In the examples above, the correct tools would be GitHub's &lt;code&gt;create_pull_request&lt;/code&gt; and Slack's &lt;code&gt;channels_list&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Results&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnshjekx84tc9k5yps2a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnshjekx84tc9k5yps2a6.png" alt="Accuracy comparison chart showing MCP Optimizer at 93.95% selection accuracy and 98.03% retrieval accuracy versus Tool Search Tool at 33.70%/47.85% (BM25) and 30.01%/39.00% (regex)" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The stark difference in selection accuracy between approaches primarily reflects retrieval effectiveness rather than model performance. Since all approaches used the same model (Claude Sonnet 4.5) for tool selection, the 94% vs 34% accuracy gap stems from MCP Optimizer's superior retrieval accuracy (98% vs 48%). Put simply: if the correct tool doesn't appear in the search results, even the best model cannot select it. MCP Optimizer's hybrid semantic + BM25 search successfully surfaces the correct tool in 98% of cases, giving the model the opportunity to make the right selection. In contrast, Tool Search Tool's lower retrieval rates mean the model often never sees the correct tool among its options.&lt;/p&gt;

&lt;p&gt;These results align with independent testing from other organizations. &lt;a href="https://blog.arcade.dev/anthropic-tool-search-4000-tools-test" rel="noopener noreferrer"&gt;Arcade reported&lt;/a&gt; that Anthropic's Tool Search achieved only 56% retrieval accuracy with regex and 64% with BM25 across 4,027 tools.&lt;/p&gt;

&lt;h4&gt;
  
  
  Runtime Performance Characteristics
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Average execution time&lt;/th&gt;
&lt;th&gt;Average tools retrieved&lt;/th&gt;
&lt;th&gt;Average input tokens*&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP Optimizer&lt;/td&gt;
&lt;td&gt;5.75 seconds&lt;/td&gt;
&lt;td&gt;5.2&lt;/td&gt;
&lt;td&gt;3296&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool Search Tool (BM25)&lt;/td&gt;
&lt;td&gt;12.05 seconds&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;td&gt;2823&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool Search Tool (regex)&lt;/td&gt;
&lt;td&gt;13.55 seconds&lt;/td&gt;
&lt;td&gt;5.2&lt;/td&gt;
&lt;td&gt;3679&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* &lt;em&gt;Average Input Tokens: The total number of tokens sent to the model per request, including system prompt, tool definitions, and user query.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Beyond accuracy, the operational characteristics of each approach reveal important trade-offs. Tool Search Tool (BM25) achieves the lowest token consumption at 2,823 tokens per request, which likely stems from retrieving slightly fewer tools on average (5.0 vs 5.2). However, MCP Optimizer's token count of 3,296 still represents substantial savings compared to attempting to load all 2,792 tools upfront, which would require 206,073 tokens and cause an error due to context window limitations.&lt;/p&gt;

&lt;p&gt;The execution time differences are noteworthy: MCP Optimizer completes searches in 5.75 seconds on average, while Tool Search Tool takes 12.05 (BM25) and 13.55 seconds (regex). However, this comparison requires context. MCP Optimizer was executed locally in our test environment, while Tool Search Tool operates as an internal Anthropic service with unknown infrastructure requirements and potential network latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  What This Means
&lt;/h3&gt;

&lt;p&gt;The numbers tell a clear story: &lt;strong&gt;MCP Optimizer consistently finds the correct tool 94% of the time&lt;/strong&gt;, while Tool Search Tool's accuracy hovers around 30-34% in environments with thousands of tools. For production systems where reliability and performance matters, this gap is significant.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Verdict&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Anthropic's Tool Search Tool correctly identifies a real problem facing production AI deployments. The concept of on-demand tool loading is sound, and the token savings are genuine. However, &lt;strong&gt;the current implementation isn't production-ready&lt;/strong&gt; for environments with large tool catalogs. Limited to Claude Sonnet 4.5 and Opus 4.5, it remains a proprietary solution exclusive to Anthropic's ecosystem.&lt;/p&gt;

&lt;p&gt;MCP Optimizer, on the other hand, delivers on the promise: reliable tool selection (94% accuracy) combined with significant token savings. Built into the ToolHive runtime as a free and open-source solution, it seamlessly integrates with all major &lt;a href="https://docs.stacklok.com/toolhive/reference/client-compatibility" rel="noopener noreferrer"&gt;AI clients&lt;/a&gt; including Claude Code, GitHub Copilot, Cursor, and others, providing vendor flexibility and broader compatibility across different AI platforms. For teams building AI agents that need to work consistently across hundreds or thousands of tools, this performance difference and deployment flexibility are critical.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Looking Forward&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The future of AI agents depends on solving context window constraints without sacrificing reliability.  For that future to arrive, we need tool selection systems that work reliably. MCP Optimizer proves that hybrid semantic + keyword search can deliver both token efficiency and production-grade accuracy. As Anthropic's Tool Search Tool matures beyond beta, we hope to see similar reliability gains.&lt;/p&gt;

&lt;p&gt;For now, if you're deploying AI agents in production and need dependable tool selection across extensive tool catalogs, the data points to MCP Optimizer as the more reliable choice.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Interested in learning more about MCP Optimizer? Check out the &lt;a href="https://docs.stacklok.com/toolhive/tutorials/mcp-optimizer" rel="noopener noreferrer"&gt;ToolHive documentation&lt;/a&gt; or visit &lt;a href="https://stacklok.com/" rel="noopener noreferrer"&gt;stacklok.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>anthropic</category>
      <category>stacklok</category>
    </item>
  </channel>
</rss>
