MCP server for processing CSV trust rankings using OpenRank and sending data to Avail Data Availability layer
AvailMCP has significant definition quality gaps. All three tools have descriptions, but they are vague and lack actionable detail. Tool names contain 'and' (process_csv_and_send_to_avail), signaling multiple responsibilities that should be split. Input schemas are present but lack descriptions for most parameters. Output schemas are not documented. Error handling returns raw strings without recovery guidance. No parameter validation constraints (enums, ranges, patterns) are declared. The server conflates CSV processing, OpenRank calculation, and Avail DA submission into a single tool, violating single-responsibility principle.
Get data from the AvailDA API.
Generate CSV content for AI Agent Trust rankings for ex: gpt4-trader,claude-analyst,95 being the i,j,v Process uploaded CSV file, calculate OpenRank trust rankings, and send results to Avail DA. CSV should have columns: from,to,value (or i,j,v)
Send data to the AvailDA API.
Tool name 'process_csv_and_send_to_avail' contains 'and', indicating multiple responsibilities (CSV parsing, OpenRank calculation, Avail submission). Should be split into separate tools: parse_csv_for_trust_ranking, calculate_eigentrust_rankings, send_rankings_to_avail.
Parameter descriptions are missing or minimal. 'csv_content' has a description, but 'filename' and 'app_id' lack context. 'data' parameter in send_data_to_avail has no description. LLMs cannot infer what format 'data' should be or when to use this tool vs process_csv_and_send_to_avail.
Output schemas are not documented. Tools return raw strings (e.g., 'Success! Processed...' or response.json()). LLMs cannot plan downstream calls or extract structured data. No field definitions for what get_data_from_avail returns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
Error handling returns raw exception strings and HTTP status codes without recovery guidance. 'Error processing CSV and calculating rankings: {str(e)}' tells the LLM nothing about what to do next. No categorization of retryable vs fatal errors.
No input validation constraints. 'app_id' defaults to 89 with no bounds checking. 'csv_content' accepts any string; no validation that it is valid CSV or contains required columns before processing. No enums, patterns, or ranges declared.