list_databases
Discover available databases on SQL Server by querying sys.databases, excluding system databases by default and respecting blocklist configurations to identify accessible data sources.
Instructions
List all available databases on the SQL Server.
Queries sys.databases to discover accessible databases. System databases
(master, tempdb, model, msdb) are excluded by default. Databases in the
blocklist (MSSQL_BLOCKED_DATABASES) are always excluded.
Args:
include_system: If True, include system databases in the list
Returns:
Dictionary with:
- databases: List of available database names
- current_database: The currently active database
- count: Number of databases returned
- blocked_count: Number of databases hidden due to blocklist
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| include_system | No |
Implementation Reference
- src/mssql_mcp/tools/databases.py:15-81 (handler)The handler function for the 'list_databases' tool. It queries sys.databases, filters out blocked and system databases (unless include_system=True), and returns a dict with the list of databases, current database, count, and blocked count.@mcp.tool() def list_databases(include_system: bool = False) -> dict[str, Any]: """List all available databases on the SQL Server. Queries sys.databases to discover accessible databases. System databases (master, tempdb, model, msdb) are excluded by default. Databases in the blocklist (MSSQL_BLOCKED_DATABASES) are always excluded. Args: include_system: If True, include system databases in the list Returns: Dictionary with: - databases: List of available database names - current_database: The currently active database - count: Number of databases returned - blocked_count: Number of databases hidden due to blocklist """ try: manager = get_connection_manager() config = manager.config blocked_databases = config.blocked_databases # Query all databases query = """ SELECT name, database_id, state_desc FROM sys.databases WHERE state_desc = 'ONLINE' ORDER BY name """ rows = manager.execute_query(query) # Filter databases databases = [] blocked_count = 0 for row in rows: db_name = row["name"] db_name_lower = db_name.lower() # Check if blocked if db_name_lower in blocked_databases: blocked_count += 1 continue # Check if system database if not include_system and db_name_lower in SYSTEM_DATABASES: continue databases.append(db_name) # Get current database current_db_query = "SELECT DB_NAME() AS current_database" current_db_result = manager.execute_query(current_db_query) current_database = current_db_result[0]["current_database"] if current_db_result else None return { "databases": databases, "current_database": current_database, "count": len(databases), "blocked_count": blocked_count, } except Exception as e: logger.error(f"Error listing databases: {e}") return {"error": str(e)}