Multi-server MCP setup with AWS S3, PostgreSQL, and PGVector RAG capabilities
12 tools across 3 files with mixed quality. All tools have descriptions (good) and input schemas (good), but descriptions are shallow and lack LLM-optimized guidance. Parameter descriptions are minimal. No output schemas documented. No error handling guidance. Security concern: rag_search exposes OpenAI API key and PostgreSQL connection string as parameters (critical pattern violation). Tools follow verb_noun naming adequately. Baseline: production tools average 194 chars for descriptions; these are 40-120 chars. 100% of A+ tools document return types; this server documents none.
Get detailed information about a table.
Find both explicit and implied relationships for a table.
Get foreign key information for a table.
Get the content of a text file from S3. Only works for text files (will fail for binary files).
Get metadata for an S3 object without downloading its contents.
List all available S3 buckets.
Critical: rag_search exposes OpenAI API key and PostgreSQL connection string as tool parameters. Credentials must never appear as parameters; use server-side secret injection via environment variables.
No output schemas documented for any tool. Baseline: 100% of A+ tools have documented return types. LLMs cannot plan downstream calls without knowing what fields to expect.
Descriptions are shallow (40-120 chars) and lack LLM-optimized guidance on WHEN to use each tool and WHAT it returns. Baseline: production tools average 194 chars. Missing context like 'Call this first to discover available tables before executing queries'.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
List objects in an S3 bucket.
List all the schemas in the database
List all tables in a specific schema
Execute a SQL query and return the results.
Perform a RAG (Retrieval-Augmented Generation) search using PGVector and OpenAI.
Search for objects in an S3 bucket by prefix and filename.
Parameter descriptions are minimal or missing context. E.g., 'query' tool has 'parameters' array param with no description of expected structure or format. Production tools require descriptions for 100% of parameters.
No error handling or recovery guidance. Descriptions do not indicate what to do if a tool fails (e.g., 'If bucket not found, try list_buckets() first'). Pattern missing: recovery-guide.
query tool accepts arbitrary SQL and could expose write/delete operations without confirmation. No dry-run pattern or confirmation step before destructive operations. Marked Risk: WRITE but no guardrails.
No pagination documented for list_* tools. get_object_content accepts max_size but no guidance on actual limits. list_objects has max_keys param but description doesn't explain default or total count behavior.
rag_search description is vague ('Perform a RAG search using PGVector and OpenAI'). Does not explain when to call it vs query(), what embedding model is used, or how results are ranked.