Skip to content

SambaDemon/sql-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SQL MCP (.NET) — Read-only schema + single/multi-database SELECT

This MCP server exposes safe, read-only tools for SQL Server and SQLite:

  • getDatabases
  • getTables(database)
  • getSchema(database, table?)
  • runSelect(database, sql, limit?, params?)
  • runSelectAcross(databases[], sql, limit?, params?)

It uses stdio transport for MCP and enforces SELECT/CTE-only execution with client-side row limits.

Requirements

  • .NET SDK 10
  • (Optional) Git for version control

Environment configuration

Core:

  • SQL_PROVIDER = sqlserver | sqlite
  • SQL_CONNECTION_STRING (preferred)

SQL Server (if no connection string):

  • SQL_SERVER_HOST, SQL_SERVER_PORT, SQL_SERVER_USER, SQL_SERVER_PASSWORD, SQL_SERVER_TRUST_CERT (true|false)

SQLite:

  • SQLITE_DB_FILES = comma-separated file paths or name=path pairs for multiple DBs
    • Example: main=c:\data\app.db,archive=c:\data\archive.db

Quick start (CLI)

From this folder:

  1. Set environment for SQL Server
$env:SQL_PROVIDER = "sqlserver"
$env:SQL_CONNECTION_STRING = "Server=localhost;Database=master;User Id=sa;Password=Your_password123;TrustServerCertificate=True;"

OR for SQLite

$env:SQL_PROVIDER = "sqlite"
$env:SQLITE_DB_FILES = "main=C:\\data\\app.db,archive=C:\\data\\archive.db"
  1. Run the server (projectless single-file)
  • If your environment supports one-file directives (same approach as jira_mcp.cs), run it the same way you run that file.
  1. Alternative: run via standard .NET project If your environment does not support projectless directives, create a minimal project file:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <LangVersion>preview</LangVersion>
    <Nullable>enable</Nullable>
    <OutputType>Exe</OutputType>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.8" />
    <PackageReference Include="Microsoft.Extensions.Http" Version="9.0.8" />
    <PackageReference Include="ModelContextProtocol" Version="0.3.0-preview.3" />
    <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
    <PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0-preview.2" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="sql_mcp.cs" />
  </ItemGroup>
  <PropertyGroup>
    <EnableDefaultItems>false</EnableDefaultItems>
  </PropertyGroup>
</Project>

Save as SQL_MCP.csproj in this folder, then:

dotnet restore
dotnet run

VS Code configuration

Add .vscode/launch.json (optional) to run with your env:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": ".NET Launch SQL MCP",
      "type": "coreclr",
      "request": "launch",
      "program": "dotnet",
      "args": ["run"],
      "cwd": "${workspaceFolder}",
      "env": {
        "SQL_PROVIDER": "sqlserver",
        "SQL_CONNECTION_STRING": "Server=localhost;Database=master;User Id=sa;Password=Your_password123;TrustServerCertificate=True;"
      },
      "console": "integratedTerminal"
    }
  ]
}

Cursor configuration (MCP server)

In Cursor Settings, add an MCP server entry similar to:

{
  "mcpServers": {
    "sql-mcp": {
      "command": "dotnet",
      "args": ["run"],
      "cwd": "c:\\Work\\MCP_SERVERS\\SQL_MCP",
      "env": {
        "SQL_PROVIDER": "sqlserver",
        "SQL_CONNECTION_STRING": "Server=localhost;Database=master;User Id=sa;Password=Your_password123;TrustServerCertificate=True;"
      }
    }
  }
}

For SQLite, replace env with:

{
  "SQL_PROVIDER": "sqlite",
  "SQLITE_DB_FILES": "main=c:\\data\\app.db,archive=c:\\data\\archive.db"
}

Tools summary

  • getDatabases()
  • getTables(database)
  • getSchema(database, table?)
  • runSelect(database, sql, limit?, params?)
  • runSelectAcross(databases[], sql, limit?, params?)

Parameters are bound as @name. Only SELECT or WITH statements are accepted. Default limit 100 (max 1000).

Security notes

  • Read-only by design. Destructive keywords and multi-statements are rejected.
  • Use least-privilege SQL accounts for production.

About

Sql mcp tool

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages