AdoMCP —— 让 AI 直接操作数据库的 MCP 服务器
AdoMCP —— 让 AI 直接操作数据库的 MCP 服务器
前言
在 AI 编程助手(如 GitHub Copilot、Claude 等)日益普及的今天,如何让 LLM 更好地理解和操作数据库一直是一个痛点。今天介绍一个开源项目 AdoMCP —— 一个基于 Model Context Protocol (MCP) 的数据库工具服务,让大型语言模型能够直接理解数据库结构、读取表注释、执行 SQL 查询。
什么是 MCP?
MCP(Model Context Protocol)是一个开放协议,允许 AI 模型与外部工具和数据源进行交互。简单来说,它定义了一种标准化的方式,让 LLM 能够调用外部工具来完成特定任务。
AdoMCP 正是实现了这个协议的一个数据库服务,让 AI 助手可以:
- 浏览数据库中的表、视图、存储过程等对象
- 查看表结构、字段类型、注释信息
- 执行只读 SQL 查询
- 在授权下执行写操作
支持的数据库
AdoMCP 支持主流的关系型数据库:
| 数据库 | 驱动 | 注释支持 |
|---|---|---|
| SQL Server | Microsoft.Data.SqlClient |
MS_Description 扩展属性 |
| MySQL / MariaDB | MySqlConnector |
TABLE_COMMENT / COLUMN_COMMENT |
| PostgreSQL | Npgsql |
obj_description / col_description |
| SQLite | Microsoft.Data.Sqlite |
—(SQLite 无原生注释) |
| Oracle | Oracle.ManagedDataAccess.Core |
ALL_TAB_COMMENTS / ALL_COL_COMMENTS(含 PUBLIC 同义词) |
基于 Dapper 构建数据访问层。
MCP 工具列表
AdoMCP 提供了以下 MCP 工具供 AI 模型调用:
| 工具 | 描述 |
|---|---|
list_connections |
列出已配置的数据库连接 |
add_connection |
在运行时动态添加(或替换)数据库连接 |
remove_connection |
移除动态添加的连接 |
list_objects |
列出数据库对象(表/视图/存储过程/函数/触发器/序列/同义词等) |
get_table_schema |
获取表结构详情(列/类型/可空性/主键/默认值/注释) |
get_table_indexes |
获取表索引信息 |
query_sql |
执行只读 SQL 查询并返回 CSV 格式结果 |
execute_sql |
执行写操作 SQL(需要 --allow-any-sql 参数启用) |
推荐工作流
为了减少错误(如操作了错误的数据库/模式/对象),建议 AI 按以下顺序使用工具:
list_connections—— 发现可用连接- 如果没有可用连接,调用
add_connection - 在查看表/视图之前,调用
list_objects定位schema + objectType + objectName - 使用
get_table_schema获取列详情 - 需要索引/键设计信息时使用
get_table_indexes - 仅用
query_sql做只读验证 - 仅在明确授权且服务以
--allow-any-sql启动时使用execute_sql
快速开始
环境要求
方式一:通过 NuGet 全局工具安装
# 安装为全局 .NET 工具
dotnet tool install -g AdoMcp
adomcp
# 或使用 dnx(.NET 10+)—— 按需安装并运行
dnx AdoMcp
方式二:从源码运行
# 克隆仓库
git clone https://github.com/John0King/AdoMCP.git
cd AdoMCP
# 运行(自动检测模式)
dotnet run --project src/AdoMcp
传输模式
AdoMCP 支持两种传输模式:
- stdio 模式:当 stdin 被重定向时(即被 MCP 客户端启动)自动使用
- HTTP/SSE 模式:在终端交互运行时自动使用,默认监听
http://localhost:5100
# 手动指定 stdio 模式
dotnet run --project src/AdoMcp -- --stdio
# 手动指定 HTTP 模式
dotnet run --project src/AdoMcp -- --http
# 启用写操作
dotnet run --project src/AdoMcp -- --allow-any-sql
客户端配置
VS Code / GitHub Copilot 配置
在 MCP 客户端配置中添加:
{
"mcpServers": {
"adomcp": {
"command": "dnx",
"args": ["-y", "AdoMcp"]
}
}
}
HTTP 模式配置
先启动服务:
dnx -y AdoMcp -- --http
然后配置客户端:
{
"mcpServers": {
"adomcp": {
"url": "http://localhost:5100/mcp"
}
}
}
数据库连接配置
预配置方式
编辑 appsettings.json:
{
"Databases": [
{
"Name": "mydb",
"DbType": "SqlServer",
"ConnectionString": "Server=localhost;Database=MyDb;User Id=sa;Password=***;TrustServerCertificate=true;",
"Description": "主业务数据库"
}
]
}
动态连接(运行时添加)
LLM 可以在会话中使用 add_connection 工具动态添加连接,无需修改配置文件:
用户:连接到 Oracle 数据库 oradb01
LLM → 调用 add_connection(
connectionString = "Data Source=oradb01:1521/PROD;User Id=appuser;Password=***;",
dbType = "Oracle",
name = "prod-oracle",
description = "生产 Oracle 数据库"
)
→ 返回:Connection 'prod-oracle' (Oracle) added successfully.
动态添加的连接仅在进程生命周期内有效;重启服务后需重新添加或将其写入 appsettings.json。
安全设计
AdoMCP 在安全方面做了周到的考虑:
- 默认只读:
execute_sql工具默认禁用,需要--allow-any-sql参数显式启用 - SQL 关键词检测:
query_sql会检测并拒绝包含写操作关键词的 SQL - 连接测试:添加新连接时默认会先测试连接有效性
- 敏感信息保护:建议使用 .NET User Secrets 或环境变量管理连接字符串
环境变量
所有环境变量以 ADOMCP_ 为前缀(可覆盖 appsettings.json):
| 变量 | 描述 |
|---|---|
ADOMCP_MODE |
传输模式:stdio 或 http(未设置时自动检测) |
ADOMCP_URLS |
HTTP 监听地址,如 http://0.0.0.0:5100 |
技术亮点
- 基于 .NET 10:使用最新的 .NET 技术栈,性能优异
- 多数据库支持:通过 Provider 模式支持五大主流数据库
- 注释感知:能读取各数据库的表注释和列注释,帮助 AI 理解业务语义
- 双传输模式:同时支持 stdio 和 HTTP/SSE,适配不同场景
- 动态连接管理:无需重启即可添加/移除数据库连接
- CSV 输出格式:查询结果以 CSV 返回,结构化且 token 占用少
- 官方 MCP Registry 注册:已集成官方 MCP Registry 发布流程
总结
AdoMCP 是一个实用的 MCP 数据库服务,它让 AI 助手能够真正"看懂"你的数据库。无论是日常开发中让 AI 帮你写查询,还是在 CI/CD 中自动化数据库探索,AdoMCP 都能发挥重要作用。
如果你正在使用支持 MCP 协议的 AI 工具(如 VS Code + GitHub Copilot),不妨试试 AdoMCP,让数据库操作变得更加智能。
GitHub:https://github.com/John0King/AdoMCP
许可证:MIT

浙公网安备 33010602011771号