Skip to main content
Glama

database-mcp

README.md11.7 kB
# Multi-Database MCP Server (by Legion AI) A server that helps people access and query data in databases using the Legion Query Runner with integration of the Model Context Protocol (MCP) Python SDK. # Start Generation Here This tool is provided by [Legion AI](https://thelegionai.com/). To use the full-fledged and fully powered AI data analytics tool, please visit the site. Email us if there is one database you want us to support. # End Generation Here ## Why Choose Database MCP Database MCP stands out from other database access solutions for several compelling reasons: - **Unified Multi-Database Interface**: Connect to PostgreSQL, MySQL, SQL Server, and other databases through a single consistent API - no need to learn different client libraries for each database type. - **AI-Ready Integration**: Built specifically for AI assistant interactions through the Model Context Protocol (MCP), enabling natural language database operations. - **Zero-Configuration Schema Discovery**: Automatically discovers and exposes database schemas without manual configuration or mapping. - **Database-Agnostic Tools**: Find tables, explore schemas, and execute queries with the same set of tools regardless of the underlying database technology. - **Secure Credential Management**: Handles database authentication details securely, separating credentials from application code. - **Simple Deployment**: Works with modern AI development environments like LangChain, FastAPI, and others with minimal setup. - **Extensible Design**: Easily add custom tools and prompts to enhance functionality for specific use cases. Whether you're building AI agents that need database access or simply want a unified interface to multiple databases, Database MCP provides a streamlined solution that dramatically reduces development time and complexity. ## Features - Multi-database support - connect to multiple databases simultaneously - Database access via Legion Query Runner - Model Context Protocol (MCP) support for AI assistants - Expose database operations as MCP resources, tools, and prompts - Multiple deployment options (standalone MCP server, FastAPI integration) - Query execution and result handling - Flexible configuration via environment variables, command-line arguments, or MCP settings JSON - User-driven database selection for multi-database setups ## Supported Databases | Database | DB_TYPE code | |----------|--------------| | PostgreSQL | pg | | Redshift | redshift | | CockroachDB | cockroach | | MySQL | mysql | | RDS MySQL | rds_mysql | | Microsoft SQL Server | mssql | | Big Query | bigquery | | Oracle DB | oracle | | SQLite | sqlite | We use Legion Query Runner library as connectors. You can find more info on their [api doc](https://theralabs.github.io/legion-database/docs/category/query-runners). ## What is MCP? The Model Context Protocol (MCP) is a specification for maintaining context in AI applications. This server uses the [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) to: - Expose database operations as tools for AI assistants - Provide database schemas and metadata as resources - Generate useful prompts for database operations - Enable stateful interactions with databases ## Installation & Configuration ### Required Parameters For single database configuration: - **DB_TYPE**: The database type code (see table above) - **DB_CONFIG**: A JSON configuration string for database connection For multi-database configuration: - **DB_CONFIGS**: A JSON array of database configurations, each containing: - **db_type**: The database type code - **configuration**: Database connection configuration - **description**: A human-readable description of the database The configuration format varies by database type. See the [API documentation](https://theralabs.github.io/legion-database/docs/category/query-runners) for database-specific configuration details. ### Installation Methods #### Option 1: Using UV (Recommended) When using [`uv`](https://docs.astral.sh/uv/), no specific installation is needed. We will use [`uvx`](https://docs.astral.sh/uv/guides/tools/) to directly run *database-mcp*. **UV Configuration Example (Single Database):** ```json 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": [] } } } ``` **UV Configuration Example (Multiple Databases):** ```json { "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": [] } } } ``` #### Option 2: Using PIP Install via pip: ```bash pip install database-mcp ``` **PIP Configuration Example (Single Database):** ```json { "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\"}" } } } } ``` ## Running the Server ### Production Mode ```bash python mcp_server.py ``` ### Configuration Methods #### Environment Variables (Single Database) ```bash 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 ``` #### Environment Variables (Multiple Databases) ```bash 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 ``` If you don't specify an ID, the system will generate one automatically based on the database type and description: ```bash 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 ``` #### Command Line Arguments (Single Database) ```bash python mcp_server.py --db-type pg --db-config '{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}' ``` #### Command Line Arguments (Multiple Databases) ```bash 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"}]' ``` Note that you can specify custom IDs for each database using the `id` field, or let the system generate them based on database type and description. ## Multi-Database Support When connecting to multiple databases, you need to specify which database to use for each query: 1. Use the `list_databases` tool to see available databases with their IDs 2. Use `get_database_info` to view schema details of databases 3. Use `find_table` to locate a table across all databases 4. Provide the `db_id` parameter to tools like `execute_query`, `get_table_columns`, etc. Database connections are managed internally as a dictionary of `DbConfig` objects, with each database having a unique ID. Schema information is represented as a list of table objects, where each table contains its name and column information. The `select_database` prompt guides users through the database selection process. ## Schema Representation Database schemas are represented as a list of table objects, with each table containing information about its columns: ```json [ { "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"} ] } ] ``` This representation makes it easy to programmatically access table and column information while keeping a clean hierarchical structure. ## Exposed MCP Capabilities ### Resources | Resource | Description | |----------|-------------| | `resource://schema/{database_id}` | Get the schemas for one or all configured databases | ### Tools | Tool | Description | |------|-------------| | `execute_query` | Execute a SQL query and return results as a markdown table | | `execute_query_json` | Execute a SQL query and return results as JSON | | `get_table_columns` | Get column names for a specific table | | `get_table_types` | Get column types for a specific table | | `get_query_history` | Get the recent query history | | `list_databases` | List all available database connections | | `get_database_info` | Get detailed information about a database including schema | | `find_table` | Find which database contains a specific table | | `describe_table` | Get detailed description of a table including column names and types | | `get_table_sample` | Get a sample of data from a table | All database-specific tools (like `execute_query`, `get_table_columns`, etc.) require a `db_id` parameter to specify which database to use. ### Prompts | Prompt | Description | |--------|-------------| | `sql_query` | Create an SQL query against the database | | `explain_query` | Explain what a SQL query does | | `optimize_query` | Optimize a SQL query for better performance | | `select_database` | Help user select which database to use | ## Development ### Using MCP Inspector run this to start the inspector ```bash npx @modelcontextprotocol/inspector uv run src/database_mcp/mcp_server.py ``` then in the command input field, set something like ``` run src/database_mcp/mcp_server.py --db-type pg --db-config '{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}' ``` ### Testing ```bash uv pip install -e ".[dev]" pytest ``` ### Publishing ```bash # 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/* ``` ## License This repository is licensed under GPL

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheRaLabs/legion-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server