AIGC标识 AdoMCP —— 让 AI 直接操作数据库的 MCP 服务器

AdoMCP —— 让 AI 直接操作数据库的 MCP 服务器

前言

在 AI 编程助手(如 GitHub Copilot、Claude 等)日益普及的今天,如何让 LLM 更好地理解和操作数据库一直是一个痛点。今天介绍一个开源项目 AdoMCP —— 一个基于 Model Context Protocol (MCP) 的数据库工具服务,让大型语言模型能够直接理解数据库结构、读取表注释、执行 SQL 查询。

项目地址:https://github.com/John0King/AdoMCP

什么是 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 按以下顺序使用工具:

  1. list_connections —— 发现可用连接
  2. 如果没有可用连接,调用 add_connection
  3. 在查看表/视图之前,调用 list_objects 定位 schema + objectType + objectName
  4. 使用 get_table_schema 获取列详情
  5. 需要索引/键设计信息时使用 get_table_indexes
  6. 仅用 query_sql 做只读验证
  7. 仅在明确授权且服务以 --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 传输模式:stdiohttp(未设置时自动检测)
ADOMCP_URLS HTTP 监听地址,如 http://0.0.0.0:5100

技术亮点

  1. 基于 .NET 10:使用最新的 .NET 技术栈,性能优异
  2. 多数据库支持:通过 Provider 模式支持五大主流数据库
  3. 注释感知:能读取各数据库的表注释和列注释,帮助 AI 理解业务语义
  4. 双传输模式:同时支持 stdio 和 HTTP/SSE,适配不同场景
  5. 动态连接管理:无需重启即可添加/移除数据库连接
  6. CSV 输出格式:查询结果以 CSV 返回,结构化且 token 占用少
  7. 官方 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

posted @ 2026-07-28 14:27  John0King  阅读(3)  评论(0)    收藏  举报