使用说明
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|sqliteSQL_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)
从该文件夹:
- 为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"
- 运行服务器(无项目单个文件)
- 如果您的环境支持单文件指令(与
jira_mcp.cs),以运行该文件的方式运行它。
- 替代方案:通过标准运行。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帐户进行生产。