qbash / SQL Server MCP server
A hosted SQL Server MCP server for Claude and ChatGPT.
Connect Microsoft SQL Server or Azure SQL to qbash once and expose it as an MCP server. Claude, ChatGPT, Cursor and Claude Code call the same tools, and each person signs in with their own qbash account.
The database connection lives in qbash. Each assistant gets the tools you select.
Meet qbash Tasks
Your Python, deployed and ready for your team.
A Task is a cloud-hosted Python function. Write your automation, save to deploy, and give your team a way to run it.
Cloud-hosted
Your function runs on qbash. No server to provision.
Built in Python
Write the logic, call integrations, and decide what AI handles.
Multi-model
Choose the model for each AI step in your function.
Versions & logs
Review code changes, restore versions, and inspect each run.
Auto-deploy
Save your Task to make the new version live.
Run anywhere
Call it from a form, API, Slack, or AI chat. Schedule it, too.
What the assistant gets
Four tools cover schema lookup and queries.
The connector is listed as Azure SQL in qbash and works with Microsoft SQL Server and Azure SQL databases. It adds these tools to an MCP server. Turn off any the assistant does not need.
| Tool | What it does |
|---|---|
| mssql_list_schemas | Lists the user schemas in the database |
| mssql_list_tables | Lists tables and views in a schema |
| mssql_describe_table | Shows columns, types, keys and indexes for a table |
| mssql_execute_query | Runs a SQL query with the rights of the connected login |
Where it runs
Run one SQL Server MCP server for the whole team on qbash.
Packages from PyPI or npm, and Microsoft's SQL MCP Server in Data API builder, leave a developer to configure and run the server. For a team, qbash holds a single database connection and grants access person by person.
| Concern | Self-hosted SQL Server MCP server | qbash |
|---|---|---|
| Where it runs | On each person's laptop, or on a server you deploy | Hosted on qbash |
| Database credentials | In each person's client configuration | Stored once in qbash, encrypted |
| Who can connect | Anyone with the configuration and the password | People you share the server with, signed in through OAuth |
| Removing access | Change the database password for everyone | Remove one person's share, or make the server private |
| Custom logic | Fork and maintain the server | Add a Task with your own query and checks |
Set it up
Connect the database, build the server, then add it to your client.
- Create a login with the db_datareader role on the database the assistant should see.
- In qbash, connect Azure SQL with that login.
- Open MCP Servers, select New server and add the Azure SQL connector block. Turn off any tools you do not want to expose.
- Share the server with the people who should use it, then copy the server URL from Connect.
- Add the URL as a custom connector in Claude, as an app in ChatGPT with developer mode turned on, or as a remote MCP server in Cursor or Claude Code. Then sign in with qbash. Developer mode in ChatGPT depends on your plan and workspace settings.
Queries run with the rights of the connected login. A login with only db_datareader cannot change data, whatever the assistant asks for.
Your own rules
Wrap a query in a Task when the assistant should follow a fixed path.
A Task is a Python function saved on qbash. This one runs a single approved query for paid orders that have not shipped, and the assistant supplies only the number of days. Add the Task to the same MCP server and the assistant calls it like any other tool.
days = qbash.inputs.get("days") if days is None: days = 2 if not isinstance(days, int) or isinstance(days, bool) or not 1 <= days <= 90: raise ValueError("Provide a whole number of days from 1 to 90.") rows = qbash.integrations.mssql.execute_query( query=( "SELECT TOP 100 order_id, created_at FROM dbo.orders " "WHERE status = 'paid' AND shipped_at IS NULL " "AND created_at < DATEADD(day, -@p1, SYSUTCDATETIME()) " "ORDER BY created_at" ), queryParams=[days], )["result"]["rows"] qbash.output({ "waiting_orders": rows, "oldest_order": rows[0]["order_id"] if rows else None, })
Declare days as an optional Number input and name the Task Orders Waiting To Ship. Replace dbo.orders and its columns with your own schema, and check that created_at is stored in UTC.
Before you build
Questions
Does it work with on-premises SQL Server?
Yes, if the server accepts connections from qbash at the host and port you enter. Azure SQL and SQL Server on a cloud VM connect the same way.
Can the assistant change data?
Only if the connected login has write access. SQL Server rejects writes from a login that holds only db_datareader.
Which clients can connect?
Any client that supports remote MCP servers, including claude.ai, Claude Code, ChatGPT, Cursor and VS Code. Use OAuth sign-in where the client supports it.
Can I expose some tools and hide others?
Yes. Turn off connector tools you do not want the assistant to call, rename them, or replace them with Tasks that run fixed queries.
Is there a free plan?
Yes. The Free plan includes 100 executions a month and 3 Tasks, with no credit card.