<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by MCP Toolbox for Databases on Medium]]></title>
        <description><![CDATA[Stories by MCP Toolbox for Databases on Medium]]></description>
        <link>https://medium.com/@mcp_toolbox?source=rss-bd170fefc8f6------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*FprCEQmwO8Xy36qI2s2OMw.png</url>
            <title>Stories by MCP Toolbox for Databases on Medium</title>
            <link>https://medium.com/@mcp_toolbox?source=rss-bd170fefc8f6------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 09 Jun 2026 01:36:02 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mcp_toolbox/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Seamless AI-to-Data Integration: Using MCP Toolbox and PRM for Looker OAuth]]></title>
            <link>https://medium.com/google-cloud/seamless-ai-to-data-integration-using-mcp-toolbox-and-prm-for-looker-oauth-0fe6f53f0758?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/0fe6f53f0758</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[looker]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 26 May 2026 19:31:26 GMT</pubDate>
            <atom:updated>2026-05-27T02:15:57.940Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fvhI6clKBv3kn7BJFFNceQ.jpeg" /></figure><p>Written by: Mike DeAngelo, Developer Relations Engineer @ Google (<a href="https://www.linkedin.com/in/mike-deangelo/">LinkedIn</a>)</p><p>As developers increasingly look to connect AI agents directly to enterprise data platforms like Looker, a significant challenge has emerged: how to handle secure, per-user authentication in a way that diverse MCP clients can understand.</p><p>For clients like Claude Desktop, which has more rigid configuration requirements than tools like the Gemini CLI, we needed a standardized way to communicate OAuth requirements. The answer lies in OAuth <a href="https://datatracker.ietf.org/doc/html/rfc9728">Protected Resource Metadata (PRM)</a>, a standard way to communicate authentication details.</p><h3>The Challenge of Authentication Discovery</h3><p>In a standard MCP setup, the client (your AI agent) needs to know how to contact the resource (Looker), initiate an OAuth PKCE flow, and obtain a valid token. MCP Toolbox acts as the bridge here, but the client needs a “map” to find the right authorization servers.</p><p>RFC 9728 defines a document called “OAuth Protected Resource Metadata” (PRM). The PRM file acts as that map. When a client doesn’t know how to authenticate, it makes a GET request to /.well-known/oauth-protected-resource. The server responds with a JSON document specifying the supported authorization servers and required scopes.</p><h3>Setting Up Your PRM Configuration</h3><p>To enable this in MCP Toolbox, you must first define your PRM file. This file tells the client exactly where to go to get its credentials.</p><h3>1. Create your prm.json</h3><p>Your configuration file should follow this structure, replacing the example URLs with your own service endpoints:</p><pre>{<br>  &quot;resource&quot;: &quot;https://looker-mcp-toolbox.example.com/mcp&quot;,<br>  &quot;authorization_servers&quot;: [&quot;https://looker.example.com&quot;],<br>  &quot;scopes_supported&quot;: [&quot;cors_api&quot;]<br>}</pre><h3>2. Deploying MCPToolbox</h3><p>When running MCP Toolbox, you use the --mcp-prm-file flag to point to this configuration. For a production-ready setup, particularly for Claude Desktop which requires HTTPS, deploying on a service like <a href="https://mcp-toolbox.dev/integrations/looker/samples/looker_cloud_run/">Google Cloud Run</a> is ideal as it handles SSL termination automatically. If you are not using Google Cloud Run, set up some sort of reverse proxy to handle this and make sure MCP Toolbox is listening on the port expected by the reverse proxy.</p><p><strong>Required Environment Variables:</strong></p><ul><li>LOOKER_BASE_URL: Your Looker instance URL.</li><li>LOOKER_USE_CLIENT_OAUTH: Set to true to enable per-user authentication.</li></ul><p><strong>Execution Command:</strong></p><pre>./toolbox - prebuilt=looker,looker-dev - mcp-prm-file=prm.json - port=8080 - address=0.0.0.0</pre><p>Alternatively you can run MCP Toolbox without a reverse proxy by using the --tls-cert and --tls-key command line switches to point to the proper PEM encoded certificate and signing key files.</p><h3>Registering the Client in Looker</h3><p>Before Claude Desktop can connect, you must register it as an OAuth application within Looker. There is no interface to do this so we use Looker’s “API Explorer” to call the “Register OAuth App” endpoint with the following data:</p><ul><li><strong>Client GUID:</strong> claude-desktop</li><li><strong>Redirect URI:</strong> <a href="https://claude.ai/api/mcp/auth_callback.">https://claude.ai/api/mcp/auth_callback</a></li><li><strong>Display Name:</strong> “Claude Desktop”</li><li><strong>Description:</strong> “Claude Desktop”</li><li><strong>Enabled:</strong> true</li></ul><p>You can set up other clients, Gemini CLI, ChatGPT, etc. by finding out what redirect URI they use and substituting that above with their own Client GUID. For example for Gemini CLI use the following:</p><ul><li><strong>Client GUID:</strong> gemini-cli</li><li><strong>Redirect URI:</strong> <a href="http://localhost:7777/oauth/callback.">http://localhost:7777/oauth/callback</a></li><li><strong>Display Name:</strong> “Gemini CLI”</li><li><strong>Description:</strong> “Gemini CLI”</li><li><strong>Enabled:</strong> true</li></ul><h3>Connecting Claude Desktop</h3><p>Once your server is live and your PRM file is served at the .well-known path, adding the connector in Claude Desktop is straightforward. In the “Connectors” settings, choose “Add custom connector” and provide the URL of your reverse proxy with the /mcp path. In the advanced settings, simply enter claude-desktop as the OAuth Client ID.</p><p>Claude will then automatically detect the PRM metadata and initiate the PKCE authentication flow in your browser.</p><h3>Connecting Gemini CLI</h3><p>Add the following stanza to your $HOME/.gemini/settings.json file:</p><pre>&quot;mcpServers&quot;: {<br>    &quot;looker&quot;: {<br>        &quot;httpUrl&quot;: &quot;https://&lt;your mcp server url&gt;/mcp&quot;,<br>        &quot;oauth&quot;: {<br>            &quot;clientId&quot;: &quot;gemini-cli&quot;,<br>            &quot;redirectUri&quot;: &quot;http://localhost:7777/oauth/callback&quot;<br>        }<br>    }<br>}</pre><p>Start Gemini CLI and run /mcp auth looker. Gemini CLI will start the authentication flow in your browser.</p><h3>Why This Matters</h3><p>This approach allows organizations to maintain strict security standards — ensuring that the AI agent only accesses data the specific user is authorized to see — while providing a seamless “one-click” authentication experience for the end user. It bridges the gap between sophisticated data platforms like Looker and the new generation of agentic AI tools.</p><p>For more detailed implementation guides, visit the <a href="https://mcp-toolbox.dev/dev/integrations/looker/samples/looker_claude_oauth/">MCP Toolbox documentation</a>. You can also explore additional ways to authorize connection to various databases at <a href="https://medium.com/@mcp_toolbox/securing-ai-agents-with-mcp-authorization-5cd8a552c45b">Securing AI agents with MCP Authorization</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0fe6f53f0758" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/seamless-ai-to-data-integration-using-mcp-toolbox-and-prm-for-looker-oauth-0fe6f53f0758">Seamless AI-to-Data Integration: Using MCP Toolbox and PRM for Looker OAuth</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Securing AI agents with MCP Authorization]]></title>
            <link>https://medium.com/google-cloud/securing-ai-agents-with-mcp-authorization-5cd8a552c45b?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/5cd8a552c45b</guid>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[data]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 26 May 2026 19:29:51 GMT</pubDate>
            <atom:updated>2026-05-27T02:16:03.947Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kQkvJunKFsnAwln0O-OGKw.jpeg" /></figure><p>Written by: Wenxin Du, Software Engineer @ Google (<a href="https://www.linkedin.com/in/wenxin-du/">Linkedin</a>)</p><p>When connecting AI agents to enterprise databases, security is the greatest challenge. As agents graduate from sandbox environments into production, they inherit the strict data governance policies of the organization. Ensuring that an agent acts with the exact permissions of the end-user usually forces developers to build bespoke verification layers to intercept requests and inspect tokens.</p><p>The latest update to MCP Toolbox introduces generic <a href="https://modelcontextprotocol.io/docs/tutorials/security/authorization">Model Context Protocol (MCP) authorization</a> support. This feature allows you to gate an entire MCP server or individual database tools behind standard OAuth2 Identity Providers without altering your agentic application logic.</p><p>By processing token verification at the configuration layer, Toolbox acts as an automated security perimeter. It validates incoming OAuth2 tokens against external authorization servers, ensuring that your agents strictly maintain the user’s chain of custody.</p><h3>How It Works</h3><p>Toolbox server intercepts incoming authorization headers when receiving a client request to its MCP endpoint. After extracting the OAuth2 token from the request header, Toolbox verifies its signature, checks the audience, and confirms that the required scopes are present. If the token is valid, the request proceeds smoothly; otherwise, Toolbox returns a “401 Unauthorized” for token verification failure or “403 Forbidden” error for missing scopes.</p><h3>Step-by-Step Configuration</h3><p>Setting up centralized authorization involves defining an identity provider in your configuration file and applying it to your tools.</p><h4>Step 1: Configure the Identity Provider</h4><p>You can configure Toolbox to validate tokens from your choice of identity provider. Below are configuration examples for both Google and Okta.</p><p><strong>Option A: Setting Up Google OIDC Authorization (ID Token)</strong></p><p>When the client is connecting using <a href="https://developers.google.com/identity/openid-connect/openid-connect">Google’s OIDC-compliant ID token</a>, Toolbox will validate the token locally. You can configure the following to your authServices section:</p><pre>kind: authServices<br>name: google-mcp-auth<br>type: generic<br>audience: ${YOUR_TOKEN_AUDIENCE}<br>authorizationServer: https://oauth2.googleapis.com/tokeninfo<br>mcpEnabled: true<br>scopesRequired:<br>  - openid<br>  - profile<br>  - email</pre><p>The audience parameter must match the OAuth 2.0 Client ID generated in your Google Cloud Console. Enforcing mcpEnabled: true requires a valid Google token before listing or executing tools.</p><p><strong>Option B: Setting Up Google Opaque Access Token Authorization</strong></p><p>Alternatively, you can also use <a href="https://docs.cloud.google.com/docs/authentication/token-types#access-tokens">Google OAuth’s access token</a>. Since access tokens are opaque, Toolbox needs to validate it against Google’s Token Info endpoint:</p><pre>kind: authServices<br>name: google-auth<br>type: generic<br>audience: ${YOUR_TOKEN_AUDIENCE}<br>authorizationServer: https://accounts.google.com<br>introspectionEndpoint: https://www.googleapis.com/oauth2/v3/tokeninfo<br>introspectionMethod: GET<br>introspectionParamName: access_token<br>mcpEnabled: true</pre><p><strong>Option C: Setting Up Okta Authorization</strong></p><p>For architectures relying on other authorization servers like Okta, you can route token verification through an Okta Custom Authorization Server using this configuration:</p><pre>kind: authServices<br>name: okta-auth<br>type: generic<br>audience: ${YOUR_TOKEN_AUDIENCE}<br>authorizationServer: https://your-subdomain.okta.com/oauth2/default<br>mcpEnabled: true<br>scopesRequired:<br>  - openid<br>  - profile</pre><p>Toolbox automatically discovered the authorization and token introspection endpoints from the `authorizationServer` URL configured. If the authorization server does not use a standard introspection endpoint, you can manually configure the introspection endpoint like the example above in <a href="https://docs.google.com/document/d/14_p6gb4KCGadW1lUdUAkPCV6aKqhhF-BRsCRU829fTg/edit?pli=1&amp;tab=t.0#heading=h.gbml4v4iii7o">Option B</a>.</p><h4>Step 2: Enforce Fine-Grained Tool-Level Scopes</h4><p>Once your authorization service is active, you can also choose to enforce granular tool-level authorization. By adding the scopesRequired block directly to an individual tool configuration, Toolbox ensures the client’s token contains the specific permissions needed for that exact action.</p><pre>kind: tool<br>name: update_flight_status<br>type: postgres-sql<br>source: my-pg-instance<br>statement: |<br>  UPDATE flights SET status = $1 WHERE flight_number = $2<br>description: Update flight status<br>authRequired:<br>  - okta-auth<br>scopesRequired:<br>  - execute:sql<br>  - write:flights</pre><p>If an agent attempts to execute a tool without the correct privileges, Toolbox safely rejects the request with a structured HTTP “403 Forbidden” response and a challenge identifying the missing permissions.</p><h3>Conclusion</h3><p>With native MCP authorization support, Toolbox eliminates the need to build custom security frameworks for your AI applications. It allows you to enforce zero-trust security standards across your enterprise data tools while keeping your focus on building more capable, context-aware agents.</p><p>For more information on setting up token verification patterns, check out our <a href="https://mcp-toolbox.dev/documentation/configuration/authentication/generic/#2-mcp-authorization">Authentication Documentation</a>. For more information on secure integrations with platforms like Looker, see <a href="https://medium.com/@mcp_toolbox/seamless-ai-to-data-integration-using-mcp-toolbox-and-prm-for-looker-oauth-0fe6f53f0758">Seamless AI-to-Data Integration: Using MCP Toolbox and PRM for Looker OAuth</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5cd8a552c45b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/securing-ai-agents-with-mcp-authorization-5cd8a552c45b">Securing AI agents with MCP Authorization</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beyond the Vibe Check: Scaling Cymbal Air Agent Reliability with LangGraph and Vertex AI Evals]]></title>
            <link>https://medium.com/google-cloud/beyond-the-vibe-check-scaling-cymbal-air-agent-reliability-with-langgraph-and-vertex-ai-evals-42f6370303e5?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/42f6370303e5</guid>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[mcp-server]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[evaluation]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 12 May 2026 16:04:56 GMT</pubDate>
            <atom:updated>2026-05-13T01:33:18.502Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*24-bKS4ey8nrX2r9-xuQqQ.jpeg" /></figure><p>Written by:</p><ul><li>Anushka Saxena, Software Engineer Apprentice @ Google (<a href="https://www.linkedin.com/in/-anushka-saxena/">LinkedIn</a>)</li><li>Anubhav Dhawan, Software Engineer @ Google (<a href="https://www.linkedin.com/in/anubhav-dhawan/">LinkedIn</a>)</li></ul><p>Building multi-step AI agents is a significant milestone, but the path to a production-ready application requires a fundamental shift from informal “vibe checks” to rigorous, automated evaluation. In this post, we share our journey scaling the reliability of the <a href="https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo">Cymbal Air</a> customer service assistant, an open-source demo designed to handle flight bookings and complex policy queries. By moving beyond manual spot-checks, we established a robust framework to evaluate how our agent reasons through complex, multi-step tasks.</p><p>To achieve this reliability, we transitioned our orchestration from LangChain to <a href="https://langchain-ai.github.io/langgraph/">LangGraph</a>, integrated with <a href="https://mcp-toolbox.dev/">MCP Toolbox</a> for unified database connectivity and the <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-overview">Vertex AI Gen AI Evaluation Service</a>. This combination allows us to manage workflows as state machines and track the entire trajectory of an agent’s decision-making process, ensuring consistent and high-quality customer support.</p><h3>The Architectural Shift</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LS2ZBLa6cIBWk_7_K58FDA.png" /></figure><p>Our early iterations relied on traditional linear chains, which proved insufficient as Cymbal Air grew to handle conditional logic, loops, and human-in-the-loop confirmations. We needed a system that could manage persistent conversation state and cycles, leading us to migrate to LangGraph. By treating the <a href="https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo/blob/main/agent/react_graph.py">agent’s logic as a state machine</a> rather than a simple sequence, we gained the visibility and control necessary to bridge the gap between simple chat interactions and complex, multi-step tool orchestration.</p><p>Using LangGraph state management, we could persist and inspect intermediate execution state throughout the conversation, including:</p><ul><li>message history</li><li>tool calls</li><li>tool outputs</li><li>and transitions between workflow nodes</li></ul><p>This persistent workflow state became foundational for building more reliable evaluations, allowing us to inspect intermediate tool interactions rather than relying only on final responses.</p><h3>Defining a comprehensive evaluation strategy</h3><p>To move beyond “vibe checks,” we defined three specific pillars for our automated evals (the systematic process of testing AI performance):</p><ul><li><a href="https://github.com/SaxenaAnushka102/cymbal-air-toolbox-demo/blob/e2871749e5d09a7b0368d83cf340056e967b56f9/evaluation/metrics.py#L29"><strong>Response Quality</strong></a><strong>:</strong> Evaluating whether the final response was helpful, accurate, and grounded in retrieved information.</li><li><a href="https://github.com/SaxenaAnushka102/cymbal-air-toolbox-demo/blob/e2871749e5d09a7b0368d83cf340056e967b56f9/evaluation/metrics.py#L35"><strong>Tool Use</strong></a><strong>:</strong> Verifying if the agent calls the right tools with the correct parameters.</li><li><a href="https://github.com/SaxenaAnushka102/cymbal-air-toolbox-demo/blob/e2871749e5d09a7b0368d83cf340056e967b56f9/evaluation/metrics.py#L42"><strong>Tool Trajectory</strong></a><strong>:</strong> Evaluating whether the predicted sequence of tool calls matches the expected execution flow for multi-step tasks. This became particularly important for workflows involving dependent tool calls, where a correct final response alone did not guarantee correct intermediate execution behavior.</li></ul><p><strong>Note:</strong> What is a Vibe Check? Informal, manual testing where a developer reads a few answers to see if they “feel” right. Automated evals replace vibe checks by testing hundreds of scenarios programmatically using predefined datasets (like <a href="https://github.com/SaxenaAnushka102/cymbal-air-toolbox-demo/blob/e2871749e5d09a7b0368d83cf340056e967b56f9/evaluation/eval_golden.py">eval_golden.py</a>).</p><h3>Outcomes from the new evaluation workflow</h3><p>After migrating the evaluation pipeline to LangGraph and expanding evaluation coverage beyond final-response scoring, we were able to evaluate agent behavior at a much deeper level.</p><p>The updated workflow gave us:</p><ul><li>Better visibility into intermediate agent behavior</li><li>More reliable evaluation of tool-augmented responses</li><li>Improved validation of parameter extraction</li><li>The ability to evaluate multi-step tool trajectories rather than only final outputs</li></ul><p>In practice, this helped surface issues that were previously difficult to detect in the earlier evaluation setup, particularly around:</p><ul><li>Incorrect parameter extraction</li><li>Invoking redundant tools</li><li>Missing tool context during response evaluation</li><li>Executing tool sequences in the wrong order in multi-tool workflows</li></ul><p>Overall, the updated evaluation workflow became significantly more effective for debugging orchestration failures and validating multi-step execution behavior.</p><h3>Lessons learned while improving evals</h3><h4>Handling “no tool required” cases</h4><p>Generic queries like: <em>“What is Cymbal Air?” </em>correctly required no tool calls. Earlier evaluation flows treated empty trajectories as failures, which incorrectly penalized valid responses. Adding explicit handling for “no action required” cases improved retrieval evaluation reliability.</p><h4>Detecting incomplete workflows</h4><p>For the query: <em>“Where can I get a snack near the gate for flight CY 352?”, </em>the expected workflow required:</p><ol><li>Retrieving the flight gate</li><li>Then searching nearby amenities</li></ol><p>Trajectory evaluation revealed that the agent completed only the first step and skipped the amenities lookup entirely. This was a failure that response-only evaluation would have missed.</p><h4>Identifying redundant tool calls</h4><p>For the query: <em>“What are some flights from SFO to Chicago tomorrow?”, t</em>he expected trajectory involved resolving the airport followed by a single flight search. The evaluation surfaced an unnecessary additional flight lookup, reducing trajectory precision despite partially correct retrieval behavior.</p><p>LangGraph provided the structured execution state needed to capture intermediate tool interactions, while the <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-agents">Vertex AI Gen AI Evaluation Service</a> enabled us to systematically evaluate response quality, tool usage, and multi-step trajectories against expected workflows.</p><h3>Get started</h3><p>Ready to build and evaluate your own robust, stateful agents?</p><ul><li>Explore <a href="https://github.com/googleapis/mcp-toolbox">MCP Toolbox for Databases</a> to build agent workflows with standardized and secure database tool integrations.</li><li>Explore the full implementation and evaluation datasets in the <a href="https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo">Cymbal Air repo</a>.</li><li>Dive into the<a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-genai-console"> Vertex AI Gen AI Evaluation Service documentation</a>.</li><li>Master stateful multi-agent coordination with the <a href="https://langchain-ai.github.io/langgraph/">LangGraph docs</a>.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=42f6370303e5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/beyond-the-vibe-check-scaling-cymbal-air-agent-reliability-with-langgraph-and-vertex-ai-evals-42f6370303e5">Beyond the Vibe Check: Scaling Cymbal Air Agent Reliability with LangGraph and Vertex AI Evals</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Your Databases Finally Speak Human]]></title>
            <link>https://medium.com/google-cloud/your-databases-finally-speak-human-856b1de4f97c?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/856b1de4f97c</guid>
            <category><![CDATA[openai-codex]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[skills]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 28 Apr 2026 19:28:46 GMT</pubDate>
            <atom:updated>2026-04-28T20:59:48.439Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Au6o_w4ikrifjUwAI07Hvw.png" /></figure><p>Written by: Twisha Bansal, Software Engineer @ Google (<a href="https://www.linkedin.com/in/twishabansal/">Linkedin</a>)</p><p>There’s a scene every data engineer knows by heart.</p><p>It’s 2 PM. You’re deep in flow, building something real. And then — you need to check something in the database. Just a quick thing. How many orders came in this week? Is that index still broken? What does the schema look like on that table?</p><p>So you stop. You open a new terminal. You look up the gcloud flag you can never remember. You run the command, parse the output, copy a value, open the SQL client, write the query, check the docs because you always forget the exact syntax for EXPLAIN ANALYZE, get the answer, close everything, and try to remember where you were.</p><p>Fifteen minutes gone. For a quick thing.</p><p>We think that’s long enough. Today, we’re done with it.</p><h3>Announcing: Agent Skills for Google Cloud Data Products</h3><p>What if your AI coding agent already knew your database? not just what SQL is, but what your instances look like, how to provision them, how to read their health metrics, how to troubleshoot their slowest queries, and you could just <em>ask</em>.</p><p>That’s what we built.</p><p>Starting today, agent skills are available for <strong>12 Google Cloud Data Products</strong>, across every major AI coding agent: <strong>Gemini CLI, Claude Code, Codex, and Antigravity</strong>. These aren’t thin wrappers or glorified autocomplete. They’re deep, domain-specific capability packs that give your agent genuine expertise, the kind that used to live only in the heads of the most experienced people on your team.</p><p>One sentence. Any product. Any agent. Just ask.</p><h3>Twelve Products: One Language</h3><p>The launch covers the full breadth of what engineering teams run in production on Google Cloud:</p><p><strong>Relational Databases</strong></p><ul><li><a href="https://github.com/gemini-cli-extensions/cloud-sql-postgresql">Cloud SQL for PostgreSQL</a></li><li><a href="https://github.com/gemini-cli-extensions/cloud-sql-mysql/">Cloud SQL for MySQL</a></li><li><a href="https://github.com/gemini-cli-extensions/cloud-sql-sqlserver">Cloud SQL for SQL Server</a></li><li><a href="https://github.com/gemini-cli-extensions/alloydb/">AlloyDB for PostgreSQL</a></li><li><a href="https://github.com/gemini-cli-extensions/alloydb-omni">AlloyDB Omni</a></li><li><a href="https://github.com/gemini-cli-extensions/spanner">Spanner</a></li><li><a href="https://github.com/gemini-cli-extensions/oracledb">Oracle Database</a></li></ul><p><strong>Analytics &amp; Big Data</strong></p><ul><li><a href="https://github.com/gemini-cli-extensions/bigquery-data-analytics">BigQuery</a></li><li><a href="https://github.com/gemini-cli-extensions/dataproc">Dataproc</a></li></ul><p><strong>NoSQL</strong></p><ul><li><a href="https://github.com/gemini-cli-extensions/firestore-native">Firestore</a></li></ul><p><strong>Intelligence &amp; Governance</strong></p><ul><li><a href="https://github.com/gemini-cli-extensions/knowledge-catalog">Knowledge Catalog</a></li><li><a href="https://github.com/gemini-cli-extensions/looker">Looker</a></li></ul><p>Whether you’re querying a transactional database at the edge of the world or orchestrating a petabyte-scale analytics pipeline, your agent is now fluent in it.</p><h4>What Fluent Actually Looks Like</h4><p>Forget bullet points for a moment. Here’s what a morning looks like when your agent speaks database:</p><p>You notice query latency has spiked overnight.</p><p><em>Which queries are causing the most load right now? Show me their execution plans and flag anything suspicious.</em></p><p>The agent identifies three slow queries, shows the plans, and recommends missing indexes. You ask it to check if those indexes already exist somewhere.</p><p><em>Are there any invalid indexes I should know about on this instance?</em></p><p>Clean. You spin up a new environment to test the fix.</p><p><em>Clone this instance into a staging environment in us-west1.</em></p><p>Done while you pour coffee. You come back, test the fix, and ask for a code artifact to carry it forward.</p><p><em>Generate a Python migration script to add those indexes to the ‘orders’ table.</em></p><p>That used to be an afternoon. It was a conversation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cM1PyHZh33WUz39omkAt-w.png" /><figcaption>Install Claude Code marketplace and plugin.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3TnDv01Da50BivhKd_Ur_A.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8TfHtPfmxHyvURuB-ImYtA.png" /><figcaption>Explore your data using natural language.</figcaption></figure><h4>Skills Go Deep, Not Wide</h4><p>Each skill pack isn’t trying to do everything. It’s trying to do one product exceptionally well.</p><p>Take <a href="https://github.com/gemini-cli-extensions/cloud-sql-postgresql">Cloud SQL for PostgreSQL</a> as an example. Seven distinct skill modules ship in the release:</p><ul><li><strong>Admin</strong>: Provision instances, create users, clone environments, and monitor long-running operations.</li><li><strong>Data</strong>: Explore schemas, discover stored procedures and views, execute SQL.</li><li><strong>Health</strong>: Identify bloat, find invalid indexes, audit autovacuum configuration.</li><li><strong>Lifecycle</strong>: Backups, restores, version upgrade compatibility checks.</li><li><strong>Monitor</strong>: Performance bottleneck analysis, query execution plans, PromQL metrics</li><li><strong>Replication</strong>: Replication health, sync states, role and security auditing</li><li><strong>View Config</strong>: Extension management, memory and engine-level tuning.</li></ul><p>That’s the pattern across every product in this launch. Breadth comes from covering 12 products. Depth comes from knowing each one properly.</p><h3>Four Agents, Zero Lock-in</h3><p>The same skills work across all four major AI coding agents. Pick yours:</p><h4>Gemini CLI</h4><p>One command to install, zero friction to configure. The extension discovery system handles the rest.</p><pre>gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql</pre><h4>Claude Code</h4><p>Native plugin architecture. Add the marketplace, install the plugin, and your database is ready to talk inside the same session you’re already in.</p><pre>/plugin marketplace add https://github.com/gemini-cli-extensions/cloud-sql-postgresql.git#0.4.0<br>/plugin install cloud-sql-postgresql@cloud-sql-postgresql-marketplace</pre><h4>Codex</h4><p>Clone the repo, drop it into ~/.codex/plugins/, wire it into a marketplace.json, and it appears in your plugin menu like it was always there.</p><h4>Antigravity</h4><p>Copy skill folders into your global or workspace-scoped skills directory. Antigravity finds them automatically at session start, no configuration required.</p><p>Use whichever agent fits how you work. The skills are yours regardless.</p><p>For detailed instructions, check out the <a href="https://github.com/gemini-cli-extensions/cloud-sql-postgresql#installation--usage">README</a>.</p><h3>Still Early: In the Best Way</h3><p>These skills are in beta. Pre-v1.0, which means two things: some interfaces will evolve before the stable release, and your feedback right now has an outsized impact on what ships.</p><p>This is the moment to tell us what’s missing, what’s confusing, and what you wish the agent could do that it can’t yet. We built a feedback <a href="https://docs.google.com/forms/d/e/1FAIpQLSfEGmLR46iipyNTgwTmIDJqzkAwDPXxbocpXpUbHXydiN1RTw/viewform">form</a> and we’re actually reading it.</p><p>More products, more agents, and deeper integrations are already in progress.</p><h3>The Part That Actually Matters</h3><p>The goal here isn’t to replace expertise. Senior engineers will still know things agents don’t. Judgment still lives in humans.</p><p>But the tax on expertise, the context switches, the doc lookups, the command-line archaeology, the fifteen-minute interruptions to your flow, that’s pure friction. It slows everyone down: the senior engineer who knows exactly what they want but has to look up the flag anyway, and the junior engineer who knows what they want but doesn’t know the right question to ask yet.</p><p>Agent skills eliminate that tax. The knowledge is still yours. The friction is gone.</p><p>Twelve products. Four agents. One language: yours.</p><p>Get started at <a href="http://github.com/gemini-cli-extensions">github.com/gemini-cli-extensions</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=856b1de4f97c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/your-databases-finally-speak-human-856b1de4f97c">Your Databases Finally Speak Human</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Multi-Source Reasoning with CockroachDB and Google Cloud Databases using MCP Toolbox]]></title>
            <link>https://medium.com/@mcp_toolbox/multi-source-reasoning-with-cockroachdb-and-google-cloud-databases-using-mcp-toolbox-64c39ea878f5?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/64c39ea878f5</guid>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[mcp-server]]></category>
            <category><![CDATA[cockroachdb]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 21 Apr 2026 17:35:31 GMT</pubDate>
            <atom:updated>2026-04-21T17:35:31.632Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*hpb8yAHYuY_4UXd2ZrD1lA.png" /></figure><h3>Cross-Cloud AI Agents: Multi-Source Reasoning with CockroachDB and Google Cloud Databases Using MCP Toolbox</h3><p>Written by:</p><ul><li>Virag Tripathi, Principal Partner Solutions Architect @ Cockroach Labs (<a href="https://www.linkedin.com/in/virag">LinkedIn</a>)</li><li>Averi Kitsch, Staff Software Engineer @ Google (<a href="https://www.linkedin.com/in/averikitsch">LinkedIn</a>)</li></ul><h3>The Problem: AI Agents Are Trapped in Single-Database Silos</h3><p>AI agents are reshaping how applications interact with data. They don’t just answer questions — they reason, plan, and act. But here’s the catch: most agent implementations today connect to a single data source. In the real world, enterprise data doesn’t live in one place. Your transactional records might sit in CockroachDB spanning regions across AWS and Azure, your analytics live in BigQuery, and your session metadata resides in a Cloud SQL for PostgreSQL instance on Google Cloud.</p><p>When an agent needs to answer a question like <em>“Which of our top-spending customers in EMEA had support tickets last quarter, and how do their order patterns compare to APAC?”</em> — it needs to reason across multiple databases, potentially across multiple clouds.</p><p>This is the <strong>cross-cloud, multi-source reasoning</strong> challenge. And it’s exactly what the new CockroachDB integration for MCP Toolbox for Databases was built to solve.</p><h3>The Solution: MCP Toolbox for Databases</h3><p>Think of <a href="https://github.com/googleapis/genai-toolbox">MCP Toolbox for Databases</a> as a unified control plane that finally makes multi-source data management simple. It is an open-source MCP server from Google that sits right between your AI agent and your databases, solving the headache of cross-source complexity.</p><p>Instead of getting tangled up in custom “glue code” for every single integration, you just define your sources and tools in one simple configuration file. A single MCP server instance then exposes all these diverse data sources — whether they are in different clouds or use different engines — through one consistent, unified endpoint.</p><p>Right now, it supports over 40 data sources, including favorites like AlloyDB, Spanner, BigQuery, and — most recently — <strong>CockroachDB</strong>. It handles the heavy lifting like connection pooling and authentication automatically, so your agent can focus on reasoning across your entire data landscape without the friction. Learn more about the cloud native features of <a href="https://www.cockroachlabs.com/">CockroachDB</a>.</p><h4>The CockroachDB Integration</h4><p>A new <a href="https://mcp-toolbox.dev/integrations/cockroachdb/source/">CockroachDB source</a> type was added to MCP Toolbox (<a href="https://github.com/googleapis/mcp-toolbox/releases/tag/v0.27.0">v0.27.0</a>+), backed by the official cockroach-go/v2 library. It supports:</p><ul><li>Standard username/password authentication</li><li>SSL/TLS configuration (required for CockroachDB Cloud)</li><li>Configurable connection retries with exponential backoff</li><li>Query timeouts and row limits for safety</li><li>Read-only mode enforcement for MCP best practices</li></ul><p>The integration includes <a href="https://mcp-toolbox.dev/documentation/getting-started/#build-time-vs-runtime-implementation">generic and custom tools</a> to facilitate both exploratory tasks and highly deterministic workflows. The initial integration includes four primary tools:</p><ul><li><strong>cockroachdb-sql</strong>: Execute SQL queries as prepared statements</li><li><strong>cockroachdb-execute-sql</strong>: Run parameterized SQL statements</li><li><strong>cockroachdb-list-tables</strong>: List all tables in a database</li><li><strong>cockroachdb-list-schemas</strong>: List schemas in a database</li></ul><p>These tools give an AI agent everything it needs to explore, query, and interact with a CockroachDB database — from schema discovery to complex analytical queries.</p><h3>Tutorial: Building a Cross-Cloud Agent with CockroachDB and Cloud SQL</h3><p>Now for the exciting part. Let’s build an AI agent that reasons across <strong>two</strong> databases:</p><ol><li><strong>CockroachDB</strong> (running on CockroachDB Cloud, spanning AWS regions) — holding global order and customer data</li><li><strong>Cloud SQL for PostgreSQL</strong> (on Google Cloud) — holding product catalog and inventory data</li></ol><p>The agent will answer questions that require joining insights from both sources — something no single-database agent can do.</p><h4>Step 1: Configure MCP Toolbox</h4><p>Create a tools.yaml that defines both data sources and the tools for each:</p><pre># === Sources ===<br>kind: source<br>name: cockroachdb_orders<br>type: cockroachdb<br>host: my-cluster.aws-us-east-1.cockroachlabs.cloud<br>port: &quot;26257&quot;<br>user: agent_readonly<br>password: ${COCKROACHDB_PASSWORD}<br>database: orders_db<br>queryParams:<br>  sslmode: require<br>  application_name: mcp-toolbox-agent<br>readOnlyMode: true          # Recommended MCP security setting<br>enableWriteMode: false      # Recommended MCP security setting<br>maxRowLimit: 1000           # Recommended MCP security setting<br>queryTimeoutSec: 30         # Recommended MCP security setting<br><br>---<br>kind: source<br>name: cloudsql_products<br>type: cloud-sql-postgres<br>project: my-gcp-project<br>region: us-central1<br>instance: product-catalog<br>database: products_db<br>user: agent_readonly<br>password: ${CLOUDSQL_PASSWORD}<br><br># === CockroachDB Tools (Global Orders) ===<br>---<br>kind: tool<br>name: get_top_customers<br>type: cockroachdb-sql<br>source: cockroachdb_orders<br>description: &gt;<br>  Get the top N customers by total order value in a given region.<br>  Returns customer_id, name, email, region, and total_spent.<br>statement: |<br>  SELECT c.id, c.name, c.email, c.region,<br>         SUM(o.total) AS total_spent<br>  FROM customers c<br>  JOIN orders o ON c.id = o.customer_id<br>  WHERE c.region = $1<br>  GROUP BY c.id, c.name, c.email, c.region<br>  ORDER BY total_spent DESC<br>  LIMIT $2<br>parameters:<br>  - name: region<br>    type: string<br>    description: Customer region (e.g., &#39;EMEA&#39;, &#39;APAC&#39;, &#39;NA&#39;)<br>  - name: limit<br>    type: integer<br>    description: Number of top customers to return<br><br>---<br>kind: tool<br>name: get_customer_orders<br>type: cockroachdb-sql<br>source: cockroachdb_orders<br>description: &gt;<br>  Get recent orders for a specific customer, including order items.<br>statement: |<br>  SELECT o.id AS order_id, o.created_at, o.total, o.status,<br>         oi.product_id, oi.quantity, oi.unit_price<br>  FROM orders o<br>  JOIN order_items oi ON o.id = oi.order_id<br>  WHERE o.customer_id = $1<br>  ORDER BY o.created_at DESC<br>  LIMIT 50<br>parameters:<br>  - name: customer_id<br>    type: string<br>    description: The customer&#39;s UUID<br><br>---<br>kind: tool<br>name: get_order_trends<br>type: cockroachdb-sql<br>source: cockroachdb_orders<br>description: &gt;<br>  Get monthly order trends for a region over the past 12 months.<br>statement: |<br>  SELECT DATE_TRUNC(&#39;month&#39;, o.created_at) AS month,<br>         COUNT(*) AS order_count,<br>         SUM(o.total) AS revenue<br>  FROM orders o<br>  JOIN customers c ON o.customer_id = c.id<br>  WHERE c.region = $1<br>    AND o.created_at &gt; NOW() - INTERVAL &#39;12 months&#39;<br>  GROUP BY month<br>  ORDER BY month<br>parameters:<br>  - name: region<br>    type: string<br>    description: Region to analyze<br><br># === Cloud SQL Tools (Product Catalog) ===<br>---<br>kind: tool<br>name: get_product_details<br>type: postgres-sql<br>source: cloudsql_products<br>description: &gt;<br>  Get product details including name, category, price, and stock level.<br>statement: |<br>  SELECT p.id, p.name, p.category, p.price,<br>         i.stock_level, i.warehouse_location<br>  FROM products p<br>  JOIN inventory i ON p.id = i.product_id<br>  WHERE p.id = ANY($1::uuid[])<br>parameters:<br>  - name: product_ids<br>    type: string<br>    description: Comma-separated list of product UUIDs<br><br>---<br>kind: tool<br>name: search_products<br>type: postgres-sql<br>source: cloudsql_products<br>description: &gt;<br>  Search products by name or category.<br>statement: |<br>  SELECT id, name, category, price<br>  FROM products<br>  WHERE name ILIKE &#39;%&#39; || $1 || &#39;%&#39;<br>     OR category ILIKE &#39;%&#39; || $1 || &#39;%&#39;<br>  LIMIT 20<br>parameters:<br>  - name: query<br>    type: string<br>    description: Search term for product name or category<br><br>---<br>kind: tool<br>name: get_low_stock_products<br>type: postgres-sql<br>source: cloudsql_products<br>description: &gt;<br>  Get products with stock levels below a given threshold.<br>statement: |<br>  SELECT p.id, p.name, p.category, i.stock_level,<br>         i.warehouse_location<br>  FROM products p<br>  JOIN inventory i ON p.id = i.product_id<br>  WHERE i.stock_level &lt; $1<br>  ORDER BY i.stock_level ASC<br>parameters:<br>  - name: threshold<br>    type: integer<br>    description: Stock level threshold</pre><h4>Step 2: Start MCP Toolbox</h4><p>Download and run MCP Toolbox. You can find all methods for installing MCP Toolbox at <a href="https://mcp-toolbox.dev/documentation/introduction/#install-toolbox">Install Toolbox</a>.</p><pre># Download the MCP Toolbox binary for Linux<br>curl -O https://storage.googleapis.com/genai-toolbox/v1.1.0/linux/amd64/toolbox<br>chmod +x toolbox<br># Start the MCP Toolbox server<br>./toolbox --tools-file tools.yaml</pre><p>MCP Toolbox is now serving both CockroachDB and Cloud SQL tools from a single MCP endpoint at http://localhost:5000/mcp.</p><h4>Step 3: Build the Agent with Google ADK — Python</h4><p>Let’s leverage the <strong>Google </strong><a href="https://github.com/google/adk-python"><strong>Agent Developer Kit (ADK)</strong></a> to construct an AI agent capable of orchestrating these cross-cloud tools.</p><pre>from google.adk.agents import Agent<br>from toolbox_core import ToolboxClient<br><br># Connect to MCP Toolbox<br>toolbox = ToolboxClient(&quot;http://localhost:5000&quot;)<br>tools = toolbox.load_toolset()<br><br># Create an agent with access to all cross-cloud tools<br>agent = Agent(<br>    model=&quot;gemini-2.0-flash&quot;,<br>    name=&quot;cross_cloud_analyst&quot;,<br>    instruction=&quot;&quot;&quot;You are a business analyst agent with access to two databases:<br><br>    1. CockroachDB (global orders): Customer data, orders, and revenue<br>       across EMEA, APAC, and NA regions.<br>    2. Cloud SQL (product catalog): Product details, categories, pricing,<br>       and inventory levels.<br><br>    When answering questions, reason across both data sources. For example,<br>    if asked about top customers, first query CockroachDB for order data,<br>    then look up the products they purchased from Cloud SQL to provide<br>    complete context.<br><br>    Always explain your reasoning and which data sources you used.&quot;&quot;&quot;,<br>    tools=tools,<br>)</pre><h4>Step 4: Ask Cross-Cloud Questions</h4><p>Now the agent can answer questions that span both databases:</p><p><em>“Who are our top 5 EMEA customers, what products are they buying, and are any of those products running low on stock?”</em></p><p>The agent will:</p><ol><li>Query CockroachDB (get-top-customers) to find the top 5 EMEA customers by spend.</li><li>Query CockroachDB (get-customer-orders) to get their recent order items and product IDs.</li><li>Query Cloud SQL (get-product-details) to enrich with product names and categories.</li><li>Query Cloud SQL (get-low-stock-products) to check inventory status.</li><li>Synthesize a unified answer with actionable insights.</li></ol><p>All of this happens through a single MCP Toolbox instance — no custom glue code, no bespoke API connectors, no data pipeline to maintain.</p><h3>Why This Matters: The Cross-Cloud Data Future</h3><p>Enterprise data is inherently distributed. Not just across tables or schemas, but across clouds, regions, and database engines — each chosen for a specific strength.</p><p>Data sources, such as globally distributed transactional databases like CockroachDB, and Google Cloud databases (e.g., Cloud SQL, AlloyDB, Spanner, and BigQuery), each serve distinct roles — from managed relational workloads to petabyte-scale analytics.</p><p>MCP Toolbox bridges them. By exposing all of these databases as tools through a single MCP server, you create an agent that sees the full picture. It can correlate transactional data in CockroachDB with analytics in BigQuery, match orders against inventory in Cloud SQL, or compare CockroachDB-hosted financial records with Spanner-hosted compliance data.</p><p>This is the <strong>cross-cloud data source</strong> pattern: let your agent be the integration layer, not your application code.</p><h3>Getting Started</h3><ul><li><strong>Explore the Code:</strong> Dive into the <strong>MCP Toolbox </strong><a href="https://github.com/googleapis/genai-toolbox"><strong>GitHub repository</strong></a> and check out the latest <a href="https://googleapis.github.io/genai-toolbox">documentation</a> to see how the ecosystem is evolving.</li><li><strong>Get Started:</strong> <a href="https://cockroachlabs.cloud">Sign up for <strong>CockroachDB Cloud</strong></a></li><li><strong>Master the Configuration:</strong> Consult the <a href="https://googleapis.github.io/genai-toolbox/resources/sources/cockroachdb/"><strong>CockroachDB Reference Docs</strong></a> for deep dives into cluster setup, performance tuning, and advanced configuration parameters.</li><li><strong>Choose Your Language:</strong> Build your way with <strong>MCP Toolbox SDKs</strong>, featuring robust support and native libraries for <a href="https://github.com/googleapis/mcp-toolbox-sdk-python">Python</a>, <a href="https://github.com/googleapis/mcp-toolbox-sdk-go">Go</a>, <a href="https://github.com/googleapis/mcp-toolbox-sdk-js">JavaScript</a>, and <a href="https://github.com/googleapis/mcp-toolbox-sdk-java">Java</a></li><li><strong>Connect with Peers:</strong> Join the conversation in the <a href="https://discord.gg/mcp-toolbox"><strong>MCP Toolbox Discord</strong></a> or the <a href="https://forum.cockroachlabs.com/"><strong>CockroachDB Community Forum</strong></a> to troubleshoot issues, share ideas, and stay updated.</li></ul><h3>What’s Next</h3><p>The CockroachDB integration is just the beginning. We’re exploring additional tools — schema introspection, index recommendations, query performance diagnostics — and deeper patterns around multi-source agentic workflows. If you build something with CockroachDB and MCP Toolbox, we’d love to hear about it.</p><p>The future of AI agents isn’t about connecting to <em>a</em> database. It’s about connecting to <em>all</em> of them — across clouds, across regions, across engines — and letting the agent reason over the full breadth of your data.</p><h3>About the Authors</h3><p><em>Virag Tripathi is a Principal Solutions Architect at Cockroach Labs, where he works at the intersection of distributed systems, cloud partnerships, and AI-native data architectures. He contributed the CockroachDB integration to Google’s MCP Toolbox for Databases.</em></p><p><em>Averi Kitsch is a Staff Software Engineer at Google, leading the MCP Toolbox for Databases project.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=64c39ea878f5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MCP Toolbox v1.0: 
The Open-Source Framework for Secure Agentic Data Access]]></title>
            <link>https://medium.com/google-cloud/mcp-toolbox-v1-0-the-open-source-framework-for-secure-agentic-data-access-3c2199546ba8?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/3c2199546ba8</guid>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[mcp-toolbox-for-databases]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Wed, 15 Apr 2026 23:37:06 GMT</pubDate>
            <atom:updated>2026-04-16T04:43:41.630Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*20hOhWs-7B3LG778__yrqw.jpeg" /></figure><h3>MCP Toolbox v1.0: <br>The Open-Source Framework for Secure Agentic Data Access</h3><p>Written by:</p><ul><li>Kurtis Van Gent, Senior Staff Software Engineer @ Google (<a href="https://www.linkedin.com/in/kurtisvg/">Linkedin</a>)</li><li>Averi Kitsch, Staff Software Engineer @ Google (<a href="https://www.linkedin.com/in/averikitsch/">Linkedin</a>)</li></ul><p>Building reliable AI agents requires a strict separation between reasoning logic and system execution. Large language models (LLMs) can plan and process information effectively, but their utility in production environments depends entirely on a secure, standardized way to interact with enterprise data.</p><p>This is the core problem solved by the Model Context Protocol (MCP). Acting as a universal interface between AI models and external tools, MCP allows developers to connect agents to real-world systems without building bespoke integrations for every new model. The importance of this standard was underscored recently when <a href="https://aaif.io/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation-aaif-anchored-by-new-project-contributions-including-model-context-protocol-mcp-goose-and-agents-md/">MCP joined the Agentic AI Foundation (AAIF)</a> under the Linux Foundation, marking a shift toward interoperable agentic infrastructure.</p><p><strong>Today, we are announcing that the open-source MCP Toolbox for Databases has reached version 1.0.</strong></p><p>Built in the open and hardened by real-world developer feedback, this framework connects your AI agents directly to over 40 enterprise data sources. With the 1.0 release, the Toolbox provides a stable, backwards-compatible foundation for building agentic applications, giving you the strict control and customization required for true production workloads.</p><h3>What’s New in v1.0: Built for Production Workloads</h3><p>When we <a href="https://cloud.google.com/blog/products/ai-machine-learning/announcing-gen-ai-toolbox-for-databases-get-started-today?e=48754805">announced the public Beta for MCP Toolbox for Databases</a> just over a year ago, the goal was straightforward: provide a reliable bridge between language models and enterprise data. Since then, the project has evolved into a multi-database MCP framework for customizable tools. The v1.0 release means the Toolbox has reached a stable, backwards-compatible foundation suitable for production workloads.</p><p>Here is what is new and hardened in this release:</p><ul><li><strong>Expanded Ecosystem (40+ Data Sources):</strong> Driven by community contributions, Toolbox 1.0 now supports over 40 data sources. This includes native connectivity for Google Cloud databases like AlloyDB, Spanner, BigQuery, and Cloud SQL, alongside third-party systems including Oracle, MongoDB, Snowflake, and open-source PostgreSQL.</li><li><strong>Client SDKs &amp; Framework Integrations:</strong> Developers can integrate Toolbox natively using our<a href="https://www.google.com/search?q=https://github.com/googleapis/mcp-toolbox-python"> Python</a>,<a href="https://www.google.com/search?q=https://github.com/googleapis/mcp-toolbox-go"> Go</a>, and<a href="https://www.google.com/search?q=https://github.com/googleapis/mcp-toolbox-ts"> TypeScript/JavaScript</a> SDKs, and most recently, our<a href="https://www.google.com/search?q=https://github.com/googleapis/mcp-toolbox-java"> Java SDK</a> to cover the most common enterprise backend environments. We’ve also built deeper integrations into popular frameworks, allowing you to connect Toolbox directly to LangChain, LlamaIndex, and the Agent Development Kit (ADK) with minimal boilerplate.</li><li><strong>End-to-End Telemetry:</strong> Production environments require observability. Toolbox 1.0 includes built-in OpenTelemetry support adhering to the official<a href="https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/"> MCP semantic conventions</a>. This ensures every agent-to-database interaction is traceable with standardized metrics and logs.</li><li><strong>Skills Autogeneration:</strong> This release introduces “Skills,” a modular way to package and reuse operational tasks (like database troubleshooting). The Toolbox can autogenerate Skills, instantly turning any toolset you build into a package of scripts and resources ready to be deployed.</li><li><strong>MCP Authorization Support:</strong> Toolbox 1.0 implements MCP’s latest spec for Authorization, functioning as a fully compliant OAuth 2.1 resource server. This provides a standardized way to protect sensitive tools and data through automated discovery and rigorous token validation.</li></ul><h3>Bridging the Trust Gap with Custom Tools</h3><p>The open-source MCP Toolbox is designed for developers building custom agentic applications who require full control over system execution. When you deploy the Toolbox — whether locally, in a container, or via services like Cloud Run — you are prioritizing deep customization.</p><p>The Toolbox lets you explicitly define which tools are exposed to the agent. You can tightly modify almost everything — including resources the tool can access, descriptions to improve the language model’s prompt routing, or construct highly customized, bounded tools that execute exact, pre-approved business logic against your specific data schemas.</p><p>Consider a customer support chatbot. To allow a user to look up their order status, you wouldn’t just hand the language model your raw database connection strings and unfiltered access to your database. Doing so creates a massive “trust gap” between a probabilistic model and your strict, deterministic production database. It opens the door to unoptimized queries, hallucinated table names, and severe security risks.</p><p>MCP Toolbox provides a framework for developers to bridge this gap. Instead of granting an agent unrestricted schema access, you use a declarative configuration file to define specific, safe actions.</p><p>This framework allows you to wrap complex business logic into fixed SQL queries with precise parameter bindings. The Toolbox acts as a protective gateway — validating inputs and ensuring the agent can only execute the exact logic you’ve pre-approved. This approach keeps the agent flexible during user conversations while keeping your data layer completely locked down.</p><h3>Practical Example: Secure Tool Definition</h3><p>Let’s look at a practical example. Consider a multi-tenant SaaS application where users can ask an AI agent to analyze their recent API usage.</p><p>The agent needs to fetch usage logs, but you must ensure strict tenant isolation. You absolutely cannot grant the language model generic read access and trust it to filter by the correct tenant ID. With MCP Toolbox, you define the allowed action and its strict boundaries in a config.yaml file:</p><pre>kind: tool<br>name: get_tenant_usage<br>type: postgres-sql<br>source: postgres-prod<br>description: &quot;Retrieve API usage statistics for the current billing period.&quot;<br>parameters:<br>  - name: limit<br>    type: integer<br>    default: 10<br>    maxValue: 50<br>  - name: tenant_id  # Bound at runtime, not agent-controlled!<br>    type: string<br>statement: |<br>  SELECT endpoint, request_count, error_rate, last_accessed<br>  FROM api_usage_logs<br>  WHERE tenant_id = $2<br>  ORDER BY request_count DESC<br>  LIMIT $1;</pre><p>In this configuration, the query structure is entirely fixed. The limit parameter is capped at a maximum value to prevent massive data pulls, and tenant_id is defined as a required parameter.</p><p>When you initialize the Toolbox in your backend application using one of our SDKs (like <a href="https://github.com/googleapis/mcp-toolbox-sdk-python">Python</a>), you bind this sensitive parameter server-side so it remains completely outside of the language model’s control:</p><pre>from toolbox_core import ToolboxClient<br><br># Initialize the client and bind the strict tenant isolation parameter<br>async with ToolboxClient(&quot;http://127.0.0.1:5000&quot;) as client:<br>    tools = await client.load_toolset(<br>        &quot;tenant_analytics&quot;,<br>        bound_params={<br>            # This is securely injected by your backend auth layer, not the LLM<br>            &quot;tenant_id&quot;: &quot;org_7b89fA21&quot;, <br>        }<br>    )<br>    <br># &#39;tools&#39; are now securely bounded and ready to be passed to your agent framework</pre><p>This setup ensures the agent remains flexible during user interactions, while your database layer is securely locked behind deterministic execution.</p><h3>Conclusion &amp; Next Steps</h3><p>The v1.0 release of MCP Toolbox is a sign of our stability, and the confidence developers can feel in building their applications on top of it. Engineering teams can now build and deploy secure agentic applications without the risk of upstream breaking changes.</p><p>Ready to get started?</p><ul><li><strong>Explore the Code:</strong> Star and fork the<a href="https://github.com/googleapis/mcp-toolbox"> MCP Toolbox repository on GitHub</a> to see how it works under the hood and explore the growing ecosystem of community-contributed tools.</li><li><strong>Read the Docs:</strong> Visit<a href="https://mcp-toolbox.dev/"> mcp-toolbox.dev</a> for quickstarts, SDK references, and advanced configuration guides.</li><li><strong>Join the Community:</strong> Join our <a href="https://discord.gg/Dmm69peqjh">Community Discord</a>, file an <a href="https://github.com/googleapis/mcp-toolbox/issues/new/choose">issue or feature request</a>, or <a href="https://github.com/googleapis/mcp-toolbox/compare">send us a PR</a>.</li></ul><p><strong>See us at Google Cloud Next 2026:</strong> If you are heading to Las Vegas, don’t miss the session <a href="https://www.googlecloudevents.com/next-vegas/session-library?session_id=3912334&amp;name=power-intelligent-agents-with-ai-native-databases"><em>Power Intelligent Agents with AI-Native Databases</em></a>. Join MCP co-creator David Soria Parra (Anthropic) alongside Amit Ganesh and Yannis Papakonstantinou (Google) to hear what’s next for MCP and how AI-native databases are shaping the future of agentic infrastructure.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3c2199546ba8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/mcp-toolbox-v1-0-the-open-source-framework-for-secure-agentic-data-access-3c2199546ba8">MCP Toolbox v1.0: 
The Open-Source Framework for Secure Agentic Data Access</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From Lag to Lightning: Optimizing MCP Toolbox with Built-in Observability]]></title>
            <link>https://medium.com/google-cloud/from-lag-to-lightning-optimizing-mcp-toolbox-with-built-in-observability-d0298aefc7d7?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/d0298aefc7d7</guid>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[observability]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[mcp-server]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Wed, 01 Apr 2026 21:13:32 GMT</pubDate>
            <atom:updated>2026-05-29T11:09:25.968Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9mK6r8VcZQFcywB9t52g_g.jpeg" /></figure><p>Written by:</p><ul><li>Parth Ajmers &amp; Shubham Palriwala, Agnost AI, Founders</li><li>Yuan Teoh, Google, Software Engineer</li></ul><p>Production deployments of MCP servers can sometimes encounter performance challenges, often leaving developers unsure if the cause is the network, a server-side problem, or the database query. Today’s update introduces a solution that significantly simplifies identifying these performance bottlenecks.</p><p>In collaboration with <a href="https://agnost.ai/">Agnost AI</a>, we have integrated comprehensive observability features into <a href="https://mcp-toolbox.dev/documentation/monitoring/telemetry/#telemetry">MCP Toolbox for Databases</a>. This includes distributed tracing for STDIO, SSE, and HTTP transports, along with latency histograms for both the server and client SDKs. We have also included an UpDown Counter to track active_sessions at any instant. Toolbox has supported OpenTelemetry since its inception; however, we are pleased to announce that we now adhere to the <a href="https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/">OpenTelemetry MCP Semantic Conventions.</a></p><h3>Streamlining Diagnosis for Developers</h3><p>Consider Alex, a developer who receives an alert for high p95 latency for their Toolbox agent. Previously, Alex would have spent hours manually correlating logs from various systems. Now, end-to-end distributed tracing provides a single, unified view of the slow request.</p><p>By evaluating client-side latency (mcp.client.operation.duration) against the server-side span, Alex can quickly eliminate network transit as the cause. Furthermore, the custom toolbox.tool.execution.duration metric isolates raw database processing time, confirming if the bottleneck lies within the query itself. This full-stack visibility shifts the debugging process from tedious “log archaeology” to efficient performance diagnosis.</p><p>With comprehensive telemetry features integrated, the operational overhead of managing MCP-based agents is significantly reduced. Developers can leverage high-level metric queries and deep-dive trace lookups to answer critical questions about system health and performance:</p><ul><li><strong>Real-time Capacity &amp; Infrastructure Tracking:</strong> Utilize the toolbox.server.mcp.active_sessions gauge to monitor the current count of active sessions. This data can be categorized by transport protocols (SSE or STDIO) to identify saturation points or detect potential session leaks in the system.</li><li><strong>Performance Benchmarking:</strong> Analyze how p95 latency varies across different MCP methods (<em>initialize</em>, <em>tools/list</em>, <em>tools/call</em>) using mcp.server.operation.duration. This allows for precise performance comparison between various transports and operations.</li><li><strong>Tool Usage &amp; Hotspots:</strong> Identify which specific tools (e.g., execute_sql) are experiencing the highest invocation rates and monitor their specific error rates and primary failure types (such as internal_error or invalid_params) using the gen_ai.tool.name and error.type attributes.</li><li><strong>Root Cause Isolation:</strong> When a request fails, determine if the failure originated at the server, within the network, or on the client side. Distributed traces provide a breakdown of latency, distinguishing between raw database execution time (via toolbox.tool.execution.duration), protocol overhead, and network transit.</li><li><strong>Protocol &amp; Compliance Monitoring:</strong> Track clients protocol versions using the mcp.protocol.version attribute, ensuring your fleet stays updated with the latest MCP standards</li><li><strong>End-to-End Visibility:</strong> Visualize the full call chain for any specific failure. By comparing client-perceived latency (mcp.client.operation.duration) against server-perceived latency, you can pinpoint exactly where delays are introduced in the end-to-end request lifecycle.</li></ul><h3>Activating Telemetry within Toolbox</h3><p>Standard server-side configuration applies. To run Toolbox, simply include either the --<em>telemetry-otlp</em> or --<em>telemetry-gcp</em> flag:</p><pre>./toolbox - telemetry-otlp=&quot;https://your-otel-collector:4318&quot;<br># Alternatively, utilize GCP Cloud Trace/Monitoring<br>./toolbox - telemetry-gcp</pre><p>For SDK integration:</p><ol><li>Ensure toolbox-core is installed with the telemetry feature enabled:</li></ol><pre>pip install toolbox-core[telemetry]</pre><p>2. Configure your ToolboxClient by providing the telemetry endpoint URL:</p><pre>from toolbox_core import ToolboxClient<br><br>client = ToolboxClient(<br>    url=&quot;http://localhost:5000&quot;,<br>    telemetry_url=&quot;https://your-otel-collector:4318&quot;<br>)</pre><p>Metrics and spans are generated automatically for <em>initialize</em>, <em>tools/list</em>, and <em>tools/call</em>. The SDK manages span creation and traceparent injection. These can be used with any OTLP-compatible backend or integrated directly into <a href="https://cloud.google.com/monitoring?e=48754805">Google Cloud Monitoring</a> and Agnost AI for native MCP dashboards.</p><h4>Seamless SDK-to-Server Connectivity</h4><p>Great news for users of the Toolbox SDKs: integration is now completely automatic! The Python SDK streamlines the process by activating the client span and injecting the traceparent before any MCP request is dispatched:</p><pre># Automatic when telemetry_url is set - no manual instrumentation needed<br>meta = MCPMeta(traceparent=&quot;00-4bf92f...&quot;, tracestate=&quot;&quot;)<br>params = CallToolRequestParams(name=&quot;execute_sql&quot;, arguments={...}, field_meta=meta)</pre><p>On the server side, Toolbox automatically identifies the traceparent within params._meta to establish the server span. This pre-configured synchronization removes the need for manual context passing or modifications to your agent code.</p><h3>End-to-End Visibility: Unified Spans and Derived Metric</h3><h4>Spans</h4><p>By updating Toolbox spans to align with the OpenTelemetry MCP semantic convention, we have fully re-engineered our generated spans.</p><p>Enabling telemetry during a <em>tools/call</em> now produces a distributed trace that maps the entire path from the client request down to the database. Here are example spans for all various procedures across transport types:</p><p><strong>STDIO Initialize</strong></p><pre>initialize (CLIENT, trace=t1, span=s1) # FROM MCP Client<br>|<br>--- toolbox/server/mcp/stdio (SERVER, trace=t1, span=s2, parent=s1) # IN TOOLBOX<br>    |<br>    --- initialize (SERVER, trace=t1, span=s3, parent=s2) # IN TOOLBOX</pre><p><strong>STDIO Tool Call</strong></p><pre>tools/call get-weather (CLIENT, trace=t1, span=s1) # FROM MCP Client<br>|<br>--- toolbox/server/mcp/stdio (SERVER, trace=t1, span=s2, parent=s1) # IN TOOLBOX<br>    |<br>    --- tools/call get-weather (SERVER, trace=t1, span=s3, parent=s2) # IN TOOLBOX</pre><p><strong>SSE Connection</strong></p><pre>connection (CLIENT, trace=t1, span=s2, parent=s1) # FROM MCP Client<br>|<br>--- toolbox/server/mcp/sse (SERVER, trace=t1, span=s3, parent=s2) # IN TOOLBOX</pre><p><strong>HTTP Initialize</strong></p><pre>initialize (CLIENT, trace=t1, span=s1) # FROM MCP Client<br>|<br>--- toolbox/server/mcp/http (SERVER, trace=t1, span=s2, parent=s1) # IN TOOLBOX<br>    |<br>    --- initialize (SERVER, trace=t1, span=s3, parent=s2) # IN TOOLBOX</pre><p><strong>HTTP Tool Call</strong></p><pre>tools/call get-weather (CLIENT, trace=t1, span=s1) # FROM MCP Client<br>|<br>--- toolbox/server/mcp/http (SERVER, trace=t1, span=s2, parent=s1) # IN TOOLBOX<br>    |<br>    --- tools/call get-weather (SERVER, trace=t1, span=s3, parent=s2) # IN TOOLBOX</pre><p>Through the injection of a W3C traceparent into the MCP request’s params._meta field, server and client spans are now fully integrated, with the server span acting as a child of the client span. This architecture enables the collection of client latency, server latency, and raw database processing time as distinct, correlated signals within a single, unified trace.</p><p>The primary advantage of these telemetry traces in the Toolbox is the delivery of end-to-end visibility, which streamlines performance diagnosis across the entire stack. By mapping the complete request path from the client to the database, developers can immediately identify bottlenecks and determine the exact time spent on the network, the server, or raw database execution. These interconnected spans effectively eliminate previous “blind spots” for transports like STDIO and significantly enhance production debugging.</p><h4>Metrics</h4><p>We have launched new metrics to provide comprehensive visibility into server performance. While traces offer a granular, single-request perspective, these metrics deliver the aggregate data necessary for a deeper understanding of system health.</p><p><strong>Server-side Metrics</strong></p><ul><li><strong>mcp.server.operation.duration</strong>: Latency for initialize, tools/list, and tools/call methods across all transports.</li><li><strong>mcp.server.session.duration</strong>: Total duration of SSE and STDIO sessions.</li><li><strong>toolbox.server.mcp.active_sessions</strong>: A real-time counter of active session counts.</li><li><strong>toolbox.tool.execution.duration</strong>: Raw database execution time, excluding protocol overhead.</li></ul><p><strong>SDK-side Metrics</strong></p><ul><li><strong>mcp.client.operation.duration</strong>: Latency per operation from the client’s perspective.</li><li><strong>mcp.client.session.duration</strong>: Lifespan of a client session from start to finish.</li></ul><p>By monitoring key aggregate indicators, such as method-specific latency and total session length, users can efficiently evaluate system health. Custom signals like toolbox.server.mcp.active_sessions are essential for real-time capacity planning and detecting session leaks. Additionally, toolbox.tool.execution.duration allows for the isolation of database performance from protocol processing. This telemetry suite shifts operational analysis from tedious log review to streamlined, single-metric queries.</p><p>The active_sessions and tool.execution.duration metrics are unique Toolbox enhancements that go beyond standard OTel MCP specifications. The real-time data from the session gauge is vital for infrastructure management, while the execution duration metric is captured within the tool call handler to pinpoint raw database performance.</p><p><em>Note: Histogram recording follows MCP-spec bucket boundaries: [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300] seconds.</em></p><h4>Telemetry Attributes</h4><p>To empower users with granular filtering, every span and metric includes a comprehensive set of attributes. These metadata points allow for the differentiation of signals based on transport protocols, specific tool names, and versioning.</p><p>Without any additional configuration, you can analyze your telemetry data using the following standard attribute set:</p><ul><li><strong>gen_ai.tool.name</strong>: The name of the tool being invoked, if applicable.</li><li><strong>mcp.method.name</strong>: The name of the method (e.g., tools/call, tools/list, or initialize).</li><li><strong>toolset.name</strong>: The name of the toolset, if applicable.</li><li><strong>network.transport</strong>: The transport protocol used for the MCP session (e.g., tcp or pipe).</li><li><strong>network.protocol.name</strong>: The name of the network protocol used (e.g., http or stdio).</li><li><strong>mcp.protocol.version</strong>: The protocol version (e.g., 2024-11-05, 2025-03-26, 2025-06-18, or 2025-11-25).</li><li><strong>error.type</strong>: Type of error occurred, if applicable (e.g., internal_error, invalid_params, or parse_error).</li></ul><h3><strong>Get Involved!</strong></h3><p>The MCP governance committee has identified <a href="https://modelcontextprotocol.io/development/roadmap#4-enterprise-readiness">audit trails and observability</a> as an open gap under Enterprise Readiness:</p><blockquote><em>“end-to-end visibility into what a client requested and what a server did, in a form enterprises can feed into their existing logging and compliance pipelines.”</em></blockquote><p>Our upcoming roadmap prioritizes message-level transparency, authentication context, and client identity. In collaboration with Agnost AI, we are building enterprise-ready observability solutions and encourage you to share your thoughts on <a href="https://discord.gg/Dmm69peqjh">Discord</a>.</p><p>What additional data points are essential for your MCP infrastructure? Connect with us on <a href="https://github.com/googleapis/mcp-toolbox">GitHub</a>, <a href="https://discord.gg/Dmm69peqjh">Discord</a>, or via the comments to let us know.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d0298aefc7d7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/from-lag-to-lightning-optimizing-mcp-toolbox-with-built-in-observability-d0298aefc7d7">From Lag to Lightning: Optimizing MCP Toolbox with Built-in Observability</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Semantic Intelligence Layer for the AI Data Stack]]></title>
            <link>https://medium.com/google-cloud/building-a-semantic-intelligence-layer-for-the-ai-data-stack-0c867fd23e6f?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/0c867fd23e6f</guid>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[enterprise-ai]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 24 Mar 2026 19:42:31 GMT</pubDate>
            <atom:updated>2026-04-13T08:18:09.931Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kjdqSvEe403TJNwjHmyBwg.png" /></figure><p>Written by:</p><ul><li>Mike DeAngelo, Developer Relations Engineer @ Google (<a href="https://www.linkedin.com/in/mike-deangelo/">LinkedIn</a>)</li><li>Nick Acosta, Developer Advocate @ Collate (<a href="https://www.linkedin.com/in/nickacosta/">LinkedIn</a>)</li></ul><p>Imagine a dashboard filled with perfectly modeled and tested data, bringing it to your team for the next move, and everyone quickly aligning around an obvious decision. But a few weeks later, the results didn’t match expectations. Data teams are better than ever at collecting, cleaning, and visualizing data, but can still struggle with communicating assumptions, limitations, and conditions present in data’s semantics.</p><p>At <a href="https://open-metadata.org/case-study/kansai-airports">Kansai Airports,</a> different departments had different definitions of “passengers.” For some teams, a “passenger” was only every paying customer, others included crew and infants. Aligning on a standard definition of this key metric helped make the airport’s data more people-ready, but the jump to AI-ready data is even steeper because an agent will not stop and deliberate when it sees two different “passenger” counts. While <a href="https://open-metadata.org/">OpenMetadata</a> acts as a semantic library storing shared definitions, relationships, and context, <a href="https://github.com/googleapis/genai-toolbox">MCP Toolbox for Databases</a> empowers AI agents to generate and run application code and tests with a deep understanding of your enterprise data. Together, these open-source tools use semantic intelligence to turn metadata into meaning and allow AI to take action that is trustworthy, explainable, and safe.</p><p>In this article, we provide a guide on configuring OpenMetadata alongside MCP Toolbox. We also highlight various use cases currently employed by the open-source community to effectively scale AI operations.</p><h3>Step-By-Step Guide</h3><p>OpenMetadata can be set up quickly in a local environment using Docker. Each deployment has an embedded MCP Server already integrated into the OpenMetadata platform. The MCP server leverages the same authorization engine established for OpenMetadata APIs. This enables any MCP client to interface with existing OpenMetadata integrations for read or write operations, while adhering to established roles and policies. Consequently, agents are granted appropriate access to the specific data and functional logic required to automate data operations effectively.</p><h4>Step 1: Download OpenMetadata</h4><p><a href="https://www.docker.com/products/docker-desktop/">Download Docker</a> and run the following command to get OpenMetadata’s Docker Compose file:</p><pre>curl -sL -o docker-compose-postgres.yml https://github.com/open-metadata/OpenMetadata/releases/download/1.12.3-release/docker-compose-postgres.yml</pre><p>Once downloaded, start OpenMetadata and its dependencies by running:</p><pre>docker compose -f docker-compose-postgres.yml up --d</pre><p>This will install a OpenMetadata standalone instance on your local machine. OpenMetadata’s embedded MCP Server architecture fully integrates an MCP Server into OpenMetadata by default, enabling AI Agents to act on assets stored in OpenMetadata without any setup and giving agents the proper access to the right data and functional logic to automate data operations.</p><h3>Step 2: Generate Looker Credentials</h3><p>You will need an Looker API client_id and client_secret. You can find that information from <a href="https://docs.cloud.google.com/looker/docs/api-auth#authentication_with_an_sdk">Looker API authentication</a>. If the “Manage” button is greyed out, contact your Looker administrator for help.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FjnZ-MUxBiSYKmKKXPjKmQ.gif" /><figcaption>Generate API credentials for a Looker user account.</figcaption></figure><h3>Step 3: Setup MCP Toolbox and OpenMetadata MCP in Gemini CLI</h3><p>In this section, we will be installing MCP Toolbox with <a href="https://github.com/google-gemini/gemini-cli">Gemini CLI</a>. Instructions for installing MCP Toolbox with other agents can be found <a href="https://mcp-toolbox.dev/documentation/connect-to/ides/looker_mcp/">here</a>.</p><p>To get started, install the Gemini CLI:</p><pre>npm install -g @google/gemini-cli</pre><p>Next, add the MCP Toolbox server and OpenMetadata MCP Server:</p><pre>gemini mcp add -t stdio looker-toolbox \<br>  npx -y @toolbox-sdk/server --stdio --prebuilt looker \<br>  -e LOOKER_BASE_URL=https://looker.example.com \<br>  -e LOOKER_CLIENT_ID=&quot;&lt;YOUR_LOOKER_CLIENT_ID&gt;&quot; \<br>  -e LOOKER_CLIENT_SECRET=&quot;&lt;YOUR_LOOKER_CLIENT_SECRET&gt;&quot; \<br>  -e LOOKER_VERIFY_SSL=true<br><br>gemini mcp add -t stdio OpenMetadata \<br>  npx -y mcp-remote http://localhost:8585/mcp \<br>  --auth-server-url=http://localhost:8585/mcp --client-id=OpenMetadata \<br>  --verbose --clean &quot;--header&quot; &quot;Authorization:${AUTH_HEADER}&quot; \<br>  -e AUTH_HEADER=&quot;Bearer &lt;YOUR_OPENMETADATA_JWT_TOKEN&gt;&quot;</pre><p>Now, editing ~/.gemini/settings.json will allow you to add Looker and OpenMetadata MCP Servers to Gemini-CLI, your settings.json should contain the following:</p><pre>{<br>  &quot;security&quot;: {<br>    &quot;auth&quot;: {<br>      &quot;selectedType&quot;: &quot;oauth-personal&quot;<br>    }<br>  },<br>  &quot;ui&quot;: {<br>    &quot;theme&quot;: &quot;Default Light&quot;<br>  },<br>  &quot;mcpServers&quot;: {<br>    &quot;looker-toolbox&quot;: {<br>      &quot;command&quot;: &quot;npx&quot;,<br>      &quot;args&quot;: [<br>        &quot;-y&quot;,<br>        &quot;@toolbox-sdk/server&quot;,<br>        &quot;--stdio&quot;,<br>        &quot;--prebuilt&quot;,<br>        &quot;looker&quot;<br>      ],<br>      &quot;env&quot;: {<br>        &quot;LOOKER_BASE_URL&quot;: &quot;https://looker.example.com&quot;,<br>        &quot;LOOKER_CLIENT_ID&quot;: &quot;&lt;YOUR_LOOKER_CLIENT_ID&gt;&quot;,<br>        &quot;LOOKER_CLIENT_SECRET&quot;: &quot;&lt;YOUR_LOOKER_CLIENT_SECRET&gt;&quot;,<br>        &quot;LOOKER_VERIFY_SSL&quot;: &quot;true&quot;<br>      }<br>    },<br>    &quot;OpenMetadata&quot;: {<br>      &quot;command&quot;: &quot;npx&quot;,<br>      &quot;args&quot;: [<br>        &quot;-y&quot;,<br>        &quot;mcp-remote&quot;,<br>        &quot;http://localhost:8585/mcp&quot;,<br>        &quot;--auth-server-url=http://localhost:8585/mcp&quot;,<br>        &quot;--client-id=OpenMetadata&quot;,<br>        &quot;--verbose&quot;,<br>        &quot;--clean&quot;,<br>        &quot;--header&quot;,<br>        &quot;Authorization:${AUTH_HEADER}&quot;<br>      ],<br>      &quot;env&quot;: {<br>        &quot;AUTH_HEADER&quot;: &quot;Bearer &lt;YOUR_OPENMETADATA_JWT_TOKEN&quot;<br>      }<br>    }<br>  }<br>}</pre><p>To get LookML development tools in addition to the query and content tools, change the line</p><pre>&quot;args&quot;: [&quot;--stdio&quot;, &quot;--prebuilt&quot;, &quot;looker&quot;],<br># to<br>&quot;args&quot;: [&quot;--stdio&quot;, &quot;--prebuilt&quot;, &quot;looker,looker-dev&quot;],</pre><p>Note: this guide is running Gemini CLI from the home path (~) and <a href="https://geminicli.com/docs/get-started/authentication/">authenticated with a Google Account</a>.</p><p>You may have to restart Gemini-CLI for it to pick up these new MCP Servers. Once restarted, type /mcp and you should see a list of available tools like:</p><pre>Configured MCP servers:<br><br>   🟢 looker-toolbox - Ready (10 tools)<br>     - looker-toolbox__get_models<br>     - looker-toolbox__query<br>     - looker-toolbox__get_looks<br>     - looker-toolbox__get_measures<br>     - looker-toolbox__get_filters<br>     - looker-toolbox__get_parameters<br>     - looker-toolbox__get_explores<br>     - looker-toolbox__query_sql<br>     - looker-toolbox__get_dimensions<br>     - looker-toolbox__run_look<br>     - looker-toolbox__query_url<br><br>🟢 OpenMetadata - Ready (12 tools, 2 prompts)<br>  Tools:<br>  - mcp_OpenMetadata_create_glossary<br>  - mcp_OpenMetadata_create_glossary_term<br>  - mcp_OpenMetadata_create_lineage<br>  - mcp_OpenMetadata_create_metric<br>  - mcp_OpenMetadata_create_test_case<br>  - mcp_OpenMetadata_get_entity_details<br>  - mcp_OpenMetadata_get_entity_lineage<br>  - mcp_OpenMetadata_get_test_definitions<br>  - mcp_OpenMetadata_patch_entity<br>  - mcp_OpenMetadata_root_cause_analysis<br>  - mcp_OpenMetadata_search_metadata<br>  - mcp_OpenMetadata_semantic_search<br>  Prompts:<br>  - create-greeting<br>  - search_metadata</pre><h4>Step 4: Ingest Looker metadata into OpenMetadata</h4><p>OpenMetadata ingests metadata from over 120 cloud data services. Adding Looker to OpenMetadata helps to track and manage ownership and lineage of Looker Dashboards, Charts, and LookML Models across data sources and departments. To add Looker to OpenMetadata:</p><ol><li>In OpenMetadata, click “Settings” at the bottom of the side navigation bar and then “Services”. Looker will be service type: “Dashboards”. After selecting “Dashboards”, select “Add New Service” and look for the Looker icon.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7VAI2VKbbR1KYcc8bHs3Cg.png" /><figcaption>Selecting Looker as the new dashboard service type.</figcaption></figure><p>2. After providing a Service Name, OpenMetadata needs the following to connect to Looker:</p><ul><li><strong>Client ID</strong>: User’s Client ID to authenticate to the SDK. This user should have privileges to read all the metadata in Looker.</li><li><strong>Client Secret</strong>: User’s Client Secret for the same ID provided.</li><li><strong>Host and Port</strong>: URL to the Looker instance, e.g., <a href="https://my-company.region.looker.com.">https://my-company.region.looker.com.</a></li><li><strong>Repository Owner</strong>: The owner of a GitHub repository. For example, in <a href="https://github.com/open-metadata/OpenMetadata">https://github.com/open-metadata/OpenMetadata</a>, the owner is “open-metadata”.</li><li><strong>Repository Name</strong>: The name of a GitHub repository. For example, in <a href="https://github.com/open-metadata/OpenMetadata">https://github.com/open-metadata/OpenMetadata</a>, the name is “OpenMetadata”.</li><li><strong>API Token</strong>: Token to use the API. This is required for private repositories and to ensure we don’t hit API limits. Follow these <a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-fine-grained-personal-access-token">steps</a> in order to create a fine-grained personal access token. When configuring, give repository access to “Only select repositories” and choose the one containing your LookML files. Then, we only need “Repository Permissions” as read-only for Contents.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qtWlSdhU7jMQOMhhujd-ig.png" /><figcaption>Entering authentication and GitHub credentials for Looker integration.</figcaption></figure><p>With your Looker connector configured, OpenMetadata will start ingesting Looker metadata!</p><h3>Use Cases</h3><p>Integrating OpenMetadata, Looker, and MCP Toolbox provides your AI agents with a comprehensive understanding of the semantics within your data stack and Looker environment. To help you scale your operations, we’ve highlighted two key strategies currently being adopted by the community:</p><h4>1. Automated Tag Synchronization</h4><p>As different builders and agents produce new data assets across data services, <a href="https://open-metadata.org/mcp">OpenMetadata’s MCP Server</a> and MCP Toolbox provide automated ways to synchronize tags, descriptions, and other metadata across the tools in your data stack. This ensures that as your data ecosystem expands, and more agents are added, the semantic context remains consistent across every tool in your stack. By automating these updates, your Looker environment can stay up-to-date regardless of the data sources that are being used to populate dashboards.</p><p>With both MCP Servers installed in <a href="https://geminicli.com/">Gemini CLI</a>, you can prompt the agent with:</p><blockquote>“<em>Use OpenMetadata to trace the lineage for my </em><em>ecommerce.customers LookML Data Model, apply all tags and field descriptions from its upstream data sources corresponding LookML fields</em>.”</blockquote><h4>2. Generating Custom Metadata Insights</h4><p>We are also seeing developers use <a href="https://open-metadata.org/mcp">OpenMetadata’s MCP Server</a> to pull stats like asset and user counts from OpenMetadata to build Looker charts that track adoption of data services. By leveraging MCP Toolbox, agents can quickly turn prompts into insights that can provide a deeper understanding of the health of your data environments.</p><p>To implement this use case, the stats from OpenMetadata need to be written to a database before they can be consumed through Looker. Use MCP Toolbox to connect to a database, e.g. Postgres, AlloyDB, etc.. The Docker Compose file used to install OpenMetadata earlier ships with a Postgres instances the can be used in Gemini CLI via the MCP Toolbox by adding the following to<em> </em>.gemini/settings.json:</p><pre>{<br>    &quot;mcpServers&quot;: {<br>        &quot;postgres&quot;: {<br>            &quot;command&quot;: &quot;toolbox&quot;,<br>            &quot;args&quot;: [<br>                &quot;--prebuilt&quot;,<br>                &quot;postgres&quot;,<br>                &quot;--stdio&quot;<br>            ],<br>            &quot;env&quot;: {<br>                &quot;POSTGRES_HOST&quot;: &quot;localhost&quot;,<br>                &quot;POSTGRES_PORT&quot;: &quot;5432&quot;,<br>                &quot;POSTGRES_DATABASE&quot;: &quot;openmetadata_db&quot;,<br>                &quot;POSTGRES_USER&quot;: &quot;openmetadata_user&quot;,<br>                &quot;POSTGRES_PASSWORD&quot;: &quot;openmetadata_password&quot;<br>            }<br>        }<br>    }<br>}</pre><p>Then, prompt Gemini-CLI to:</p><blockquote><em>“Calculate the total number of assets in OpenMetadata by asset type, create a table to hold these stats in Postgres, and write them to the newly created table.”</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5EByN2jqZJoa9556X1v5uw.gif" /></figure><p>From here, we could have Gemini CLI connect Postgres and Looker, create a new LookML project, and initial LookML model, before building dashboards and Looks based on our new data.</p><h3>Conclusion</h3><p>Integrating OpenMetadata and MCP Toolbox can bring Semantic Intelligence to Looker and the rest of your data stack, providing powerful capabilities that give AI agents and other AI workflows a deep understanding of data assets, relationships and context. For more information on OpenMetadata, please check it out on <a href="https://github.com/open-metadata">GitHub</a> and join the <a href="https://slack.open-metadata.org/">OpenMetadata Slack Community</a>. To explore the MCP Toolbox, check out the <a href="https://github.com/googleapis/mcp-toolbox">GitHub repository</a>, read the <a href="https://mcp-toolbox.dev/documentation/introduction/">documentation</a>, and join our <a href="https://www.google.com/search?q=https://discord.gg/mcptoolbox">Discord serve</a>r to connect with the community.</p><p>For more on OpenMetadata and MCP Toolbox, please be sure to attend the next OpenMetadata Community Meeting! Google developers, Wenxin Du and Mike DeAngelo, will be showcasing MCP Toolbox at this virtual meetup <a href="https://luma.com/s4kl1x9f">this Wednesday, March 25th, 2026 at 9 AM PST</a>!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0c867fd23e6f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/building-a-semantic-intelligence-layer-for-the-ai-data-stack-0c867fd23e6f">Building a Semantic Intelligence Layer for the AI Data Stack</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Your Gemini CLI Extensions Just Got Smarter: Introducing Agent Skills]]></title>
            <link>https://medium.com/google-cloud/your-gemini-cli-extensions-just-got-smarter-introducing-agent-skills-a8fbfa077e7f?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/a8fbfa077e7f</guid>
            <category><![CDATA[database]]></category>
            <category><![CDATA[skills]]></category>
            <category><![CDATA[gemini]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Wed, 18 Mar 2026 19:48:56 GMT</pubDate>
            <atom:updated>2026-03-19T05:08:39.824Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*v6p5dYprMNInOTRaRZksUQ.png" /></figure><p>Written by: Twisha Bansal, Software Engineer @ Google (<a href="https://www.linkedin.com/in/twishabansal/">Linkedin</a>)</p><p>If you use Gemini CLI, you’re likely familiar with how it has flattened the learning curve and made app development with databases simple. Today, we’re making that experience smoother, faster, and more portable by transitioning from Tools to Agent Skills for the <a href="https://github.com/gemini-cli-extensions/cloud-sql-postgresql">Cloud SQL for PostgreSQL extension</a>.</p><p>Here’s what this means for you and how you can get started.</p><h3>What are Agent Skills?</h3><p>Think of Agent Skills as a “user guide” for your AI. Instead of teaching Gemini every possible command at once (which can make it slower and less accurate), Agents Skills allow Gemini to learn exactly what it needs, exactly when it needs it.</p><h3>Why You’ll Love the Change</h3><p>Traditional tool-based systems suffer from an “eager loading” problem. When you connect a toolset, the agent front-loads every tool schema into its context. This leads to Context Window Saturation — a state where the model’s limited context window is crowded with technical metadata, reducing its ability to focus on your actual task and increasing the likelihood of errors.</p><p>By moving to Agent Skills, we can take a “Progressive Disclosure” approach:</p><ul><li><strong>Discovery:</strong> At startup, agents load only the name and description of each available skill, just enough to know when it might be relevant.</li><li><strong>Activation:</strong> When a task matches a skill’s description, the agent “activates”, which loads the full SKILL.md instructions into context.</li><li><strong>Execution:</strong> The agent follows the instructions, optionally loading referenced files or executing bundled code as needed.</li></ul><h3>What’s Changing in the Cloud SQL for PostgreSQL Extension?</h3><p>We’ve refactored the extension to replace monolithic toolsets with a granular skills/ directory. Instead of one large bundle, functionalities are now split into specialized skills:</p><ul><li><strong>cloud-sql-postgres-admin:</strong> Administrative tasks such as provisioning new Cloud SQL instances.</li><li><strong>cloud-sql-postgres-lifecycle:</strong> Managing the lifecycle of Cloud SQL instances.</li><li><strong>cloud-sql-postgres-data: </strong>Explore the database structure.</li><li><strong>cloud-sql-postgres-monitor: </strong>Troubleshooting performance issues.</li><li><strong>cloud-sql-postgres-health:</strong> Audit database health.</li><li><strong>cloud-sql-postgres-view-config: </strong>Discover and manage extensions or engine level settings.</li><li><strong>cloud-sql-postgres-replication: </strong>Monitor replication health.</li></ul><h4>Standardized Execution</h4><p>Each tool is now mapped to a script within each skills package. This ensures that the execution logic is cross-platform, working seamlessly across Linux, MacOS, and Windows.</p><h4>Tools vs. Agent Skills in Gemini CLI Extensions</h4><p>The following comparison outlines the specific advantages of architecting our CLI extensions around Agent Skills rather than traditional tool definitions. By moving to a skill-based model, we transition from simple function calling to a sophisticated, reasoning-first extension ecosystem.</p><p><strong>Loading Pattern</strong></p><ul><li><strong>Traditional Tools:</strong> <strong>Eager (Front-loaded):</strong> All tool definitions are loaded into the system prompt at the very beginning, whether they are actually needed for the task or not.</li><li><strong>Agent Skills:</strong> <strong>Progressive (On-demand):</strong> Capabilities are discovered dynamically. The system only loads detailed instructions once the agent identifies a specific, relevant task.</li></ul><p><strong>Context Usage</strong></p><ul><li><strong>Traditional Tools:</strong> <strong>High (Saturation risk):</strong> Large toolsets consume a significant amount of token space. This “context bloat” can lead to model confusion and decreased performance.</li><li><strong>Agent Skills:</strong> <strong>Minimal (Highly optimized):</strong> By swapping instructions in and out as needed, skills maintain a clean context window, which directly improves reasoning accuracy.</li></ul><h3>The Best Part: Zero Manual Installation</h3><p>We’ve designed this rollout to be completely transparent to you. You don’t need to learn a new installation flow.</p><ul><li><strong>Built-in:</strong> When you install an extension with gemini extensions install, skills are automatically installed in the ~/.gemini/extensions/&lt;extension_name&gt;/skills directory.</li><li><strong>Environment Parity:</strong> Your existing environment variables are automatically initialized and propagated to the skills during execution.</li><li><strong>Easy Updates: </strong>Users can use gemini extensions config &lt;extension_name&gt; to easily update any env variables for their current extension.</li></ul><blockquote>Note: As part of this rollout, we are deprecating the use of eager-loaded <a href="https://github.com/googleapis/genai-toolbox/blob/main/docs/CLOUDSQLPG_README.md">MCP servers</a> within these extensions to prioritize the leaner skill-based discovery.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9wI7cGfTYMbhqBeBOpR-9g.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VBrvyuTYyv4KUcz6J0yhWA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UreBKjpSOlx9lc-ryvackw.png" /></figure><h4>Exploring your skills</h4><p>In the Gemini CLI, you can see what your AI “knows” at any time:</p><pre>/skills list</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lHGKQxlRCNjKcpGk8BqRhw.png" /></figure><h4>Just Ask!</h4><p>You don’t need special commands to trigger a skill. Just type like you normally would:</p><ul><li>List all the tables in my production database</li><li>What are the top bloated tables in my Postgres instance?</li><li>Execute this SQL and give me a summary</li></ul><p>Gemini will automatically identify the right skill, run the underlying script, and give you the answer.</p><h3>What’s Next?</h3><p>While we are starting with Cloud SQL for PostgreSQL, we are evaluating the rollout for our entire database extension ecosystem.</p><h4>Want to try it out?</h4><ol><li>Update your Gemini CLI (v0.29.0+):</li></ol><pre>npm install -g @google/gemini-cli@latest</pre><p>2. Update your extension (v0.2.3+):</p><pre>gemini extensions update cloud-sql-postgresql</pre><p>If not already installed, install the extension using:</p><pre>gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql</pre><p>That’s it. Your agent is now leaner, faster, and ready to help you wherever you code.</p><p><em>Curious about the tech behind it? Dive deeper at </em><a href="https://agentskills.io">agentskills.io</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a8fbfa077e7f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/your-gemini-cli-extensions-just-got-smarter-introducing-agent-skills-a8fbfa077e7f">Your Gemini CLI Extensions Just Got Smarter: Introducing Agent Skills</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Bring Your Database Tools to the Agent Skill Ecosystem]]></title>
            <link>https://medium.com/google-cloud/bring-your-database-tools-to-the-agent-skill-ecosystem-dfff0fee08cb?source=rss-bd170fefc8f6------2</link>
            <guid isPermaLink="false">https://medium.com/p/dfff0fee08cb</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[skills]]></category>
            <dc:creator><![CDATA[MCP Toolbox for Databases]]></dc:creator>
            <pubDate>Tue, 10 Mar 2026 19:50:44 GMT</pubDate>
            <atom:updated>2026-04-13T08:20:34.188Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*c_p11sJahzQVGZyIMFy0IA.png" /></figure><p>Written by: Haoyu Wang, Software Engineer @ Google (<a href="https://www.linkedin.com/in/haoyuwang9/">Linkedin</a>)</p><p>Up until recently, developers have primarily relied on the <a href="https://modelcontextprotocol.io/docs/getting-started/intro"><strong>Model Context Protocol</strong></a> to securely connect their databases to AI agents and frameworks, such as the Gemini CLI. Meanwhile, the <a href="https://agentskills.io/home"><strong>Agent Skill</strong></a> standard has recently been gaining serious traction as a new, unified way to package, distribute, and consume agent capabilities. As more frameworks begin to adopt this standard, we want to ensure your database tools can seamlessly make the jump. Today, we are excited to introduce the new skills-generate command to <a href="https://github.com/googleapis/genai-toolbox">MCP Toolbox for Databases</a>!</p><h3>The Foundation: Invoking Tools from the CLI</h3><p>Before we could package tools to fit the Agent Skill standard, we needed a way to execute Toolbox tools statelessly. To solve this, we are introducing the new toolbox invoke command.</p><p>This foundational feature allows you to run any configured tool directly from your terminal. By simply passing the tool name and its parameters as a JSON string, you can test and execute your queries on the fly without spinning up the server:</p><pre>toolbox --tools-file tools.yaml invoke list_slow_queries &#39;{&quot;min_duration&quot;: &quot;5 minutes&quot;}&#39;</pre><p>This simple, CLI-driven execution model is exactly what makes our new Agent Skill integration possible.</p><h3>Bridging the gap with `skills-generate`</h3><p>Packaging custom tools to fit the new <a href="https://agentskills.io/specification">Agent Skill specification</a> manually can be tedious. It requires authoring standard boilerplate, defining precise descriptions, and managing execution scripts.</p><p>The skills-generate command eliminates this friction by automatically converting your existing Toolbox <strong>toolsets</strong> into ready-to-use Agent Skills. It instantly generates a standard SKILL.md file containing the required frontmatter and parameter schemas, alongside a set of cross-platform Node.js wrapper scripts (.js) for each tool to be easily invoked by the agent.</p><h3>How it works</h3><p>To get started, simply make sure you have the toolbox executable (0.27.0+) in your PATH (<a href="https://mcp-toolbox.dev/documentation/introduction/">installation guide</a>) and Node.js installed on your system.</p><p>Let’s look at a realistic scenario. Imagine you are working on a DevOps AI assistant to help troubleshoot database performance issues. Let’s say you are already using MCP Toolbox building customized tools to enforce guardrails such as preventing access to customer data, and you have a customized tools.yaml file defining an entire suite of restricted, parameterized queries grouped under a db_diagnostics toolset:</p><pre>sources:<br>  prod-pg-instance:<br>    ...<br><br>tools:<br>  list_slow_queries:<br>    kind: postgres-sql<br>    source: prod-pg-instance<br>    description: &quot;List currently active database queries running longer than a specified duration.&quot;<br>    statement: |<br>      SELECT pid, now() - query_start AS duration, query<br>      FROM pg_stat_activity<br>      WHERE state = &#39;active&#39; AND now() - query_start &gt; cast($1 as interval)<br>    parameters:<br>      - name: min_duration<br>        type: string<br>        description: &quot;Minimum duration to filter by (e.g., &#39;5 minutes&#39;, &#39;1 hour&#39;)&quot;<br>        default: &quot;5 minutes&quot;<br>  ... # numerous other tools like check_locks, get_table_stats, etc.<br><br>toolsets:<br>  db_diagnostics:<br>    tools:<br>      - list_slow_queries<br>      ...</pre><p>Now, you can package this entire toolset into a standard Agent Skill simply by running a single command:</p><pre>toolbox --tools-file tools.yaml skills-generate \<br>  --name &quot;pg-diagnostics&quot; \<br>  --toolset &quot;db_diagnostics&quot; \<br>  --description &quot;A skill for troubleshooting and diagnosing PostgreSQL performance&quot; \<br>  --output-dir &quot;skills/&quot;</pre><p>This command creates a standardized package directory, looping through your entire toolset to generate the necessary files:</p><pre>skills/<br>└── pg-diagnostics/<br>    ├── SKILL.md<br>    ├── assets/<br>    └── scripts/<br>        ├── list_slow_queries.js<br>        ├── list_idle_connections.js<br>        └── ...</pre><p>The resulting SKILL.md contains all the necessary metadata and script specifications required by the standard for your entire toolset. Meanwhile, the cross-platform Node.js scripts securely handle the execution of your parameterized SQL queries.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DQn9SKYtlQ5ScDbmutTm1A.gif" /><figcaption>Run the skills-generate command to automatically convert your database toolsets into a standardized Agent Skill package.</figcaption></figure><p>You can even generate skills straight from our prebuilt configurations. Need an AlloyDB admin skill? Just run:</p><pre>toolbox --prebuilt alloydb-postgres-admin skills-generate \<br>  --name &quot;alloydb-postgres-admin&quot; \<br>  --description &quot;skill for performing administrative operations on alloydb&quot;</pre><h3>Ready for your Agent Frameworks</h3><p>Because the output complies with the Agent Skill specification, you can now drop these tools into any agent framework that supports the standard. For instance, if you are using the Gemini CLI, you can easily install your newly generated skill with a single command:</p><pre>gemini skills install /path/to/generated-skills/my-skill</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yYrerbWaWF8GNsT3S5FGMQ.gif" /><figcaption>Launch the Gemini CLI to interact with your newly installed skill, providing a specialized environment for database diagnostics and DevOps tasks.</figcaption></figure><p>Tip: You can skip a step by setting --output-dir to ~/.gemini/skills when generating the skill, installing it straight into the Gemini CLI environment!</p><h3>Get Started</h3><p>We’re excited to see how you leverage this new feature to distribute your database tools across the growing Agent Skill ecosystem. Check out the <a href="https://mcp-toolbox.dev/documentation/configuration/skills/">feature documentation</a>, and join our <a href="https://discord.gg/GQrFB3Ec3W">community Discord</a> to share your use cases, ask questions, and connect with the team!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dfff0fee08cb" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-cloud/bring-your-database-tools-to-the-agent-skill-ecosystem-dfff0fee08cb">Bring Your Database Tools to the Agent Skill Ecosystem</a> was originally published in <a href="https://medium.com/google-cloud">Google Cloud - Community</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>