Skip to main content

A Python MCP stdio server for database metadata extraction.

Project description

mcp-name: io.github.Optisol-Business/db-metadata-extractor-mcp

Database Metadata Extractor MCP Server

A Model Context Protocol (MCP) server that extracts and queries database schema metadata from PostgreSQL, Snowflake, SQL Server, BigQuery, and Oracle databases.

Features

  • Multi-database support: PostgreSQL, Snowflake, SQL Server (MSSQL), BigQuery, Oracle
  • Complete schema extraction: Tables, columns, primary keys, indexes, constraints
  • Local JSON output: Saves metadata directly to local folder (no cloud required)
  • Query interface: Search and filter metadata by table/column names
  • Pagination support: Browse large schemas efficiently
  • VS Code integration: Works with VS Code Agent Mode
  • CLI customizable: Transport options (stdio, HTTP)

Installation

From PyPI

pip install db-metadata-extractor-mcp

From Source

git clone https://github.com/Optisol-Business/db-metadata-extractor-mcp.git
cd db-metadata-extractor-mcp
pip install -e .

Quick Start

1. Start the MCP Server

db-metadata-extractor-mcp

The server starts in stdio mode by default and listens for MCP client connections.

2. Configure in Claude Desktop

Add to ~/.config/Claude/claude_desktop_config.json (macOS/Linux) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "db-metadata-extractor": {
      "command": "db-metadata-extractor-mcp",
      "args": [],
      "env": {}
    }
  }
}

Restart Claude Desktop.

3. Use in Claude

Tell Claude:

Extract metadata from my PostgreSQL database and save it to /tmp/output

Claude will use the server's tools to extract and query your database schema.

Tools

extract_metadata

Extracts complete schema metadata from a database.

Parameters:

  • db_type (required): postgresql, snowflake, sqlserver, bigquery, oracle
  • output_path (required): Local directory for JSON output
  • database_name: Database/schema name
  • host: Database host (not needed for BigQuery/Snowflake)
  • port: Database port
  • username: Database user
  • password: Database password
  • schema_name: Specific schema (optional)
  • tables: Array of table names to extract (optional)
  • account: Snowflake account ID
  • warehouse: Snowflake warehouse
  • role_name: Snowflake role
  • project_id: BigQuery project ID
  • service_account_key: BigQuery service account JSON (base64 encoded)

Returns:

  • File path where metadata was saved
  • Summary statistics (table count, column count, etc.)

query_metadata

Query previously extracted metadata.

Parameters:

  • filepath (required): Path to metadata JSON file
  • table_name: Filter by table name (substring match)
  • field_name: Filter by column name (substring match)
  • page: Page number (default: 1)
  • page_size: Results per page (default: 20)

Returns:

  • Paginated table results matching filters

Examples

PostgreSQL

# Via Claude
"Extract all tables from my dev PostgreSQL database at localhost:5432"

Parameters Claude will use:

{
  "db_type": "postgresql",
  "host": "localhost",
  "port": 5432,
  "database_name": "dev_db",
  "username": "postgres",
  "password": "your_password",
  "output_path": "/tmp/db_metadata"
}

Snowflake

"Extract schema from Snowflake account XYZ123"

Parameters:

{
  "db_type": "snowflake",
  "account": "XYZ123",
  "username": "your_user",
  "password": "your_password",
  "warehouse": "COMPUTE_WH",
  "role_name": "ANALYST",
  "database_name": "PRODUCTION",
  "output_path": "C:/metadata"
}

BigQuery

"Extract metadata from BigQuery project my-project-123"

Parameters:

{
  "db_type": "bigquery",
  "project_id": "my-project-123",
  "service_account_key": "base64_encoded_json_key",
  "output_path": "/tmp/bq_metadata"
}

Advanced Usage

Custom Transport

Start with HTTP transport:

db-metadata-extractor-mcp --transport streamable-http --port 3000

Environment Variables

# Set database credentials via env
export DB_HOST=localhost
export DB_USER=postgres
export DB_PASSWORD=secret

db-metadata-extractor-mcp

Output Format

The extracted metadata is saved as a JSON file with structure:

{
  "source": {
    "db_type": "postgresql",
    "extracted_at": "2026-04-09T14:30:00",
    "host": "localhost"
  },
  "schemas": [
    {
      "schema_name": "public",
      "tables": [
        {
          "table_name": "users",
          "columns": [
            {
              "column_name": "id",
              "data_type": "int",
              "is_nullable": false,
              "is_primary_key": true
            },
            {
              "column_name": "email",
              "data_type": "varchar",
              "is_nullable": false
            }
          ],
          "indexes": [
            {
              "index_name": "users_email_idx",
              "columns": ["email"]
            }
          ]
        }
      ]
    }
  ]
}

Requirements

  • Python 3.8+
  • For PostgreSQL: psycopg2-binary
  • For Snowflake: snowflake-connector-python
  • For SQL Server: pyodbc, pymssql
  • For BigQuery: google-cloud-bigquery
  • For Oracle: oracledb

Troubleshooting

Connection Errors

Problem: "Unable to connect to database"

Solution: Verify credentials and network access:

# Test PostgreSQL connection
psql -h localhost -U postgres -c "SELECT 1"

# Test Snowflake
snowsql -a XYZ123 -u your_user

Permission Errors

Problem: "Access denied" or "insufficient permissions"

Solution: Ensure database user has:

  • SELECT on tables
  • USAGE on schemas
  • CONNECT on databases

Large Schema Timeouts

Problem: Extraction times out on large databases

Solution: Extract specific schema/tables:

{
  "schema_name": "public",
  "tables": ["users", "orders"]  // Specify subset
}

License

MIT License - See LICENSE file

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create feature branch
  3. Submit pull request

Support

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

db_metadata_extractor_mcp-0.1.5.tar.gz (55.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

db_metadata_extractor_mcp-0.1.5-py3-none-any.whl (56.5 kB view details)

Uploaded Python 3

File details

Details for the file db_metadata_extractor_mcp-0.1.5.tar.gz.

File metadata

File hashes

Hashes for db_metadata_extractor_mcp-0.1.5.tar.gz
Algorithm Hash digest
SHA256 8d0ad603acd542337abdca644a0d648d74d71a2f2305c15b1cca2f83a7c3bf61
MD5 7e37aa02bdb6ada156d4a951fec7ea60
BLAKE2b-256 e7cf1f978ffabd422ddc7fa6f2fa59180d26209953e828f86a671a454faa97be

See more details on using hashes here.

File details

Details for the file db_metadata_extractor_mcp-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for db_metadata_extractor_mcp-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c5a99be8ff79cc4cdcb8c034783ab4c0a26bc58602652066191ef8fb946c5b35
MD5 bfe86f7f851c72a6b0f71684b655d77a
BLAKE2b-256 36aeb73f0a83b2d8615f80d23db30bdbc9b9aec2a262340049aab2b3d3059c71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page