SQL只读查询工具

一个基于.NET的SQL只读查询工具,支持SQL Server和SQLite数据库,提供安全的SELECT查询功能,适用于数据分析和报表生成。

  • by SambaDemon
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 SambaDemon/sql-mcp

使用说明

SQL MCP(.NET)--只读模式+单/多数据库SELECT

此MCP服务器为SQL server和SQLite提供了安全的只读工具:

  • getDatabases
  • getTables(数据库)
  • getSchema(数据库、表?)
  • runSelect(数据库、sql、limit?、params?)
  • runSelectAcross(数据库[]、sql、limit?、params?)

它为MCP使用stdio传输,并在客户端行限制下强制执行仅限SELECT/CTE。

需求

  • .NET SDK 10
  • (可选)Git版本控制

环境配置

核心:

  • SQL_PROVIDER = sqlserver | sqlite
  • SQL_CONNECTION_STRING (首选)

SQL Server(如果没有连接字符串):

  • SQL_SERVER_HOST, SQL_SERVER_PORT, SQL_SERVER_USER, SQL_SERVER_PASSWORD, SQL_SERVER_TRUST_CERT (真|假)

SQLite:

  • SQLITE_DB_FILES =逗号分隔的文件路径或 name=path 多个DB的配对
    • 例子: main=c:\data\app.db,archive=c:\data\archive.db

快速启动(CLI)

从该文件夹:

  1. 为SQL Server设置环境
$env:SQL_PROVIDER = "sqlserver"
$env:SQL_CONNECTION_STRING = "Server=localhost;Database=master;User Id=sa;Password=Your_password123;TrustServerCertificate=True;"

或用于SQLite

$env:SQL_PROVIDER = "sqlite"
$env:SQLITE_DB_FILES = "main=C:\\data\\app.db,archive=C:\\data\\archive.db"
  1. 运行服务器(无项目单个文件)
  • 如果您的环境支持单文件指令(与 jira_mcp.cs),以运行该文件的方式运行它。
  1. 替代方案:通过标准运行。NET项目 如果您的环境不支持无项目指令,请创建一个最小项目文件:
<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>

另存为 SQL_MCP.csproj 在此文件夹中,然后:

dotnet restore
dotnet run

VS代码配置

添加 .vscode/launch.json (可选)与您的环境变量一起运行:

{
  "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"
    }
  ]
}

光标配置(MCP服务器)

在光标设置中,添加一个类似于以下内容的MCP服务器条目:

{
  "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;"
      }
    }
  }
}

对于SQLite,将env替换为:

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

工具摘要

  • getDatabases()
  • getTables(数据库)
  • getSchema(数据库、表?)
  • runSelect(数据库、sql、limit?、params?)
  • runSelectAcross(数据库[]、sql、limit?、params?)

参数绑定为 @name.只有 SELECT 或 WITH 声明被接受。默认限制100(最大1000)。

安全说明

  • 按设计只读。破坏性关键字和多语句被拒绝。
  • 使用最低权限的SQL帐户进行生产。