MCP server that routes cheap text and vision work to SJTU-hosted models.
Four tools with basic schemas and descriptions, but significant gaps in parameter documentation and output structure. Tool names follow verb_noun convention (sjtu_*), but descriptions lack actionable context for LLM selection. Parameters have types but many lack descriptions (e.g., 'model' param in sjtu_text has description, but temperature/max_tokens lack guidance on ranges). No output schema documented. Error handling is minimal, SjtuApiError exists but provides no recovery guidance. Composition is reasonable (each tool has one responsibility), but tools lack idempotency guarantees and don't document prerequisites or when to use one over another.
Route common low-risk jobs like summarize, rewrite, classify, and extract.
List available models from the SJTU endpoint.
Run a plain text task against the SJTU OpenAI-compatible API.
Run an image understanding task against the default vision model.
Output schemas not documented. Tools return strings or lists but LLMs cannot plan downstream calls or extract structured data. sjtu_models returns list[dict] but structure is undocumented; sjtu_text/vision/cheap_task return plain strings with no field guidance.
Parameter descriptions incomplete. 'temperature' and 'max_tokens' in sjtu_text/vision lack range guidance (e.g., '0.0 - 2.0' for temperature, '1 - 4096' for max_tokens). LLMs cannot validate inputs without explicit constraints.
Tool descriptions lack selection context. 'Run a plain text task' does not explain when to use sjtu_text vs sjtu_cheap_task vs sjtu_vision. LLMs cannot disambiguate without explicit guidance on prerequisites and use cases.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Error handling provides no recovery guidance. SjtuApiError truncates responses but does not categorize errors as retryable, user-fixable, or fatal. LLMs receive raw HTTP status codes with no actionable next steps.
sjtu_cheap_task naming is vague. 'cheap_task' does not convey what the tool does, LLMs must read the description to understand it routes low-risk jobs. Rename to 'route_task' or 'execute_task' to clarify intent.