Database

Servidor MCP de base de datos universal que admite múltiples tipos de bases de datos, incluyendo PostgreSQL, Redshift, CockroachDB, MySQL, RDS MySQL, Microsoft SQL Server, BigQuery, Oracle DB y SQLite

Documentación

Multi-Database MCP Server (por Legion AI)

Un servidor que ayuda a las personas a acceder y consultar datos en bases de datos utilizando el Legion Query Runner con integración del SDK de Python del Model Context Protocol (MCP).

Inicio de Generación Aquí

Esta herramienta es proporcionada por Legion AI. Para utilizar la herramienta de análisis de datos de IA completa y totalmente potenciada, visite el sitio. Envíenos un correo electrónico si hay una base de datos que desee que soportemos.

Fin de Generación Aquí

Por qué elegir Database MCP

Database MCP se destaca de otras soluciones de acceso a bases de datos por varias razones convincentes:

  • Interfaz unificada de múltiples bases de datos: Conéctese a PostgreSQL, MySQL, SQL Server y otras bases de datos a través de una API consistente única: no es necesario aprender diferentes bibliotecas de cliente para cada tipo de base de datos.
  • Integración lista para IA: Construido específicamente para interacciones de asistentes de IA a través del Model Context Protocol (MCP), permitiendo operaciones de bases de datos en lenguaje natural.
  • Descubrimiento de esquemas sin configuración: Descubre y expone automáticamente los esquemas de bases de datos sin configuración o mapeo manual.
  • Herramientas independientes de la base de datos: Encuentre tablas, explore esquemas y ejecute consultas con el mismo conjunto de herramientas independientemente de la tecnología de base de datos subyacente.
  • Gestión segura de credenciales: Maneja los detalles de autenticación de la base de datos de forma segura, separando las credenciales del código de la aplicación.
  • Implementación simple: Funciona con entornos modernos de desarrollo de IA como LangChain, FastAPI y otros con una configuración mínima.
  • Diseño extensible: Agregue fácilmente herramientas y avisos personalizados para mejorar la funcionalidad para casos de uso específicos.

Ya sea que esté construyendo agentes de IA que necesiten acceso a bases de datos o simplemente desee una interfaz unificada para múltiples bases de datos, Database MCP proporciona una solución optimizada que reduce drásticamente el tiempo y la complejidad del desarrollo.

Características

  • Soporte de múltiples bases de datos: conéctese a múltiples bases de datos simultáneamente
  • Acceso a bases de datos a través de Legion Query Runner
  • Soporte del Model Context Protocol (MCP) para asistentes de IA
  • Exponer operaciones de bases de datos como recursos, herramientas y avisos de MCP
  • Múltiples opciones de implementación (servidor MCP independiente, integración con FastAPI)
  • Ejecución de consultas y manejo de resultados
  • Configuración flexible mediante variables de entorno, argumentos de línea de comandos o JSON de configuración de MCP
  • Selección de base de datos impulsada por el usuario para configuraciones de múltiples bases de datos

Bases de datos soportadas

Base de datoscódigo DB_TYPE
PostgreSQLpg
Redshiftredshift
CockroachDBcockroach
MySQLmysql
RDS MySQLrds_mysql
Microsoft SQL Servermssql
Big Querybigquery
Oracle DBoracle
SQLitesqlite

Usamos la biblioteca Legion Query Runner como conectores. Puede encontrar más información en su documentación de API.

¿Qué es MCP?

El Model Context Protocol (MCP) es una especificación para mantener el contexto en aplicaciones de IA. Este servidor utiliza el SDK de Python de MCP para:

  • Exponer operaciones de bases de datos como herramientas para asistentes de IA
  • Proporcionar esquemas y metadatos de bases de datos como recursos
  • Generar avisos útiles para operaciones de bases de datos
  • Habilitar interacciones con estado con bases de datos

Instalación y configuración

Parámetros requeridos

Para configuración de una sola base de datos:

  • DB_TYPE: El código de tipo de base de datos (ver tabla anterior)
  • DB_CONFIG: Una cadena de configuración JSON para la conexión a la base de datos

Para configuración de múltiples bases de datos:

  • DB_CONFIGS: Una matriz JSON de configuraciones de bases de datos, cada una con:
    • db_type: El código de tipo de base de datos
    • configuration: Configuración de conexión a la base de datos
    • description: Una descripción legible por humanos de la base de datos

El formato de configuración varía según el tipo de base de datos. Consulte la documentación de API para obtener detalles de configuración específicos de la base de datos.

Métodos de instalación

Opción 1: Usando UV (Recomendado)

Cuando se usa uv, no se necesita una instalación específica. Usaremos uvx para ejecutar directamente database-mcp.

Ejemplo de configuración UV (una sola base de datos):

REPLACE DB_TYPE and DB_CONFIG with your connection info.
{
    "mcpServers": {
      "database-mcp": {
        "command": "uvx",
        "args": [
          "database-mcp"
        ],
        "env": {
          "DB_TYPE": "pg",
          "DB_CONFIG": "{\"host\":\"localhost\",\"port\":5432,\"user\":\"user\",\"password\":\"pw\",\"dbname\":\"dbname\"}"
        },
        "disabled": true,
        "autoApprove": []
      }
    }
}

Ejemplo de configuración UV (múltiples bases de datos):

{
    "mcpServers": {
      "database-mcp": {
        "command": "uvx",
        "args": [
          "database-mcp"
        ],
        "env": {
          "DB_CONFIGS": "[{\"id\":\"pg_main\",\"db_type\":\"pg\",\"configuration\":{\"host\":\"localhost\",\"port\":5432,\"user\":\"user\",\"password\":\"pw\",\"dbname\":\"postgres\"},\"description\":\"PostgreSQL Database\"},{\"id\":\"mysql_data\",\"db_type\":\"mysql\",\"configuration\":{\"host\":\"localhost\",\"port\":3306,\"user\":\"root\",\"password\":\"pass\",\"database\":\"mysql\"},\"description\":\"MySQL Database\"}]"
        },
        "disabled": true,
        "autoApprove": []
      }
    }
}

Opción 2: Usando PIP

Instale mediante pip:

pip install database-mcp

Ejemplo de configuración PIP (una sola base de datos):

{
  "mcpServers": {
    "database": {
      "command": "python",
      "args": [
        "-m", "database_mcp", 
        "--repository", "path/to/git/repo"
      ],
      "env": {
        "DB_TYPE": "pg",
        "DB_CONFIG": "{\"host\":\"localhost\",\"port\":5432,\"user\":\"user\",\"password\":\"pw\",\"dbname\":\"dbname\"}"
      }
    }
  }
}

Ejecutando el servidor

Modo de producción

python mcp_server.py

Métodos de configuración

Variables de entorno (una sola base de datos)

export DB_TYPE="pg"  # or mysql, postgresql, etc.
export DB_CONFIG='{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}'
uv run src/database_mcp/mcp_server.py

Variables de entorno (múltiples bases de datos)

export DB_CONFIGS='[{"id":"pg_main","db_type":"pg","configuration":{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"},"description":"PostgreSQL Database"},{"id":"mysql_users","db_type":"mysql","configuration":{"host":"localhost","port":3306,"user":"root","password":"pass","database":"mysql"},"description":"MySQL Database"}]'
uv run src/database_mcp/mcp_server.py

Si no especifica un ID, el sistema generará uno automáticamente basado en el tipo y la descripción de la base de datos:

export DB_CONFIGS='[{"db_type":"pg","configuration":{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"},"description":"PostgreSQL Database"},{"db_type":"mysql","configuration":{"host":"localhost","port":3306,"user":"root","password":"pass","database":"mysql"},"description":"MySQL Database"}]'
# IDs will be generated as something like "pg_postgres_0" and "my_mysqldb_1"
uv run src/database_mcp/mcp_server.py

Argumentos de línea de comandos (una sola base de datos)

python mcp_server.py --db-type pg --db-config '{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}'

Argumentos de línea de comandos (múltiples bases de datos)

python mcp_server.py --db-configs '[{"id":"pg_main","db_type":"pg","configuration":{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"},"description":"PostgreSQL Database"},{"id":"mysql_users","db_type":"mysql","configuration":{"host":"localhost","port":3306,"user":"root","password":"pass","database":"mysql"},"description":"MySQL Database"}]'

Tenga en cuenta que puede especificar IDs personalizados para cada base de datos usando el campo id, o dejar que el sistema los genere basándose en el tipo y la descripción de la base de datos.

Soporte para múltiples bases de datos

Al conectarse a múltiples bases de datos, debe especificar qué base de datos usar para cada consulta:

  1. Use la herramienta list_databases para ver las bases de datos disponibles con sus IDs
  2. Use get_database_info para ver los detalles del esquema de las bases de datos
  3. Use find_table para localizar una tabla en todas las bases de datos
  4. Proporcione el parámetro db_id a herramientas como execute_query, get_table_columns, etc.

Las conexiones a bases de datos se gestionan internamente como un diccionario de objetos DbConfig, con cada base de datos teniendo un ID único. La información del esquema se representa como una lista de objetos de tabla, donde cada tabla contiene su nombre e información de columnas.

El aviso select_database guía a los usuarios a través del proceso de selección de bases de datos.

Representación del esquema

Los esquemas de bases de datos se representan como una lista de objetos de tabla, donde cada tabla contiene información sobre sus columnas:

[
  {
    "name": "users",
    "columns": [
      {"name": "id", "type": "integer"},
      {"name": "username", "type": "varchar"},
      {"name": "email", "type": "varchar"}
    ]
  },
  {
    "name": "orders",
    "columns": [
      {"name": "id", "type": "integer"},
      {"name": "user_id", "type": "integer"},
      {"name": "product_id", "type": "integer"},
      {"name": "quantity", "type": "integer"}
    ]
  }
]

Esta representación facilita el acceso programático a la información de tablas y columnas mientras se mantiene una estructura jerárquica limpia.

Capacidades MCP expuestas

Recursos

RecursoDescripción
resource://schema/{database_id}Obtener los esquemas de una o todas las bases de datos configuradas

Herramientas

HerramientaDescripción
execute_queryEjecutar una consulta SQL y devolver resultados como tabla markdown
execute_query_jsonEjecutar una consulta SQL y devolver resultados como JSON
get_table_columnsObtener nombres de columnas para una tabla específica
get_table_typesObtener tipos de columnas para una tabla específica
get_query_historyObtener el historial reciente de consultas
list_databasesListar todas las conexiones de bases de datos disponibles
get_database_infoObtener información detallada sobre una base de datos, incluido el esquema
find_tableEncontrar qué base de datos contiene una tabla específica
describe_tableObtener descripción detallada de una tabla, incluidos nombres y tipos de columnas
get_table_sampleObtener una muestra de datos de una tabla

Todas las herramientas específicas de bases de datos (como execute_query, get_table_columns, etc.) requieren un parámetro db_id para especificar qué base de datos usar.

Avisos

AvisoDescripción
sql_queryCrear una consulta SQL contra la base de datos
explain_queryExplicar qué hace una consulta SQL
optimize_queryOptimizar una consulta SQL para un mejor rendimiento
select_databaseAyudar al usuario a seleccionar qué base de datos usar

Desarrollo

Usando MCP Inspector

ejecute esto para iniciar el inspector

npx @modelcontextprotocol/inspector uv run src/database_mcp/mcp_server.py

luego, en el campo de entrada de comandos, establezca algo como

run src/database_mcp/mcp_server.py --db-type pg --db-config '{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}'

Pruebas

uv pip install -e ".[dev]"
pytest

Publicación

# Clean up build artifacts
rm -rf dist/ build/ 
# Remove any .egg-info directories if they exist
find . -name "*.egg-info" -type d -exec rm -rf {} + 2>/dev/null || true
# Build the package
uv run python -m build
# Upload to PyPI
uv run python -m twine upload dist/*

Licencia

Este repositorio está licenciado bajo GPL