MCP server providing tools to query multiple database systems (MongoDB, PostgreSQL, MySQL, SQLite), fetch files, and call APIs
Server has 6 tools with basic schemas and descriptions, but significant quality gaps. All tools have input schemas (Zod-validated) and descriptions present, but descriptions are generic (10-50 chars, well below the 194-char baseline). No output schemas documented. Critical security issue: credentials (passwords, connection strings, tokens) exposed as required parameters (queryMySQL password param, queryPostgres connectionString, getFileContent token). No error handling guidance, no parameter validation hints, no idempotency markers. Tool names are verb-noun but descriptions lack WHEN/WHY context. No pagination support for list-returning tools. Schemas use z.any() for outputs, providing zero guidance to LLMs about return structure.
Fetch data from a public API
Read a local or SharePoint file via HTTP
Query a MongoDB collection
Run a query on MySQL
Run a query on PostgreSQL
Run a query on a SQLite DB
Credentials exposed as tool parameters: queryMySQL requires 'password' param; queryPostgres requires 'connectionString'; getFileContent accepts 'token'. These must never be agent-facing parameters, use server-side secret injection via environment variables or vault. Agent traces log all parameters, leaking secrets into logs and prompt history.
Output schemas are z.any() with no documentation. LLMs cannot infer what fields to expect (e.g., does queryMongo return {_id, name, ...} or a flat array?). Document actual return types: queryMongo returns array of documents; queryPostgres returns array of rows; fetchAPI returns JSON or text based on content-type.
Descriptions are too short (10-50 chars vs. 194-char baseline). 'Query a MongoDB collection' lacks WHEN to use it, what it returns, or prerequisites. Expand to: 'Query a MongoDB collection by filter. Returns array of matching documents. Use this to retrieve data from MongoDB; requires valid connection URI and database/collection names.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2025-06-18+ | v2 |
No parameter descriptions for critical inputs. 'filter' in queryMongo has description 'Optional query filter' but does not explain format (MongoDB query syntax, e.g., {age: {$gt: 25}}). 'query' in queryPostgres lacks format guidance (SQL syntax, parameterized vs. raw). LLMs cannot infer correct syntax without explicit hints.
No error handling or recovery guidance. If queryMongo fails (invalid URI, auth error, collection not found), the tool returns a raw error. LLMs need actionable guidance: 'Connection failed: verify URI format and network access. Try search_databases() to list available databases.' No error classification (retryable vs. fatal).