pg-aiguide
Server Details
Comprehensive PostgreSQL documentation and best practices, including ecosystem tools
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- timescale/pg-aiguide
- GitHub Stars
- 1,835
- Server Listing
- pg-aiguide
Available Tools
2 toolssearch_docsSearch DocumentationARead-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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent), the description discloses the hybrid search mechanism, BM25, semantic vectors, RRF fusion for mid values, and supported database platforms. This adds substantial behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every piece of information earns its place. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and detailed annotations, the description sufficiently covers the tool's functionality, parameter tuning, and supported sources. It does not need to detail return values since the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters, but the description adds meaning by explaining the semanticWeight scale and that query is used for both BM25 and embedding where relevant. This goes beyond simple parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches documentation using hybrid semantic and keyword search, which is a specific verb+resource combination. It also distinguishes from the sibling tool view_skill by focusing on search rather than viewing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using semanticWeight values (0, 1, blend) and lists supported sources. However, it does not explicitly contrast with view_skill or state when not to use this tool, so it lacks full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_skillView SkillBRead-onlyIdempotentInspect
Retrieve detailed skills for TimescaleDB operations and best practices.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds a catalog of valid skill names but little about operational behavior, such as defaulting to SKILL.md, using '.' to list roots, or how output is structured (though some of that is in the schema). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is concise and front-loaded, but the description is dominated by an enormous inline skill catalog with lengthy trigger phrases and keyword lists. While the catalog is informative, it makes the tool description overly large and mixes operational guidance with content that arguably belongs elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema covers both parameters and annotations cover safety, an agent can likely call this tool correctly. The available-skills list helps select skill_name, and the output schema removes the need to describe return values. However, the description misses routing guidance versus search_docs and subtly mischaracterizes the tool as TimescaleDB-only when the catalog spans many PostgreSQL topics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by enumerating actual valid skill_name values in the available_skills list. This is especially useful because the schema has no enum and skill_name is otherwise a free-form string. The description does not add much for the path parameter beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Retrieve detailed skills' for database operations, and the name/title align with that purpose. However, it frames the tool as TimescaleDB-specific while the embedded skill catalog is broader (Postgres, pgvector, migrations), and it does not explicitly differentiate from the sibling search_docs, so it is not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use view_skill versus search_docs, nor any when-not-to-use conditions. The large available-skills catalog implies the tool is for browsing/selecting a skill, but it never states that search_docs is for searching documentation or that view_skill is the right tool for reading skill files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
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
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
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.298MIT
- 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.31923AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
search_docs and view_skill are largely distinct: one performs hybrid documentation search, the other retrieves a specific named skill. There is some overlap because both are information-retrieval entry points, but the descriptions provide clear enough usage boundaries.
Both tools follow a consistent verb_noun snake_case pattern: search_docs and view_skill. The naming is predictable and aligned with the server's retrieval-focused purpose.
Two tools is a thin surface for a server covering PostgreSQL, TimescaleDB, and PostGIS guidance. However, search_docs plus view_skill forms a minimal but functional knowledge-retrieval pair, so it sits at the borderline rather than being clearly insufficient.
The pair covers the main needs of a guide server: finding relevant documentation and retrieving detailed skill content. The available skills are exposed as metadata, which mitigates the lack of a dedicated list_skills tool; minor browsing gaps remain.