{"id":7888,"date":"2026-11-03T13:29:25","date_gmt":"2026-11-03T21:29:25","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/azure-sql\/?p=7888"},"modified":"2026-11-04T10:09:05","modified_gmt":"2026-11-04T18:09:05","slug":"sql-mcp-server-hidden-feature-default-configuration","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/azure-sql\/sql-mcp-server-hidden-feature-default-configuration\/","title":{"rendered":"My Favorite Undocumented Feature in SQL MCP Server"},"content":{"rendered":"<p>When it comes to agents engaging with your production data, Microsoft&#8217;s SQL MCP Server is the free, open-source, and secure service for you. It safely exposes CRUD\/E (Create, Read, Update, Delete, and Execute) operations that enable agents to act on your behalf. Built on the robust Data API builder engine, SQL MCP Server is a self-hosted container you can run in AKS, ACA, ACI, or any other container service. Developed by the SQL team, SQL MCP Server provides clever guardrails that keep agents predictable and accountable. It&#8217;s the heart of any serious Microsoft SQL agentic story.<\/p>\n<p><a href=\"https:\/\/aka.ms\/sql\/mcp\">Learn more about SQL MCP Server<\/a><\/p>\n<h2>It&#8217;s the little things<\/h2>\n<p>SQL MCP Server is well-appointed and nicely documented. But its open-source codebase is also rich with smaller features that complement the engine&#8217;s showcase capabilities. Several of these are hidden gems for developers wanting to make the most of the engine and their time.<\/p>\n<h3>Remember auto configuration<\/h3>\n<p>The <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/data-api-builder\/whats-new\/version-2-0?tabs=console\">2.0 release<\/a>\u00a0in June 2026 introduced an incredible new feature to the engine: auto configuration. Typically, developers configure SQL MCP Server (or Data API builder with the MCP endpoint enabled) using a single JSON file that specifies the database connection and which objects to expose. Auto configuration simplifies this by introducing <code>autoentities<\/code>, which supports wildcard patterns to automatically include Microsoft SQL tables based on their schema or name. With auto configuration, a single <code>autoentities<\/code> definition can replace 1, 100, or even 1,000 manually configured entities. <strong>But that&#8217;s not the hidden feature!<\/strong><\/p>\n<p><figure id=\"attachment_7184\" aria-labelledby=\"figcaption_attachment_7184\" class=\"wp-caption alignnone\" ><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0.webp\"><img decoding=\"async\" class=\"wp-image-7184 size-medium\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-300x300.webp\" alt=\"Release 2.0\" width=\"300\" height=\"300\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-300x300.webp 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-150x150.webp 150w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-768x768.webp 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-24x24.webp 24w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-48x48.webp 48w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0-96x96.webp 96w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/06\/2.0.webp 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"figcaption_attachment_7184\" class=\"wp-caption-text\">Data API builder (DAB) 2.0 with SQL MCP Server<\/figcaption><\/figure><\/p>\n<h2>Introducing no-configuration<\/h2>\n<p>SQL MCP Server&#8217;s container image is hosted in the <a href=\"https:\/\/aka.ms\/dab\/registry\">Microsoft Container Registry<\/a>. Prior to release 2.0 in June, that image didn&#8217;t include a configuration file. Developers had to mount their own configuration file into the container or build a custom image just to use the engine.<\/p>\n<p>Since <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/data-api-builder\/whats-new\/version-2-0?tabs=console\">release 2.0<\/a>, the base image includes <a href=\"https:\/\/github.com\/Azure\/data-api-builder\/blob\/d899ebba33d0260a4d61b9a9615a77248858b451\/src\/Service\/dab-config.json#L36-L41\">a basic configuration file<\/a> with a preconfigured <code>autoentities<\/code> entry that automatically exposes every table in every schema. Of course, this configuration is useless without a connection string. But it opens the door to a fast agentic POC without building your own image or mounting a custom configuration JSON file.<\/p>\n<h3>The real gem: DAB_CONNSTRING<\/h3>\n<p><div class=\"alert alert-info\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Keeping secrets out of configuration<\/strong><\/p>\nSensitive values like database connection strings and passwords can be handled without storing them directly in the configuration file. Azure Key Vault is supported for applications in Azure, and container environment variables can be referenced using the native <code>@env()<\/code> function. Neither approach requires hardcoding secrets in JSON.\n<\/div><\/p>\n<p>SQL MCP Server recognizes one special environment variable: <code>DAB_CONNSTRING<\/code>. When a developer sets this variable to a database connection string, the engine automatically overrides the connection string property in the primary configuration, regardless of any existing value or function reference.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/11\/dab_connstring.webp\"><img decoding=\"async\" class=\"wp-image-7893 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/11\/dab_connstring.webp\" alt=\"dab connstring image\" width=\"482\" height=\"222\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/11\/dab_connstring.webp 964w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/11\/dab_connstring-300x138.webp 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2026\/11\/dab_connstring-768x354.webp 768w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><\/a><\/p>\n<p>This means a single environment variable can supply the database connection for any configuration, including (and this is the point of this article) the basic configuration bundled in the base Data API builder container image.<\/p>\n<h3>A local POC in the blink of an eye<\/h3>\n<p>With this one value, developers can get started without building a custom image or mounting a configuration file. If you&#8217;re using Docker on your local development machine, you can configure a working MCP endpoint with a command as simple as this:<\/p>\n<pre><code>docker run --name dab -p 5000:5000 \\\r\n  -e 'DAB_CONNSTRING=Server=XXX;Database=XXX;User Id=XXX;Password=XXX;TrustServerCertificate=True;' \\\r\n  mcr.microsoft.com\/azure-databases\/data-api-builder:2.0.12<\/code><\/pre>\n<p>The endpoint is available at <code>http:\/\/localhost:5000\/mcp<\/code>, assuming the container starts successfully and can connect to your database.<\/p>\n<h3>An Azure POC in the blink of an eye<\/h3>\n<p>Since this capability ships as part of the container image, Azure deployments or any other deployments get the same benefit as local development. Here are a few easy options.<\/p>\n<h4>Azure Container Apps Express<\/h4>\n<p>With Azure Container Apps Express, you can deploy an MCP endpoint using a single command, without building a custom image or mounting a configuration file. Express automatically provisions the Container Apps environment, too.<\/p>\n<pre><code>aca express create `\r\n  --subscription XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX `\r\n  --resource-group XXX\r\n  --name dab `\r\n  --image mcr.microsoft.com\/azure-databases\/data-api-builder:2.0.12 `\r\n  --ingress external `\r\n  --target-port 5000 `\r\n  --env-vars 'DAB_CONNSTRING=Server=XXX;Database=XXX;User Id=XXX;Password=XXX;TrustServerCertificate=True;'<\/code><\/pre>\n<p><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Azure Container Apps Express is in preview<\/strong><\/p>\nThis assumes your Azure subscription and resource group are already configured. The syntax has been verified against ACA CLI 1.0.0-preview.4.\n<\/div><\/p>\n<h4>Azure Container Apps<\/h4>\n<p>If you don&#8217;t want to use ACA Express, you can accomplish a similar deployment with regular Azure Container Apps. Assuming you&#8217;ve already created a Container Apps environment, the Azure CLI command is nearly as simple:<\/p>\n<pre><code>az containerapp create `\r\n  --subscription XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX `\r\n  --resource-group XXX\r\n  --name dab `\r\n  --environment XXX `\r\n  --image mcr.microsoft.com\/azure-databases\/data-api-builder:2.0.12 `\r\n  --ingress external `\r\n  --target-port 5000 `\r\n  --env-vars 'DAB_CONNSTRING=Server=XXX;Database=XXX;User Id=XXX;Password=XXX;TrustServerCertificate=True;'<\/code><\/pre>\n<h4>Azure Container Instances<\/h4>\n<p>If you&#8217;re not an Azure Container Apps customer and prefer Azure Container Instances (ACI), you can accomplish a similar deployment just as easily:<\/p>\n<pre><code>az container create `\r\n  --subscription XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX `\r\n  --resource-group XXX\r\n  --name dab `\r\n  --image mcr.microsoft.com\/azure-databases\/data-api-builder:2.0.12 `\r\n  --ports 5000 `\r\n  --ip-address Public `\r\n  --environment-variables 'DAB_CONNSTRING=Server=XXX;Database=XXX;User Id=XXX;Password=XXX;TrustServerCertificate=True;'<\/code><\/pre>\n<h4>Azure Kubernetes Services<\/h4>\n<p>Finally, if neither ACA nor ACI is your preferred approach and your enterprise has standardized on Azure Kubernetes Service (AKS), you&#8217;re in luck. The same deployment is possible there, too, assuming your Kubernetes context already points to the intended AKS cluster:<\/p>\n<pre><code>kubectl create deployment dab `\r\n  --image=mcr.microsoft.com\/azure-databases\/data-api-builder:2.0.12\r\n\r\nkubectl set env deployment\/dab `\r\n  'DAB_CONNSTRING=Server=XXX;Database=XXX;User Id=XXX;Password=XXX;TrustServerCertificate=True;'\r\n\r\nkubectl expose deployment dab `\r\n  --type=LoadBalancer `\r\n  --port=5000 `\r\n  --target-port=5000<\/code><\/pre>\n<h2>Is it really that easy?<\/h2>\n<p>It is. And you can rest assured that you&#8217;re not relying on an undocumented trick intended just for testing. The basic configuration baked into the Data API builder image makes it possible to get an MCP Server running without preparing a configuration file yourself. It&#8217;s a fast way to see how effectively agents can operate over your data.<\/p>\n<h3>But is this for production?<\/h3>\n<p>Not really, at least not without considering the configuration defaults. There&#8217;s nothing inherently wrong with a dynamically generated configuration, but the base image configuration was designed for developers. It defaults the hosting environment to <code>development<\/code>, enabling Swagger and Nitro for endpoint testing and setting Health endpoint access to anonymous. Perhaps most important is that CRUD permissions allow all operations, including mutations, for anonymous users. SQL MCP Server doesn&#8217;t, and can&#8217;t, bypasses database security, but wide-open access on any endpoint in production is pretty uncommon.<\/p>\n<p><strong>Having said that, now you know.<\/strong> Whether you&#8217;re investigating the technology and want the lowest-friction starting point or you are building a proof of concept and want to get up and running fast, SQL MCP Server&#8217;s new default configuration in the base image opens up exciting possibilities to get you where you want to go even faster.<\/p>\n<p><a href=\"https:\/\/aka.ms\/sql\/mcp\">Learn more about SQL MCP Server<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deploy Microsoft&#8217;s SQL MCP Server in minutes without a configuration file. Learn how DAB_CONNSTRING enables fast deployment using Docker, Azure Container Apps, ACI, or AKS.<\/p>\n","protected":false},"author":96788,"featured_media":7184,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,597,720],"tags":[],"class_list":["post-7888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-sql","category-data-api-builder-2","category-sql-mcp-server-2"],"acf":[],"blog_post_summary":"<p>Deploy Microsoft&#8217;s SQL MCP Server in minutes without a configuration file. Learn how DAB_CONNSTRING enables fast deployment using Docker, Azure Container Apps, ACI, or AKS.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/7888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/users\/96788"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/comments?post=7888"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/7888\/revisions"}],"predecessor-version":[{"id":7914,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/7888\/revisions\/7914"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media\/7184"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media?parent=7888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/categories?post=7888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/tags?post=7888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}