MCP Server for NetMHCIIpan-4.3 providing both synchronous and asynchronous APIs for MHC Class II binding prediction
The server has 13 tools with generally clear names and descriptions, but exhibits significant gaps in schema documentation, parameter constraints, and error handling guidance. Tool naming follows verb-noun conventions consistently (get_*, predict_*, submit_*, list_*, cancel_*), which is good for LLM intent inference. However, many parameters lack type constraints (enums for alleles, status filters), and error responses are basic. The synchronous prediction tools have reasonable descriptions explaining when to use them, but the async submit_* tools lack clarity on what happens after submission and how to monitor results. Output schemas are not documented anywhere, LLMs cannot predict what fields to expect from results. Security is adequate but not exceptional, no evidence of secret injection patterns despite file path parameters. Overall, this is a domain-specific server with decent fundamentals but lacks polish on parameter constraints and output documentation.
Analyze protein sequences for MHC II binding regions (synchronous). Use this for protein sequence analysis that completes in 1-2 seconds.
Cancel a running job.
Get log output from a running or completed job.
Get the results of a completed job.
Get the status of a submitted job.
List all submitted jobs.
Predict binding affinity across multiple MHC II alleles (synchronous). Use this for batch multi-allele analysis that completes in 3-5 seconds.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. Tools return dict objects with undocumented structure.
Parameter 'allele' and 'alleles' accept free-form strings with no enum constraint or format validation. Should define allowed MHC II alleles (e.g., DRB1_0101, DRB1_1501, DRB3_0101, etc.) as enums to prevent hallucinated values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Predict binding using custom MHC II sequences (synchronous). Use this for custom allele predictions that complete in about 1 second.
Predict MHC II binding for peptides using NetMHCIIpan (synchronous). Use this for quick peptide binding predictions that complete in under 1 second.
Submit batch multi-allele prediction for background processing.
Submit custom MHC binding prediction for background processing.
Submit peptide binding prediction for background processing. Use this when you prefer async workflow or are processing many peptides.
Submit protein sequence analysis for background processing. Use this for large protein sequences or batch processing.
'status' parameter in list_jobs lacks enum constraint. Description says 'Filter by status (pending, running, completed, failed, cancelled)' but LLMs may hallucinate other values like 'queued', 'processing', 'error'.
Error handling is minimal. Tools catch exceptions but return generic error dicts like {'status': 'error', 'error': str(e)}. No recovery guidance or error classification (retryable, user-fixable, fatal). LLM cannot determine next action after failure.
Parameters 'input_file', 'alpha_seq', 'beta_seq' accept filesystem paths with no validation or sanitization. No evidence of path traversal checks or sandboxing. Descriptions lack format hints (absolute vs relative, expected file extensions).
cancel_job tool description is only 38 characters ('Cancel a running job.'). Does not explain what happens to outputs, whether cancellation is reversible, or how long it takes to reflect in status. Lacks WHEN to use guidance.
submit_* tools lack clarity on expected behavior after submission. Descriptions say 'for background processing' but do not explain: Are results polled via get_job_result()? What is the expected polling interval? How long do results persist? Can jobs be retried?
Mutually exclusive parameters (input_file vs peptides/protein_sequence) are documented but validation is unclear. If both are provided, what happens? Which takes precedence? Error message if both are missing?