SeqScreen MCP — wraps the Treangen Lab DNA sequence screening pipeline as 10 callable tools. Jobs are ASYNC (5–60 min): classify_fasta returns a job_id immediately, poll get_status until complete, then get_results or get_threats.
SeqScreen MCP has well-structured tool definitions with clear naming (verb_noun pattern), comprehensive parameter schemas, and detailed descriptions. All 10 tools are explicitly registered with proper JSON Schema. Descriptions average ~150 chars and explain WHEN to use each tool. However, output schemas are not documented, LLMs cannot predict response structure. Error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions are strong but some advanced options (e.g., 'options' object properties) lack inline guidance. Missing: per-tool error classification, confirmation patterns for destructive ops (cancel_job), and explicit output field documentation.
Cancel an in-flight job. Cleans up subprocess tree (Nextflow + BLAST/centrifuge children). Idempotent.
Returns the SeqScreen installation status (ready: bool, summary: str, checks_passed/missing/suppressed: int, passed/missing lists, elapsed_sec). Useful as a 'is the box ready yet?' status check before submitting jobs.
Submit a FASTA for SeqScreen classification. Returns a job_id immediately; classification runs asynchronously (5–60 minutes depending on input size and mode). Poll get_status to track progress, then call get_results or get_threats.
Sanity check: invoke key tools' --version and capture output. Doesn't need the DB, doesn't even need the seqscreen repo cloned. Returns a concise dict mapping tool name → version (or 'missing').
Get classification results for a completed job. Returns a summary (counts, kingdom breakdown, top organisms), top-N rows, and a resource URI for the full TSV. Does NOT return the entire TSV inline — use the resource URI if you need the raw data.
Output schemas not documented. LLMs cannot predict response structure for any tool. get_results, get_threats, get_taxonomy, get_status, list_jobs all return complex objects but no schema is visible in tool definitions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). cancel_job is destructive but unmarked. get_* tools are read-only but unmarked. Agents cannot infer safety/idempotency without explicit hints.
Error handling lacks recovery guidance. No error classification (retryable vs user-fixable vs fatal). cancel_job description says 'Idempotent' but no error response schema shown. classify_fasta async pattern needs explicit guidance on timeout/failure modes.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
Cheap status poll for a submitted job. Returns current stage (out of 6 SeqScreen pipeline stages) and elapsed time.
Get taxonomic-only view for a completed job. Lighter than get_results — no GO terms, no flag annotations, just taxid + lineage per query.
Get only the threat-flagged rows from a completed job, with categorical labels (select_agent_indicator, virulence_factor_indicator, concerning_functional_annotation). Use this when the question is 'are there flagged sequences in this FASTA?' — much smaller payload than get_results.
List recent jobs with their status. For discoverability.
Validate a FASTA's format (no taxonomy, no DB). Calls validate_fasta.pl from SeqScreen. Returns errors/warnings if any. Cheap (~1 sec). Useful as a pre-flight check before classify_fasta.
Advanced 'options' parameter in classify_fasta has nested properties (hmmscan, ancestral, blastn, evalue, filter_taxon, keep_taxon, bitscore_pct) but no descriptions for individual fields. LLMs cannot determine when to use each option.
No confirmation/dry-run pattern for destructive cancel_job. Agents can cancel in-flight jobs without explicit user confirmation, risking accidental cancellation of long-running analyses.