SQL Server MCP Server for Windsurf IDE
LocalAbout SQL Server MCP Server for Windsurf IDE
A standalone MCP server written in C# that adds SQL Server integration to any MCP-compliant IDE or client. It suits developers who want to browse schemas and run queries from their editor. It stands out by resolving database connection strings dynamically from the active file's location.
Key features
- 01SQL Server connectivity and schema browsing
- 02Table, view and column metadata inspection
- 03Stored procedure listing, definition and execution
- 04SQL query execution at database or instance level
- 05Per-file connection override from appsettings.json
- 06Debug mode and configurable log path
Use cases
- 01Browsing tables and columns from Windsurf or another MCP-compliant IDE
- 02Running SQL queries and viewing results inside the editor
- 03Using different databases for subprojects in a multi-project workspace
MCP support
This is an MCP server that communicates over standard input/output using JSON-RPC 2.0. It exposes database tools such as get_databases, get_tables and execute_database_query to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMESQL Server MCP Server
A standalone MCP (Model Context Protocol) server written in C# that provides SQL Server integration capabilities for any MCP-compliant IDE or client.
Features
- SQL Server connectivity
- Database schema exploration
- Table and view inspection
- Column metadata retrieval
- Stored procedure enumeration
- SQL query execution
- Stored procedure execution
- Debug mode for troubleshooting
- Configurable logging path
- Dynamic Project Connection Resolver: Automatically resolves and overrides database connection strings dynamically based on the active file in the editor
Prerequisites
- .NET 10.0 SDK or higher
- SQL Server instance (local or remote)
- SQL Server client tools
Setup
- Build the project:
dotnet build
-
Configure the application:
- Copy
appsettings.example.jsontoappsettings.json - Update the connection string and other settings in
appsettings.jsonwith your SQL Server details
{ "ConnectionStrings": { "DefaultConnection": "Server=your-server;Database=master;User ID=your-username;Password=your-password;TrustServerCertificate=True" }, "LogPath": "C:\\Path\\To\\Your\\LogDirectory\\", "DebugMode": "false" } - Copy
-
Configure the MCP server in your IDE / client:
- Add the server configuration to your IDE's MCP config file (e.g., Windsurf, Claude Desktop config, or Cline/Cursor settings).
- Point the command to the path of your built executable:
{ "mcpServers": { "sqlMcpService": { "command": "path/to/your/MCPSqlServer.exe", "args": [], "description": "SQL Server MCP Service" } } } -
Set up GitHub integration:
- Create a new GitHub repository for your project
- Initialize a new Git repository in your project directory using
git init - Add your GitHub repository as a remote using
git remote add origin <repository-url> - Push your changes to the remote repository using
git push -u origin master
Configuration Options
The appsettings.json file contains the following configuration options:
ConnectionStrings:DefaultConnection: The SQL Server connection stringLogPath: Directory where log files will be storedDebugMode: Set to "true" to enable detailed debug loggingAllowWorkspaceOverride: Set to "false" to disable dynamic project connection overrides (defaults to "true")
Dynamic Project Connection Resolver
In multi-project workspaces where different folders or subprojects connect to different databases, you can avoid updating the main configuration constantly:
- All database tools accept an optional
currentFilePathparameter (typically automatically populated by the IDE client with the active file's path). - The server walks up the directory tree from the file's parent folder looking for the nearest
appsettings.json. - If found, it dynamically extracts and uses that file's
ConnectionStrings:DefaultConnectionfor the query execution. - If no config file is found, or if
AllowWorkspaceOverrideis set to"false", it falls back to the primary connection string loaded at startup.
Publishing
You can publish the application as a self-contained executable:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
This will create a single executable file that includes all dependencies.
Protocol
The MCP server communicates through standard input/output using the standard JSON-RPC 2.0 Model Context Protocol.
Request Format (tools/call)
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tool-name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}
}
Response Format
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "JSON-serialized tool output"
}
]
}
}
Or in case of error:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Error description"
}
}
Supported Tools
1. List Databases (get_databases)
List all available non-system SQL Server databases.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_databases",
"arguments": {}
}
}
2. List Tables in a Database (get_tables)
List all tables and views in a specified database.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_tables",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo"
}
}
}
3. Get Table Columns (get_columns)
List all columns and column metadata in a specified table.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_columns",
"arguments": {
"database": "AdventureWorks",
"schema": "Person",
"table": "Person"
}
}
}
4. List Stored Procedures (get_procedures)
List all stored procedures in a specified database.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_procedures",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo"
}
}
}
5. Get Stored Procedure Definition (get_procedure_definition)
Get the definition of a stored procedure.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_procedure_definition",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo",
"name": "uspGetEmployeeManagers"
}
}
}
6. Execute Database Query (execute_database_query)
Execute a SQL query in the context of a specific database.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_database_query",
"arguments": {
"database": "AdventureWorks",
"query": "SELECT TOP 10 * FROM Person.Person"
}
}
}
7. Execute System Query (execute_system_query)
Execute a SQL query at the server instance level (no database context required).
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_system_query",
"arguments": {
"query": "SELECT name FROM sys.databases"
}
}
}
8. Execute Stored Procedure (execute_procedure)
Execute a stored procedure.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_procedure",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo",
"procedure": "uspGetEmployeeManagers",
"parameters": {
"BusinessEntityID": 5
}
}
}
}
IDE / Client Integration
This MCP server can be used from any MCP-compliant IDE or client (e.g. Windsurf, Cursor, Cline, Claude Desktop) to:
- Browse database schemas
- Execute SQL queries and view results
- Get code completion for table and column names
- Run stored procedures
- Generate SQL code snippets
- Analyze database structures
Code Structure
The application is organized into the following components:
Program.cs: Main entry point and request handlingJsonRpcHandler.cs: Handles JSON-RPC protocol and dispatches requests- Configuration is loaded from
appsettings.json - Logs are written to files specified by the
LogPathsetting
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Error Handling
Common error codes:
invalid_request: Malformed JSON or missing required fieldsconnection_failed: Failed to connect to SQL Servermissing_parameter: Required parameter not providedquery_execution_error: Error executing a SQL querydatabase_not_found: Specified database does not existtable_not_found: Specified table does not exist
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.