MCP server for cyclic peptide analysis and design, providing tools for HELM notation conversion, permeability prediction, KRAS binding prediction, and structure-based scoring via external servers (Boltz2, Rosetta)
The server defines 9 tools with reasonable coverage of cyclic peptide computation workflows. Tool naming follows verb_noun conventions (get_*, predict_*, cancel_*, list_*, cleanup_*), which is a positive baseline. However, descriptions vary significantly in quality and depth. Some tools have good context ('Fast operation, returns predictions immediately (~33 sequences/second)') while others are minimal ('Get the status of a submitted cyclic peptide computation job'). Input schemas are visible and include type definitions and parameter descriptions, but lack critical details like enums for constrained fields (e.g., status filter values), value ranges for numeric parameters, and output schema documentation. Error handling is mentioned but not visible in the provided code, making it impossible to assess recovery guidance. Security considerations around file path parameters (input_file, output_file) are not evident. Overall, the server achieves a functional baseline but falls short of production-grade quality standards for LLM interaction.
Cancel a running cyclic peptide computation job.
Clean up completed jobs older than specified days.
Get log output from a running or completed job.
Get the results of a completed cyclic peptide computation job.
Get the status of a submitted cyclic peptide computation job.
Convert cyclic peptide sequences from HELM notation to SMILES representation. Fast operation - returns results immediately (typically ~33 sequences/second).
List all submitted cyclic peptide computation jobs.
Missing output schemas for all tools. LLMs cannot plan downstream operations without knowing what fields are returned. Pattern: pattern:tool requires documented return types.
Destructive tool cleanup_completed_jobs lacks clear state-modification language. Description does not warn about data loss or provide dry-run capability. Per pattern:command-tool, destructive operations must explicitly state consequences.
list_jobs accepts 'status' as free-form string but only mentions allowed values in description. No enum constraint enforced. Per pattern:constrained-input, known-set parameters must be enums to prevent hallucinated values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Predict KRAS protein binding affinity (KD values in μM) for cyclic peptides. Fast operation - returns predictions immediately (typically ~33 sequences/second).
Predict cell membrane permeability for cyclic peptides using Random Forest model. Fast operation - returns predictions immediately (typically ~33 sequences/second).
cancel_job description (11 words) does not state that this is a reversible, non-idempotent operation with side effects. Agents need to know retry semantics per pattern:idempotent-operation.
File path parameters (input_file, output_file) lack path traversal validation hints or constraints. LLMs could be tricked into reading/writing arbitrary files. Per pattern:tool-gateway, all untrusted input must be sanitized.
Numeric parameters lack value range constraints. 'limit' parameter has no min/max guidance; 'keep_days' has no range; 'tail' in get_job_log has no upper bound.
No pagination support visible for list_jobs or batch result tools (helm_to_smiles, predict_*). Large result sets will bloat context window. Per pattern:paginated-result, tools returning lists must support limit/offset and total count.
Tool descriptions vary widely in quality. Some are 10-14 words (too minimal); others are longer and more contextual. Most tools here are 50-100 chars and lack WHEN/WHY context.
Error handling and recovery guidance not visible in source code. No indication of how tools fail, what errors are retryable, or how agents should self-correct. Per pattern:recovery-guide, error responses must tell the LLM what to do next.