MCP server providing multi-tenant hybrid vector and GraphQL indexing capabilities with tenant isolation verification
This MCP server exhibits critical quality failures across all dimensions. The single tool 'execute_skill_action' lacks a proper input schema, parameter descriptions, and output schema documentation. The codebase shows a stub implementation that does not actually register tools with the MCP protocol, the JSON output in mcp_server.py is merely a print statement announcing supported tools, not a proper MCP tool registration. The source provides no evidence of JSON Schema parameter definitions, no input validation, and no structured error handling. The implementation appears to be a proof-of-concept rather than a production-grade MCP server.
Execute skill action on the multi-tenant hybrid vector GraphQL indexer
Tool has NO input schema. The mcp_server.py file contains no JSON Schema definition, no parameter type declarations, and no formal input specification.
Tool description is only 92 characters and lacks actionable detail. It does not state WHAT the tool does, WHEN to use it, or WHAT it returns. A proper description should be 150-300 chars and answer: what happens when called, what are the prerequisites, what fields are returned.
No parameters are explicitly defined in any function signature or schema. The source shows client.py has a query_multitenant_hybrid() method with parameters (tenant_id, search_query, alpha_weight), but these are INFERRED from example usage, not formally exposed as MCP tool parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 19 | 2026-07-28+ | v2 |
Output schema is undocumented. The client.py example returns a dict with fields like 'graphql_query_id', 'tenant', 'alpha_hybrid_weight', 'bm25_score_top_match', 'vector_cosine_distance', 'tenant_isolation_verified', 'graphql_response_json_url', but the MCP server provides no structured output schema declaration, no field descriptions, and no return type documentation.
No error handling or recovery guidance. The server implementation contains no error classification, no actionable error messages, and no guidance for LLMs on what to do if a call fails. An LLM receiving an error has no way to know if it should retry, ask the user, or give up.
Tool name is vague and does not follow verb_noun convention. 'execute_skill_action' is generic and ambiguous, it does not clearly indicate what action is executed on what resource. Consider renaming to something like 'query_hybrid_vector_index' or 'search_multi_tenant_vectordb' to make the intent explicit.
No parameter validation or constraints. The example shows alpha_weight as 0.65 and 0.5, but there is no schema declaring that it must be a float between 0 and 1. Unbounded or unconstrained numeric parameters allow LLMs to pass absurd values.
No security declarations or permission gates. The tool takes a tenant_id parameter but provides no indication of how tenant isolation is enforced, what permissions the agent requires, or how credentials are injected. Security is opaque.
Tool registration is a print statement, not proper MCP protocol. The mcp_server.py main() function calls print(json.dumps({...})) but does not establish MCP transport, handle tool calls, or implement the tools/call endpoint. This is not a functional MCP server.