pg-aiguide
Server Details
Comprehensive PostgreSQL documentation and best practices, including ecosystem tools
- Status
- Healthy
- Uptime
- 99.9% over 67 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- timescale/pg-aiguide
- GitHub Stars
- 1,873
- Server Listing
- pg-aiguide
TDQS
Scored across 2 tools
search_docs and view_skill are separated by action and source: one searches documentation, the other retrieves a specific skill by name. There is some conceptual overlap since both are knowledge-retrieval paths, and view_skill's description mentions only TimescaleDB despite broader available skills, but the boundary is workable.
Both names follow a consistent snake_case verb_noun pattern (search_docs, view_skill), which is predictable and readable. No naming deviations are present.
Two tools is thin for a server exposing both documentation search and a catalog of 11 skills. While the two tools are broad gateways, the count falls below the typical 3-15 range and feels minimal.
The core capabilities—searching docs and retrieving skills—are covered, and the available skills are listed in the view_skill description. However, there is no dedicated tool to list or search skills by topic, requiring the agent to parse the description or know exact skill names.
Available Tools
2 toolssearch_docsSearch DocumentationRead-onlyIdempotentInspect
Search documentation with hybrid semantic (vector) and keyword (BM25) search. Use semanticWeight to choose keyword-only (0), semantic-only (1), or a blend; mid values fuse rankings with RRF. Supports Tiger Cloud (TimescaleDB), PostgreSQL, and PostGIS.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | The maximum number of matches to return. Defaults to 20. | |
| query | Yes | The search query. Used for BM25 when keyword or hybrid search applies, and for the embedding when semantic or hybrid search applies. | |
| source | Yes | The documentation source to search. "tiger" for Tiger Cloud and TimescaleDB, "postgres" for PostgreSQL, "postgis" for PostGIS spatial extension. Specific versions provided with _X.X suffixes. | |
| semanticWeight | Yes | Controls the balance between semantic and keyword search. 0 = keyword only, 0.5 = equal mix, 1 = semantic only. Default is 0.7 (favor semantic search). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
view_skillView SkillRead-onlyIdempotentInspect
Retrieve detailed skills for TimescaleDB operations and best practices.
Available Skills
<available_skills> [11 ]{name description}: design-postgis-tables Comprehensive PostGIS spatial table design reference covering geometry types, coordinate systems, spatial indexing, and performance patterns for location-based applications design-postgres-tables "Use this skill for general PostgreSQL table design.\n\nTrigger when user asks to:\n- Design PostgreSQL tables, schemas, or data models when creating new tables and when modifying existing ones.\n- Choose data types, constraints, or indexes for PostgreSQL\n- Create user tables, order tables, reference tables, or JSONB schemas\n- Understand PostgreSQL best practices for normalization, constraints, or indexing\n- Design update-heavy, upsert-heavy, or OLTP-style tables\n\n\nKeywords: PostgreSQL schema, table design, data types, PRIMARY KEY, FOREIGN KEY, indexes, B-tree, GIN, JSONB, constraints, normalization, identity columns, partitioning, row-level security\n\nComprehensive reference covering data types, indexing strategies, constraints, JSONB patterns, partitioning, and PostgreSQL-specific best practices.\n" find-hypertable-candidates "Use this skill to analyze an existing PostgreSQL database and identify which tables should be converted to Timescale/TimescaleDB hypertables.\n\nTrigger when user asks to:\n- Analyze database tables for hypertable conversion potential\n- Identify time-series or event tables in an existing schema\n- Evaluate if a table would benefit from Timescale/TimescaleDB\n- Audit PostgreSQL tables for migration to Timescale/TimescaleDB/TigerData\n- Score or rank tables for hypertable candidacy\n\n\nKeywords: hypertable candidate, table analysis, migration assessment, Timescale, TimescaleDB, time-series detection, insert-heavy tables, event logs, audit tables\n\nProvides SQL queries to analyze table statistics, index patterns, and query patterns. Includes scoring criteria (8+ points = good candidate) and pattern recognition for IoT, events, transactions, and sequential data.\n" migrate-postgres-tables-to-hypertables "Use this skill to migrate identified PostgreSQL tables to Timescale/TimescaleDB hypertables with optimal configuration and validation.\n\nTrigger when user asks to:\n- Migrate or convert PostgreSQL tables to hypertables\n- Execute hypertable migration with minimal downtime\n- Plan blue-green migration for large tables\n- Validate hypertable migration success\n- Configure compression after migration\n\nPrerequisites: Tables already identified as candidates (use find-hypertable-candidates first if needed)\n\nKeywords: migrate to hypertable, convert table, Timescale, TimescaleDB, blue-green migration, in-place conversion, create_hypertable, migration validation, compression setup\n\nStep-by-step migration planning including: partition column selection, chunk interval calculation, PK/constraint handling, migration execution (in-place vs blue-green), and performance validation queries.\n" pgvector-semantic-search "Use this skill for setting up vector similarity search with pgvector for AI/ML embeddings, RAG applications, or semantic search.\n\nTrigger when user asks to:\n- Store or search vector embeddings in PostgreSQL\n- Set up semantic search, similarity search, or nearest neighbor search\n- Create HNSW or IVFFlat indexes for vectors\n- Implement RAG (Retrieval Augmented Generation) with PostgreSQL\n- Optimize pgvector performance, recall, or memory usage\n- Use binary quantization for large vector datasets\n\nKeywords: pgvector, embeddings, semantic search, vector similarity, HNSW, IVFFlat, halfvec, cosine distance, nearest neighbor, RAG, LLM, AI search\n\nCovers: halfvec storage, HNSW index configuration (m, ef_construction, ef_search), quantization strategies, filtered search, bulk loading, and performance tuning.\n" postgres "Use this skill for any PostgreSQL database work — table design, indexing, data types, constraints, extensions (pgvector, PostGIS, TimescaleDB), search, and migrations.\n\nTrigger when user asks to:\n- Explore an existing PostgreSQL database to understand its objects and relationships\n- Design or modify PostgreSQL tables, schemas, or data models\n- Choose data types, constraints, indexes, or partitioning strategies\n- Work with pgvector embeddings, semantic search, or RAG\n- Set up full-text search, hybrid search, or BM25 ranking\n- Use PostGIS for spatial/geographic data\n- Set up TimescaleDB hypertables for time-series data\n- Migrate tables to hypertables or evaluate migration candidates\n- Plan or execute safe schema migrations with zero downtime\n\nKeywords: PostgreSQL, Postgres, SQL, schema, table design, indexes, constraints, pgvector, PostGIS, TimescaleDB, hypertable, semantic search, hybrid search, BM25, time-series, migration\n" postgres-database-migration "Use this skill for planning, testing, and safely executing PostgreSQL schema migrations — especially when working with production data or shared databases.\n\nTrigger when user asks to:\n- Test a schema migration before applying it to production\n- Add, remove, or rename columns safely on a live table\n- Change a column's data type without downtime\n- Add or drop indexes, constraints, or foreign keys on large tables\n- Understand which ALTER TABLE operations lock the table\n- Roll back a failed migration\n- Plan a zero-downtime migration strategy\n- Fork a database to test a migration safely\n\nKeywords: migration, schema change, ALTER TABLE, add column, drop column, rename column, change type, zero downtime, lock, AccessExclusiveLock, concurrent index, forking, rollback, backfill, deploy\n\nCovers: lock-level reference for every common DDL operation, safe migration patterns, fork-based testing, zero-downtime column changes, index creation, constraint addition, backfill strategies, pre/post-migration validation, and rollback planning.\n" postgres-hybrid-text-search "Use this skill to implement hybrid search combining BM25 keyword search with semantic vector search using Reciprocal Rank Fusion (RRF).\n\nTrigger when user asks to:\n- Combine keyword and semantic search\n- Implement hybrid search or multi-modal retrieval\n- Use BM25/pg_textsearch with pgvector together\n- Implement RRF (Reciprocal Rank Fusion) for search\n- Build search that handles both exact terms and meaning\n\n\nKeywords: hybrid search, BM25, pg_textsearch, RRF, reciprocal rank fusion, keyword search, full-text search, reranking, cross-encoder\n\nCovers: pg_textsearch BM25 index setup, parallel query patterns, client-side RRF fusion (Python/TypeScript), weighting strategies, and optional ML reranking.\n" schema-exploration "Explore an existing PostgreSQL database before answering questions about its data or writing SQL. Use this skill whenever a user asks for a query or a data-backed answer against an unfamiliar schema (counts, missing or failed records, recent changes), asks where a business concept lives, or asks how tables, joins, views, routines, triggers, RLS, or extensions work. Find the relevant objects with read-only pg_catalog queries, then request approval before inspecting data-derived statistics or rows. Not a schema-design or migration guide.\n" setup-timescaledb-hypertables "Use this skill when creating database schemas or tables for Timescale, TimescaleDB, TigerData, or Tiger Cloud, especially for time-series, IoT, metrics, events, or log data. Use this to improve the performance of any insert-heavy table.\n\nTrigger when user asks to:\n- Create or design SQL schemas/tables AND Timescale/TimescaleDB/TigerData/Tiger Cloud is available\n- Set up hypertables, compression, retention policies, or continuous aggregates\n- Configure partition columns, segment_by, order_by, or chunk intervals\n- Optimize time-series database performance or storage\n- Create tables for sensors, metrics, telemetry, events, or transaction logs\n\nKeywords: CREATE TABLE, hypertable, Timescale, TimescaleDB, time-series, IoT, metrics, sensor data, compression policy, continuous aggregates, columnstore, retention policy, chunk interval, segment_by, order_by\n\nStep-by-step instructions for hypertable creation, column selection, compression policies, retention, continuous aggregates, and indexes.\n" timescaledb-hyperfunctions "Use this skill when writing analytical SQL over time-series data with the TimescaleDB Toolkit (timescaledb_toolkit extension) hyperfunctions: approximate percentiles, statistical summaries, time-weighted averages, counter/gauge rates, uptime/heartbeat tracking, state durations, OHLC candlesticks, approximate distinct counts, top-N, and downsampling.\n\nTrigger when user asks to:\n- Compute percentiles/medians/p95/p99 over large or rolled-up time-series data\n- Compute rates or deltas from monotonic counters (Prometheus-style) or gauges\n- Compute time-weighted averages or integrals over irregularly sampled data\n- Track uptime/downtime from heartbeats, or time spent in each state\n- Build OHLC/candlestick or VWAP data for financial ticks\n- Store re-aggregatable summaries in continuous aggregates (two-step aggregation, rollup)\n- Approximate COUNT DISTINCT, find top-N / most frequent values, or downsample for charts\n\nKeywords: timescaledb_toolkit, hyperfunctions, percentile_agg, uddsketch, tdigest, approx_percentile, stats_agg, time_weight, counter_agg, gauge_agg, heartbeat_agg, state_agg, candlestick_agg, hyperloglog, approx_count_distinct, min_n, max_n, mcv_agg, lttb, asap_smooth, rollup, two-step aggregation\n" </available_skills>
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | A relative path to a file or directory within the skill to view. If empty, will view the `SKILL.md` file by default. Use `.` to list the root directory of the skill. | |
| skill_name | Yes | The name of the skill to browse, or `.` to list all available skills. |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes | The content of the file or directory listing. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
search_docs2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
view_skill2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
1 tool update
- Changed
search_docs6 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"The maximum number of matches to return. If not provided, default is 10."New value: +"The maximum number of matches to return. Defaults to 20." - changed
Input schema / properties / query / descriptionPrevious value: -"The search query. For semantic search, use natural language. For keyword search, provide keywords."New value: +"The search query. Used for BM25 when keyword or hybrid search applies, and for the embedding when semantic or hybrid search applies." - removed
Input schema / properties / search_typeRemoved value: -{ - "description": "The type of search to perform. \"semantic\" uses natural language vector similarity, \"keyword\" uses BM25 keyword matching.", - "enum": [ - "semantic", - "keyword" - ], - "type": "string" -} - added
Input schema / properties / semanticWeightAdded value: +{ + "anyOf": [ + { + "maximum": 1, + "minimum": 0, + "multipleOf": 0.1, + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Controls the balance between semantic and keyword search. 0 = keyword only, 0.5 = equal mix, 1 = semantic only. Default is 0.7 (favor semantic search)." +} - changed
Input schema / requiredPrevious value: -[ - "source", - "search_type", - "query", - "limit" -]New value: +[ + "source", + "query", + "limit", + "semanticWeight" +] - changed
Output schema / properties / results / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "content": { - "description": "The content of the documentation entry.", - "type": "string" - }, - "distance": { - "description": "The distance score indicating the relevance of the entry to the query. Lower values indicate higher relevance.", - "type": "number" - }, - "id": { - "description": "The unique identifier of the documentation entry.", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "metadata": { - "description": "Additional metadata about the documentation entry, as a JSON encoded string.", - "type": "string" - } - }, - "required": [ - "id", - "content", - "metadata", - "distance" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "description": "The content of the documentation entry.", - "type": "string" - }, - "id": { - "description": "The unique identifier of the documentation entry.", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "metadata": { - "description": "Additional metadata about the documentation entry, as a JSON encoded string.", - "type": "string" - }, - "score": { - "description": "The score indicating the relevance of the entry to the keywords. Higher values indicate higher relevance.", - "type": "number" - } - }, - "required": [ - "id", - "content", - "metadata", - "score" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "content": { + "description": "The content of the documentation entry.", + "type": "string" + }, + "distance": { + "description": "The distance score indicating the relevance of the entry to the query. Lower values indicate higher relevance.", + "type": "number" + }, + "id": { + "description": "The unique identifier of the documentation entry.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "metadata": { + "description": "Additional metadata about the documentation entry, as a JSON encoded string.", + "type": "string" + } + }, + "required": [ + "id", + "content", + "metadata", + "distance" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "description": "The content of the documentation entry.", + "type": "string" + }, + "id": { + "description": "The unique identifier of the documentation entry.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "metadata": { + "description": "Additional metadata about the documentation entry, as a JSON encoded string.", + "type": "string" + }, + "score": { + "description": "The score indicating the relevance of the entry to the keywords. Higher values indicate higher relevance.", + "type": "number" + } + }, + "required": [ + "id", + "content", + "metadata", + "score" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "description": "The content of the documentation entry.", + "type": "string" + }, + "id": { + "description": "The unique identifier of the documentation entry.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "metadata": { + "description": "Additional metadata about the documentation entry, as a JSON encoded string.", + "type": "string" + }, + "rrf_score": { + "description": "Hybrid search: fused RRF score from combining semantic and keyword result rankings.", + "type": "number" + } + }, + "required": [ + "id", + "content", + "metadata", + "rrf_score" + ], + "type": "object" + } +]
1 tool update
- Changed
search_docs9 fields changed- added
Input schema / properties / limit / anyOfAdded value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / limit / descriptionPrevious value: -"The maximum number of matches to return. Default is 10."New value: +"The maximum number of matches to return. If not provided, default is 10." - removed
Input schema / properties / limit / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / limit / minimumRemoved value: --9007199254740991 - removed
Input schema / properties / limit / typeRemoved value: -"integer" - changed
Input schema / properties / source / descriptionPrevious value: -"The documentation source to search. \"tiger\" for Tiger Cloud and TimescaleDB, \"postgres\" for PostgreSQL, \"postgis\" for PostGIS spatial extension."New value: +"The documentation source to search. \"tiger\" for Tiger Cloud and TimescaleDB, \"postgres\" for PostgreSQL, \"postgis\" for PostGIS spatial extension. Specific versions provided with _X.X suffixes." - changed
Input schema / properties / source / enumPrevious value: -[ - "tiger", - "postgres", - "postgis" -]New value: +[ + "tiger", + "postgres_14", + "postgres_15", + "postgres_16", + "postgres_17", + "postgres_18", + "postgis_3.3", + "postgis_3.4", + "postgis_3.5", + "postgis_3.6" +] - removed
Input schema / properties / versionRemoved value: -{ - "anyOf": [ - { - "enum": [ - "14", - "15", - "16", - "17", - "18", - "latest" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The PostgreSQL major version (ignored when searching \"tiger\"). Recommended to assume the latest version if unknown. Only applicable when source is Postgres. Defaults to latest version." -} - changed
Input schema / requiredPrevious value: -[ - "source", - "search_type", - "query", - "version", - "limit" -]New value: +[ + "source", + "search_type", + "query", + "limit" +]
2 tool updates
- Changed
search_docs4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / results / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "content": { - "description": "The content of the documentation entry.", - "type": "string" - }, - "distance": { - "description": "The distance score indicating the relevance of the entry to the query. Lower values indicate higher relevance.", - "type": "number" - }, - "id": { - "description": "The unique identifier of the documentation entry.", - "type": "integer" - }, - "metadata": { - "description": "Additional metadata about the documentation entry, as a JSON encoded string.", - "type": "string" - } - }, - "required": [ - "id", - "content", - "metadata", - "distance" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "$ref": "#/properties/results/items/anyOf/0/properties/content" - }, - "id": { - "$ref": "#/properties/results/items/anyOf/0/properties/id" - }, - "metadata": { - "$ref": "#/properties/results/items/anyOf/0/properties/metadata" - }, - "score": { - "description": "The score indicating the relevance of the entry to the keywords. Higher values indicate higher relevance.", - "type": "number" - } - }, - "required": [ - "id", - "content", - "metadata", - "score" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "content": { + "description": "The content of the documentation entry.", + "type": "string" + }, + "distance": { + "description": "The distance score indicating the relevance of the entry to the query. Lower values indicate higher relevance.", + "type": "number" + }, + "id": { + "description": "The unique identifier of the documentation entry.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "metadata": { + "description": "Additional metadata about the documentation entry, as a JSON encoded string.", + "type": "string" + } + }, + "required": [ + "id", + "content", + "metadata", + "distance" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "description": "The content of the documentation entry.", + "type": "string" + }, + "id": { + "description": "The unique identifier of the documentation entry.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "metadata": { + "description": "Additional metadata about the documentation entry, as a JSON encoded string.", + "type": "string" + }, + "score": { + "description": "The score indicating the relevance of the entry to the keywords. Higher values indicate higher relevance.", + "type": "number" + } + }, + "required": [ + "id", + "content", + "metadata", + "score" + ], + "type": "object" + } +]
- Changed
view_skill1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
1 tool update
- Changed
search_docs4 fields changed- added
Input schema / properties / version / anyOfAdded value: +[ + { + "enum": [ + "14", + "15", + "16", + "17", + "18", + "latest" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / version / descriptionPrevious value: -"The PostgreSQL major version (ignored when searching \"tiger\"). Recommended to assume the latest version if unknown."New value: +"The PostgreSQL major version (ignored when searching \"tiger\"). Recommended to assume the latest version if unknown. Only applicable when source is Postgres. Defaults to latest version." - removed
Input schema / properties / version / enumRemoved value: -[ - "14", - "15", - "16", - "17", - "18", - "latest" -] - removed
Input schema / properties / version / typeRemoved value: -"string"
1 tool update
- Changed
search_docs2 fields changed- changed
Input schema / properties / source / descriptionPrevious value: -"The documentation source to search. \"tiger\" for Tiger Cloud and TimescaleDB, \"postgres\" for PostgreSQL."New value: +"The documentation source to search. \"tiger\" for Tiger Cloud and TimescaleDB, \"postgres\" for PostgreSQL, \"postgis\" for PostGIS spatial extension." - changed
Input schema / properties / source / enumPrevious value: -[ - "tiger", - "postgres" -]New value: +[ + "tiger", + "postgres", + "postgis" +]
2 tool updates
- First observed
search_docs - First observed
view_skill
Related MCP Connectors
- WoWSQLOAuthcom.wowsql
Managed Postgres MCP: projects, SQL, docs search, and storage buckets via OAuth.
Hosted MCP server for PostgreSQL diagnostics: slow queries, missing indexes, connection pressure.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Deterministic safety, correctness & cost gate that vets Postgres SQL before your AI agent runs it.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to manage, monitor, and optimize PostgreSQL databases with over 200 specialized tools for operations, security, performance tuning, and diagnostics.15 npm11MIT
- AlicenseBqualityDmaintenanceEnables comprehensive PostgreSQL database management including index tuning, query plan analysis, health monitoring, schema-aware SQL generation, and safe SQL execution with configurable access control for both development and production environments.9MIT
- AlicenseAqualityBmaintenanceEnables comprehensive PostgreSQL database monitoring, analysis, and management through natural language queries. Provides performance insights, bloat analysis, vacuum monitoring, and intelligent maintenance recommendations across PostgreSQL versions 12-17.34161MIT
- AlicenseBqualityFmaintenanceFacilitates management and optimization of PostgreSQL databases, offering analysis, setup guidance, and debugging, while ensuring secure and efficient database operations.34 npm24AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.