Production-ready Model Context Protocol server deployment and management platform with Docker, Kubernetes, or Mock backends
The MCP Platform provides 26 tools across multiple integrations (BigQuery, GitHub, GitLab, Slack, PostgreSQL, Elasticsearch, Zendesk, Trino, filesystem). However, quality is significantly compromised by incomplete schemas, missing parameter descriptions, and vague tool descriptions. Most tools lack input schema validation details, the rubric specifies baseline averages of 4 params per tool and 194 chars for descriptions; this server shows parameters listed but without formal JSON Schema enforcement visible in source. The tool descriptions are extremely terse (averaging ~50 chars vs. 194 baseline), and critical parameter validations are absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite the need to signal risk (e.g., 'delete_all_data' operations). Error handling and recovery guidance are not evident in source. The server is a template-based platform intended to be customized per integration, which explains some structural gaps, but the baseline quality of provided templates is below production standards.
Create a new ticket in Zendesk
Execute a SQL query against PostgreSQL database
Execute a SQL query against Trino database
Read contents of a file from the filesystem
Get information about an Elasticsearch/OpenSearch index
Get details about a GitLab project
Get details about a GitHub repository
Get schema information for a Trino table
Get schema information for a BigQuery table
Tool descriptions are uniformly terse (20-40 characters) and lack LLM-optimized context. Baseline for A+ tools is 194 chars; this server averages ~35 chars per tool. Descriptions like 'List all BigQuery datasets in a project' do not explain WHEN to call vs. similar tools or what structure is returned.
Parameter descriptions are missing or incomplete. For example, 'list_messages' accepts 'limit' (integer) but does not specify the min/max range (baseline: 1-100). 'list_issues' accepts 'state' (string) with enum values (open, closed, all for GitHub; opened, closed, all for GitLab) but these are not visible in schema; LLM must infer from description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Get schema information for a PostgreSQL table
Get details about a Zendesk ticket
Get information about a Slack user
Simple hello world tool for demo purposes
List available Trino catalogs
List all BigQuery datasets in a project
List contents of a directory in the filesystem
List issues in a GitLab project
List issues in a GitHub repository
List messages in a Slack channel
List all tables in the PostgreSQL database
List tickets in Zendesk
Query data from BigQuery datasets
Search Elasticsearch/OpenSearch indices
Search GitLab projects
Search GitHub repositories
Send a message to a Slack channel
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). The 'send_message' and 'create_ticket' tools are state-modifying (WRITE risk) but are not marked with destructiveHint to signal irreversibility. LLMs cannot infer retry safety.
Output schemas not documented. The source code shows input parameters but no explicit documentation of what each tool returns (structure, fields, pagination). For example, 'list_issues' should return a paginated list with per-issue metadata (ID, title, state, URL) but the expected output structure is not visible.
No pagination support visible in schemas. Tools returning lists (e.g., 'list_issues', 'search_repositories') lack limit/offset or cursor parameters and do not document pagination strategy. Without pagination, large result sets can exhaust context.
Error handling and recovery guidance are not documented in tool descriptions. If 'get_repository' fails with 'not found', the description does not suggest alternative actions (e.g., 'Try search_repositories() with a partial repo name').
Duplicate tool names across integrations without namespace clarity. 'list_issues' appears in both GitHub and GitLab modules; 'get_table_schema' appears in BigQuery, PostgreSQL, and Trino. When both are available in a single MCP server instance, LLMs cannot disambiguate which to call.
No security annotations. Tools like 'query' (BigQuery), 'execute_query' (PostgreSQL, Trino), and 'get_file' (filesystem) accept user input that could be exploited for SQL injection, command injection, or path traversal. Descriptions do not mention validation or sanitization; no parameter constraints (e.g., regex, allowed paths) are visible.
Parameter names are sometimes ambiguous. 'state' in 'list_issues' differs between GitHub (open, closed, all) and GitLab (opened, closed, all). Without enum constraints in the schema, LLMs will pass invalid values and fail.
Composition issues: response chaining IDs are not guaranteed. For example, 'search_repositories' returns repository metadata, but it is unclear if the response includes a 'full_name' or 'url' field needed by 'list_issues'. Without chaining IDs, downstream calls require extra lookup steps.