Skip to main content
Glama
antonorlov

MCP PostgreSQL Server

describe_table

Retrieve PostgreSQL table structure including columns, data types, and constraints to understand database schema and plan queries effectively.

Instructions

Get table structure

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tableYesTable name
schemaNoSchema name (default: public)

Implementation Reference

  • Main handler function for 'describe_table' tool. Validates input, queries PostgreSQL information_schema for table columns, data types, nullability, defaults, primary key status, and max length. Returns JSON-formatted results.
    private async handleDescribeTable(args: any) { await this.ensureConnection(); if (!args.table) { throw new McpError(ErrorCode.InvalidParams, 'Table name is required'); } const schema = args.schema || 'public'; try { const result = await this.client!.query(` SELECT c.column_name, c.data_type, c.is_nullable, c.column_default, CASE WHEN pk.constraint_type = 'PRIMARY KEY' THEN true ELSE false END AS is_primary_key, c.character_maximum_length FROM information_schema.columns c LEFT JOIN ( SELECT tc.constraint_type, kcu.column_name, kcu.table_name, kcu.table_schema FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name WHERE tc.constraint_type = 'PRIMARY KEY' ) pk ON c.column_name = pk.column_name AND c.table_name = pk.table_name AND c.table_schema = pk.table_schema WHERE c.table_schema = $1 AND c.table_name = $2 ORDER BY c.ordinal_position `, [schema, args.table]); return { content: [ { type: 'text', text: JSON.stringify(result.rows, null, 2), }, ], }; } catch (error) { throw new McpError( ErrorCode.InternalError, `Failed to describe table: ${getErrorMessage(error)}` ); } }
  • Input schema definition for the 'describe_table' tool, specifying required 'table' parameter and optional 'schema'.
    { name: 'describe_table', description: 'Get table structure', inputSchema: { type: 'object', properties: { table: { type: 'string', description: 'Table name', }, schema: { type: 'string', description: 'Schema name (default: public)', }, }, required: ['table'], }, },
  • src/index.ts:267-268 (registration)
    Dispatch/registration case in the tool request handler switch statement that routes 'describe_table' calls to the handleDescribeTable function.
    case 'describe_table': return await this.handleDescribeTable(request.params.arguments);
  • src/index.ts:137-253 (registration)
    Tool list registration in ListToolsRequestSchema handler, including 'describe_table' with its schema.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ { name: 'connect_db', description: 'Connect to PostgreSQL database. NOTE: Default connection exists - only use when requested or if other commands fail', inputSchema: { type: 'object', properties: { host: { type: 'string', description: 'Database host', }, port: { type: 'number', description: 'Database port (default: 5432)', }, user: { type: 'string', description: 'Database user', }, password: { type: 'string', description: 'Database password', }, database: { type: 'string', description: 'Database name', }, }, required: ['host', 'user', 'password', 'database'], }, }, { name: 'query', description: 'Execute a SELECT query', inputSchema: { type: 'object', properties: { sql: { type: 'string', description: 'SQL SELECT query (use $1, $2, etc. for parameters)', }, params: { type: 'array', items: { type: ['string', 'number', 'boolean', 'null'], }, description: 'Query parameters (optional)', }, }, required: ['sql'], }, }, { name: 'execute', description: 'Execute an INSERT, UPDATE, or DELETE query', inputSchema: { type: 'object', properties: { sql: { type: 'string', description: 'SQL query (INSERT, UPDATE, DELETE) (use $1, $2, etc. for parameters)', }, params: { type: 'array', items: { type: ['string', 'number', 'boolean', 'null'], }, description: 'Query parameters (optional)', }, }, required: ['sql'], }, }, { name: 'list_schemas', description: 'List all schemas in the database', inputSchema: { type: 'object', properties: {}, required: [], }, }, { name: 'list_tables', description: 'List tables in the database', inputSchema: { type: 'object', properties: { schema: { type: 'string', description: 'Schema name (default: public)', }, }, required: [], }, }, { name: 'describe_table', description: 'Get table structure', inputSchema: { type: 'object', properties: { table: { type: 'string', description: 'Table name', }, schema: { type: 'string', description: 'Schema name (default: public)', }, }, required: ['table'], }, }, ], }));

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

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