SqliteMcp
A.NET模型上下文协议(MCP)服务器,用于SQLite数据库操作。使AI代理和LLM能够通过标准化的MCP接口与SQLite数据库进行交互。
](https://www.nuget.org/packages/SqliteMcp)
概述
SqliteMcp是一个模型上下文协议服务器,它将SQLite数据库操作作为GitHub Copilot等AI模型可访问的工具。它为数据库自检、数据检索、插入、更新、删除和原始SQL查询执行提供了一套全面的操作。
技术栈
- .NET 10.0:最新。NET运行时
- 微软。数据。SQLite:的原生SQLite提供程序。网
- 模型上下文协议:MCP服务器实现
- 微软。扩展。托管:主机构建器和依赖注入容器
项目结构
SqliteMcp/
├── Program.cs # Application entry point, MCP server initialization
├── Tools.cs # MCP tool definitions for database operations
├── SqliteMcp.csproj # Project configuration
├── SqliteMcp.sln # Visual Studio solution file
├── LICENSE # Project license
└── README.md # This file入门指南
先决条件
- .NET 10.0 SDK或更高版本
- SQLite数据库文件
安装
- 克隆存储库:
git clone
cd SqliteMcp- 恢复依赖关系:
dotnet restore- 构建项目:
dotnet build运行服务器
对于Visual Studio代码
- 克隆存储库:
git clone https://github.com/anuraj/SqliteMcp.git
cd SqliteMcp- 安装。NET 10运行时(如果尚未安装)。
- 创建或更新
.vscode/mcp.jsonVS Code设置文件夹中的文件,配置如下:
{
"servers": {
"sqlite-mcp-server": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"/SqliteMcp"
],
"env": {
"SQLITE_DB_PATH": "
"
}
}
},
"inputs": []
}- 替换占位符:
- `:克隆存储库的完整路径 - `:SQLite数据库文件的完整路径
- 打开GitHub Copilot Chat,使用自然语言查询SQLite数据库。
用于命令行
cd SqliteMcp
export SQLITE_DB_PATH="/path/to/your/database.db" # Linux/macOS
set SQLITE_DB_PATH=C:\path\to\your\database.db # Windows
dotnet run可用工具
SqliteMcp通过MCP接口公开以下工具:
数据库反思
db_info
返回全面的数据库元数据,包括文件路径、存在状态、文件大小(以字节为单位)和表计数。
只读: 是\ 破坏性: 不
list_tables
列出数据库中所有用户定义的表(不包括SQLite系统表)。
只读: 是\ 破坏性: 不
架构操作
get_table_schema
检索指定表的详细架构信息,包括列名、数据类型、约束和主键信息。
参数:
tableName(string):要检查的表的名称
只读: 是\ 破坏性: 不
数据操作
create_record
将新记录插入到指定表中。
参数:
tableName(string):目标表名columnValues(字典):列名及其值的键值对
只读: 不\ 破坏性: 不
read_records
使用可选的筛选和分页从表中检索记录。
参数:
tableName(string):目标表名conditions(字符串,可选):用于筛选的WHERE子句条件limit(int,默认值:100):要返回的最大记录数offset(int,默认值:0):要跳过的记录数(用于分页)
退货: JSON记录对象数组
只读: 是\ 破坏性: 不
update_records
更新符合指定条件的表中的现有记录。
参数:
tableName(string):目标表名columnValues(字典):用新值更新的列conditions(string):WHERE子句,用于标识要更新的记录
只读: 不\ 破坏性: 是
delete_records
从符合指定条件的表中删除记录。
参数:
tableName(string):目标表名conditions(string):WHERE子句,用于标识要删除的记录
只读: 不\ 破坏性: 是
高级操作
query
使用可选参数化值对数据库执行原始SQL查询。
参数:
sqlQuery(string):要执行的SQL查询parameters(字典,可选):参数化查询值
只读: 不\ 破坏性: 是
⚠️ 警告: 此工具执行原始SQL。当与不受信任的输入一起使用时,确保正确的输入验证,以防止SQL注入。
建筑
应用程序入口点
这 Program.cs 文件使用以下设置配置MCP服务器:
- 数据库连接:初始化
SqliteConnection使用SQLITE_DB_PATH环境变量 - 依赖注入:将连接注册为单例服务
- MCP服务器配置:使用stdio传输设置MCP,并自动从组件中发现工具
- 日志记录:配置控制台日志记录,输出指向标准错误
var databasePath = Environment.GetEnvironmentVariable("SQLITE_DB_PATH") ??
throw new InvalidOperationException("Environment variable SQLITE_DB_PATH is not set.");
builder.Services.AddSingleton(new SqliteConnection($"Data Source={databasePath}"));
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();工具实施
这 Tools.cs 类包含所有MCP工具:
- 基于属性的注册:工具使用注册
[McpServerToolType]类属性 - 基于方法的工具:每个公共方法代表一个可调用的工具
- 元数据:每种工具方法都装饰有:
- [McpServerTool]:将该方法标记为具有元数据的MCP工具 - Destructive:指示操作是否修改数据库状态 - ReadOnly:标记仅查询操作 - Name:可调用工具名称 - [Description]:提供用户友好的文档
错误处理
所有工具都实现了全面的错误处理:
- Try catch块包装所有数据库操作
- 异常被捕获并作为描述性错误消息返回
- 使用以下命令正确处理数据库连接
using声明 - 不会抛出任何异常;相反,错误作为返回值进行通信
建筑和包装
在当地建设
dotnet restore
dotnet build作为独立可执行文件构建
dotnet publish -c Release该项目配置为发布为:
- 一个自包含的单文件可执行文件
- 支持多个平台目标(Windows、Linux、macOS)
贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 通过适当的错误处理和文档记录实施更改
- 使用各种数据库模式进行测试
- 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
