SQL数据库访问服务

SQLAlchemy MCP Server and CLI 是一个通过SQLAlchemy提供SQL数据库访问的MCP服务器,支持多种数据库的只读或读写模式,简化了AI驱动工作流中的数据库交互。

  • by alexxonline
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 alexxonline/sql-alchemy-mcp

使用说明

SQLAlchemy MCP服务器和CLI

一 主控程序 通过以下方式提供SQL数据库访问的服务器 SQLAlchemy.内置 FastMCP,它支持SQLAlchemy支持和操作的任何数据库 只读 或 可读写的 模式。

动机

随着人工智能代理在开发工作流程中变得越来越普遍,数据库访问出现了一个意想不到的问题:SQL很冗长。

当代理需要与数据库交互时,它通常必须生成完整的SQL查询,这会增加:

  • 提示大小

  • 令牌使用量

  • 跨方言语法错误的可能性

此工具在SQLAlchemy上提供了一个MCP服务器和一个紧凑的CLI抽象,允许代理(或人类)使用短命令而不是完整的SQL语句与多个数据库进行交互。

优点:

  • 不同数据库引擎的统一接口

  • SQLAlchemy处理方言差异

  • AI驱动的工作流程的命令明显更短

特性

  • 通用数据库支持 --SQLite、PostgreSQL、MySQL、Oracle、MSSQL和 60+其他数据库 通过SQLAlchemy
  • 只读和读写模式 --使用命令行标志控制访问
  • MCP工具 --查询、反思和修改数据库
  • MCP资源 --浏览数据库模式、表、DDL和示例数据
  • MCP提示 --获取编写、解释和优化SQL查询的帮助

安装

pip install sqlalchemy-mcp-server

使用特定于数据库的驱动程序:

pip install "sqlalchemy-mcp-server[postgresql]"   # PostgreSQL (psycopg2)
pip install "sqlalchemy-mcp-server[mysql]"         # MySQL (PyMySQL)
pip install "sqlalchemy-mcp-server[oracle]"        # Oracle (oracledb)
pip install "sqlalchemy-mcp-server[mssql]"         # MSSQL (pyodbc)
pip install "sqlalchemy-mcp-server[all]"           # All drivers

从本地签出安装

如果您更愿意克隆存储库并从源代码安装(例如,运行未发布的版本或进行自己的更改):

git clone https://github.com/alexxonline/sql-alchemy-mcp.git
cd sql-alchemy-mcp

# (recommended) create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# install the package from the current directory
pip install .

# ...or with database-specific drivers
pip install ".[postgresql]"      # or [mysql], [oracle], [mssql], [all]

# ...or as an editable install, so code changes take effect without reinstalling
pip install -e .

一旦以这种方式安装 sqlalchemy-mcp-server 命令的可用性与PyPI安装完全相同(请参见 快速开始 在......下面

从源代码运行,无需安装

您还可以直接从克隆的存储库运行,而无需安装软件包。安装依赖项后(pip install fastmcp sqlalchemy,加上您需要的任何驱动程序),从repo根目录将其作为模块调用:

python -m sqlalchemy_mcp_server --db-url "sqlite:///mydb.db"

python -m sqlalchemy_mcp_server ... 接受与 sqlalchemy-mcp-server 本README中显示的命令,包括 --cli 模式。

随着 紫外线,您可以从结账处运行,而无需自己管理虚拟环境:

uv run sqlalchemy-mcp-server --db-url "sqlite:///mydb.db"

将MCP客户端指向本地签出时,使用模块表单作为命令:

{
  "mcpServers": {
    "my-database": {
      "command": "python",
      "args": [
        "-m", "sqlalchemy_mcp_server",
        "--db-url", "sqlite:///path/to/mydb.db",
        "--mode", "readonly"
      ],
      "cwd": "/path/to/sql-alchemy-mcp"
    }
  }
}

快速开始

# Read-only access to a SQLite database
sqlalchemy-mcp-server --db-url "sqlite:///mydb.db"

# Read-write access to PostgreSQL
sqlalchemy-mcp-server --db-url "postgresql://user:pass@localhost/mydb" --mode readwrite

# HTTP transport on a custom port
sqlalchemy-mcp-server --db-url "sqlite:///mydb.db" --transport http --port 9000

服务器选项

sqlalchemy-mcp-server [OPTIONS]
参数 默认值 描述
--db-url (必填) SQLAlchemy连接URL(或 SQLALCHEMY_MCP_DB_URL ) 。
--mode readonly readonly 或 readwrite
--transport stdio MCP传输: stdio 或 http
--port 8000 HTTP传输端口
--pool-size 5 连接池大小
--no-pool-pre-ping (关闭) 禁用连接预ping
--cli (关闭) 在CLI模式下运行(执行一次命令,然后退出)

命令行接口命令模式

加 --cli 将任何工具、资源或提示作为一次性命令运行。程序连接、执行、将结果打印到stdout并退出——没有启动MCP服务器。

运行工具

# Query a table
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli query --sql "SELECT * FROM users"

# List tables
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli list_tables

# Describe a table
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli describe_table --table-name users

# Get CREATE TABLE DDL
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli get_table_ddl --table-name users

# Execute a write statement (requires --mode readwrite)
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --mode readwrite --cli execute \
  --sql "INSERT INTO users (name, email) VALUES ('alice', 'alice@example.com')"

# Create a table (requires --mode readwrite)
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --mode readwrite --cli create_table \
  --table-name events \
  --columns '[{"name": "id", "type": "INTEGER", "primary_key": true}, {"name": "title", "type": "TEXT"}]'

阅读资源

# Database overview
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli resource schema

# List all tables
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli resource tables

# Table details
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli resource table --table-name users

# Table DDL
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli resource table-ddl --table-name users

# Sample rows
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli resource table-sample --table-name users --limit 10

渲染提示

# Schema overview prompt
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli prompt explain_schema

# SQL query help
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli prompt sql_query \
  --table-names "users,orders" --task "find users with no orders"

# Query optimization
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli prompt optimize_query \
  --sql "SELECT * FROM users WHERE name = 'alice'"

输出格式化

# Pretty-printed JSON (default)
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli query --sql "SELECT * FROM users"

# Compact JSON (for piping)
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli query --sql "SELECT * FROM users" --compact

# Plain text table
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli query --sql "SELECT * FROM users" --format table

输出到stdout,错误到stderr,因此CLI模式可以与shell管道组合:

# Pipe to jq
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli query \
  --sql "SELECT * FROM users" --compact | jq '.[].name'

# Use in a script
TABLES=$(sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli list_tables --compact)

获得帮助

# List all CLI commands
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli --help

# Help for a specific command
sqlalchemy-mcp-server --db-url sqlite:///mydb.db --cli query --help

支持的数据库

数据库 驱动程序包 URL格式 安装额外
SQLite (内置) sqlite:///path/to/db.db (无)
PostgreSQL psycopg2二进制 postgresql://user:pass@host/dbname [postgresql]
MySQL PyMySQL mysql+pymysql://user:pass@host/dbname [mysql]
Oracle oracledb oracle+oracledb://user:pass@host:1521/?service_name=svc [oracle]
MSSQL pyodbc mssql+pyodbc://user:pass@dsn [mssql]
任何其他 (用户安装) 按 SQLAlchemy文档 手册

MCP客户端配置

克劳德桌面

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "my-database": {
      "command": "sqlalchemy-mcp-server",
      "args": [
        "--db-url", "sqlite:///path/to/mydb.db",
        "--mode", "readonly"
      ]
    }
  }
}

带uvx的Claude桌面(无需安装)

{
  "mcpServers": {
    "my-database": {
      "command": "uvx",
      "args": [
        "sqlalchemy-mcp-server",
        "--db-url", "postgresql://user:pass@localhost/mydb",
        "--mode", "readwrite"
      ]
    }
  }
}

可用工具

只读工具(始终可用)

工具 说明
query 执行只读SQL查询(SELECT/WITH/EXPLAIN)
list_tables 列出所有表和视图
describe_table 获取表的列、PK、FK和索引
list_schemas 列出所有数据库架构
get_table_ddl 获取表的CREATE TABLE DDL
explain_query 获取SELECT查询的执行计划

写入工具(仅限读写模式)

工具 说明
execute 执行SQL语句(INSERT、UPDATE、DELETE等)
execute_many 执行具有多个参数集的语句
create_table 根据列定义创建表
drop_table 放下一张桌子
add_column 向现有表添加列
create_index 创建索引(常规或唯一)

可用资源

URI 描述
db://schema 数据库概述(方言、模式、表计数)
db://tables 所有表和视图的列表
db://tables/{table_name} 特定表的详细架构
db://tables/{table_name}/ddl CREATE TABLE DDL语句
db://tables/{table_name}/sample 表中的示例行

可用提示

提示 描述
sql_query 帮助为指定的表和任务编写SQL查询
explain_schema 数据库模式的全面概述
optimize_query 使用EXPLAIN输出分析和优化SQL查询

发展

# Clone and install in development mode
git clone https://github.com/alexxonline/sql-alchemy-mcp.git
cd sql-alchemy-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Run tests
pytest tests/ -v