数据库只读MCP服务器

该项目提供了一个用于MySQL和PostgreSQL数据库的只读模型上下文协议(MCP)服务器,允许客户端检查数据库模式、检索元数据并通过定义的工具执行只读SQL查询。

  • by kaulvimal
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 kaulvimal/mysql-mcp

使用说明

MySQL和PostgreSQL MCP服务器

概述

该项目提供了一个只读的模型上下文协议(MCP)服务器,用于与MySQL和PostgreSQL数据库进行交互。它允许与MCP兼容的客户端通过一组定义的工具检查数据库模式、检索元数据并执行只读SQL查询。服务器在构建时考虑了可扩展性,并为了安全起见强制执行只读操作。

功能和实现的工具

服务器通过MCP公开了几个用于数据库交互的工具。所有工具都是为只读操作而设计的。

架构和元数据工具

  • get_table_columns:检索特定表的列定义。
  • get_schema:获取详细的架构信息,包括表、列、索引和约束,具有不同的详细级别。
  • get_indexes:检索特定表或所有表的索引信息。
  • get_constraints:获取特定表或所有表的约束信息(主键、外键、唯一性、校验)。
  • compare_schemas:比较两个不同数据库架构的结构(表和列)。
  • explain_schema:生成数据库模式的文本或结构化(JSON)描述。
  • detect_schema_changes:返回当前架构的快照。(注:不与特定的过去时间进行比较)。
  • find_relationships:发现显式外键关系。可以选择尝试根据命名约定查找隐式关系(谨慎使用)。
  • find_navigation_paths:使用显式外键关系(BFS算法)查找两个表之间的路径。

查询执行工具

  • execute_query:执行给定的只读SQL查询(SELECT、SHOW、DESCRIBE、EXPLAIN)。
  • execute_batch:按顺序运行多个只读SQL查询。可以在第一个错误时停止或全部尝试。
  • prepare_statement:准备并执行带有参数的只读SQL语句。
  • explain_query:执行 EXPLAIN 在给定的SQL语句上显示查询执行计划(TEXT或JSON格式)。
  • get_query_history:占位符工具。当前未实现服务器端查询历史记录。

可视化工具

  • visualize_schema:生成JSON、DOT(Graphviz)或Mermaid语法的模式表示(表、列、关系),适用于创建ER图。

性能工具

  • get_performance_metrics:从MySQL检索选定的全局状态变量(例如正常运行时间、线程、查询)。不提供特定于查询的历史记录。

设置和安装

  1. 先决条件:

    • Node.js
    • npm
    • 访问MySQL或PostgreSQL数据库
  2. 克隆存储库:

    git clone https://github.com/kaulvimal/mysql-mcp
    cd mysql-mcp
    
  3. 安装依赖关系:

    npm install
    
  4. 构建项目:

    npm run build
    

    这将创建一个 build 包含编译代码的目录。

  5. 使用服务器

  • 创建shell脚本(例如。, mysql-mcp.sh)在项目根目录或方便的位置:

    #!/bin/bash
    # Set environment variables (if not using .env or want to override)
    export MYSQL_HOST=""
    export MYSQL_USER=""
    export MYSQL_PASSWORD=""
    export MYSQL_PORT=""
    
    export PG_HOST=""
    export PG_USER=""
    export PG_PASSWORD=""
    export PG_PORT=""
    export PG_DATABASE=""
    node $(dirname "$0")/build/index.js
    
  • 使脚本可执行:

    chmod +x mysql-mcp.sh
    
  • 集成示例(光标)

    要将此服务器与Cursor集成,您可以配置客户端运行服务器的执行脚本:

    {
    "mcpServers": {
    	"mysql-mcp": {
    	"command": "/path/to/your/mysql-mcp.sh" // Replace with the actual path to your script
    	}
    }
    }