Wet-lab triage for AI binder-design agents. Yeast display, mammalian display, DMS at library scale.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer rk_live_... API key minted at https://tools.ranomics.com/account/api-keys
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Accept a quote. Moves the experiment from QuoteSent to WaitingForMaterials. Call after a human (or budget guard) has approved the total_usd from get_experiment_quote. Returns 409 quote_not_confirmable if status is not QuoteSent, or 409 quote_not_finalized if a price has not been posted yet (total_usd null). Fetch get_experiment_quote and wait for total_usd before confirming.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Accept a quote. Moves the experiment from QuoteSent to WaitingForMaterials. Call after a human (or budget guard) has approved the total_usd from get_experiment_quote. Returns 409 quote_not_confirmable if status is not QuoteSent, or 409 quote_not_finalized if a price has not been posted yet (total_usd null). Fetch get_experiment_quote and wait for total_usd before confirming.
| Argument | Type | Description |
|---|---|---|
| quote_id* | string |
{
"type": "object",
"required": [
"quote_id"
],
"properties": {
"quote_id": {
"type": "string",
"minLength": 1
}
}
}Non-binding USD cost estimate for a hypothetical submission. Pass target_kind='catalog' + target_id for a calibrated band (requires_human_quote=false), or target_kind='custom' for a placeholder order-of-magnitude band (requires_human_quote=true). Call BEFORE submit_experiment when budgeting matters.
| Argument | Type | Description |
|---|---|---|
| target_id | string | |
| target_kind | string | |
| candidate_count | integer | |
| experiment_type* | string | |
| library_diversity | integer |
{
"type": "object",
"required": [
"experiment_type"
],
"properties": {
"target_id": {
"type": "string"
},
"target_kind": {
"enum": [
"catalog",
"custom"
],
"type": "string"
},
"candidate_count": {
"type": "integer",
"minimum": 0
},
"experiment_type": {
"enum": [
"yeast_display",
"mammalian_display",
"dms"
],
"type": "string"
},
"library_diversity": {
"type": "integer",
"minimum": 0
}
}
}Fetch the quote for an experiment once status is QuoteSent. Returns quote_id, total_usd, currency (default USD), line_items, valid_until, and terms_url. If status is QuoteSent but the scoping team has not posted a price yet, total_usd is null and a 'note' field explains it is being finalised; poll again until total_usd populates. Pass the quote_id to confirm_quote to accept.
| Argument | Type | Description |
|---|---|---|
| experiment_id* | string |
{
"type": "object",
"required": [
"experiment_id"
],
"properties": {
"experiment_id": {
"type": "string",
"minLength": 1
}
}
}Fetch results once results_status is 'partial' or 'all' (check via get_experiment_status first). Returns per-sequence pre/post counts, log2_enrichment, percentile, called_hit booleans, plus signed download URLs for the enrichment table CSV, hits FASTA, and (when opted in) raw FASTQ. Yeast-display result shape; mammalian and DMS use the same envelope.
| Argument | Type | Description |
|---|---|---|
| experiment_id* | string |
{
"type": "object",
"required": [
"experiment_id"
],
"properties": {
"experiment_id": {
"type": "string",
"minLength": 1
}
}
}Poll an experiment by id. Returns the current status (Draft/WaitingForConfirmation/QuoteSent/WaitingForMaterials/LibraryConstruction/Sorting/NGS/DataAnalysis/InReview/Done), the orthogonal results_status (none/partial/all), and the status_log. Cheap; safe to poll every few minutes. Webhooks are preferred for production agents.
| Argument | Type | Description |
|---|---|---|
| experiment_id* | string |
{
"type": "object",
"required": [
"experiment_id"
],
"properties": {
"experiment_id": {
"type": "string",
"minLength": 1
}
}
}List the calibrated antigen catalogue. Each entry carries target_id, supported_experiment_types, and typical_campaign_range_usd. Use the target_id on submit_experiment to skip human scoping, or use the custom target shape for a one-off antigen.
No arguments.
{
"type": "object",
"properties": {}
}Submit a binder panel for wet-lab triage. The experiment_spec mirrors the curl /api/v1/experiments contract: experiment_type (yeast_display/mammalian_display/dms), target (target_id or custom), library_design, and sequences as {user_key: amino_acid_string} (use ':' as a multi-chain separator). Optional webhook_url receives signed POSTs on every status transition. Optional idempotency_key dedupes retries. Returns the created experiment with status WaitingForConfirmation and a status_log. Poll get_experiment_status to track progress, get_experiment_results when status_log shows Done.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| webhook_url | string | |
| experiment_spec* | object | |
| idempotency_key | string |
{
"type": "object",
"required": [
"experiment_spec"
],
"properties": {
"name": {
"type": "string"
},
"webhook_url": {
"type": "string",
"format": "uri"
},
"experiment_spec": {
"type": "object",
"required": [
"experiment_type",
"target",
"sequences"
],
"properties": {
"target": {
"type": "object",
"properties": {
"custom": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"notes": {
"type": "string"
},
"antigen_sequence": {
"type": "string"
}
}
},
"target_id": {
"type": "string",
"minLength": 1
}
}
},
"sequences": {
"type": "object",
"additionalProperties": {
"type": "string",
"minLength": 1
}
},
"library_design": {
"type": "object",
"properties": {
"mode": {
"type": "string"
},
"notes": {
"type": "string"
},
"diversity_estimate": {
"type": "integer",
"minimum": 0
}
}
},
"experiment_type": {
"enum": [
"yeast_display",
"mammalian_display",
"dms"
],
"type": "string"
}
}
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8
}
}
}