Skip to main content
Glama
avantifellows

Avanti Fellows PostgreSQL MCP Server

Official

describe_table

Retrieve detailed PostgreSQL table schema information including column names, data types, nullability, defaults, primary keys, and foreign keys to understand database structure before querying.

Instructions

Get detailed schema information for a table.

Returns column names, types, nullability, and defaults. Use this to understand table structure before querying. Args: table_name: Name of the table schema_name: Schema name (default: public) Returns: JSON with columns, primary keys, and foreign keys

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
table_nameYes
schema_nameNopublic

Implementation Reference

  • The handler function decorated with @mcp.tool(), implementing the describe_table tool. It fetches column information, primary keys, and foreign keys from PostgreSQL system catalogs and returns a JSON description of the table schema.
    @mcp.tool() async def describe_table(table_name: str, schema_name: str = "public") -> str: """Get detailed schema information for a table. Returns column names, types, nullability, and defaults. Use this to understand table structure before querying. Args: table_name: Name of the table schema_name: Schema name (default: public) Returns: JSON with columns, primary keys, and foreign keys """ columns_sql = """ SELECT column_name, data_type, is_nullable, column_default, character_maximum_length FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2 ORDER BY ordinal_position """ pk_sql = """ SELECT a.attname as column_name FROM pg_index i JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) JOIN pg_class c ON c.oid = i.indrelid JOIN pg_namespace n ON n.oid = c.relnamespace WHERE i.indisprimary AND n.nspname = $1 AND c.relname = $2 """ fk_sql = """ SELECT kcu.column_name, ccu.table_schema AS foreign_schema, ccu.table_name AS foreign_table, ccu.column_name AS foreign_column FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = $1 AND tc.table_name = $2 """ try: async with get_connection() as conn: columns = await conn.fetch(columns_sql, schema_name, table_name) pks = await conn.fetch(pk_sql, schema_name, table_name) fks = await conn.fetch(fk_sql, schema_name, table_name) result = { "table": f"{schema_name}.{table_name}", "columns": [dict(row) for row in columns], "primary_keys": [row["column_name"] for row in pks], "foreign_keys": [dict(row) for row in fks], } return json.dumps(result, indent=2, default=str) except Exception as e: return json.dumps({"error": str(e)})

Latest Blog Posts

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/avantifellows/mcp-postgres'

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