Skill Tracer
Skills › Scientific Agent Skills › genomic-intelligence › mcp.md

mcp.md

104 lines · skills/genomic-intelligence/references/mcp.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Hosted MCP server
2
3Connect a Streamable HTTP client to `https://mcp.genomicintelligence.ai/mcp`.
4Anonymous calls use a shared, rate-limited demo principal. For own quotas and job
5access send `Authorization: Bearer <GI_API_KEY>` (or the documented `X-GI-Key`
6header). Local `gi-mcp` is a thin client: sequences used for predictions still
7travel to the hosted REST inference service.
8
9Reviewed hosted discovery on 2026-10-01: 15 tools and six static resources.
10Initialize/retain the MCP session and let the host negotiate protocol support;
11the read-only probe negotiated `2025-11-25`. Do not assume another server's
12protocol version or HTTP framing. The reviewed local package is `gi-mcp`
130.1.0a21 (Python >=3.10); source below a18 has a minus-strand expression-window
14one-base shift. Pin a reviewed release when using a local deployment.

Hosted MCP server

Connect a Streamable HTTP client to https://mcp.genomicintelligence.ai/mcp. Anonymous calls use a shared, rate-limited demo principal. For own quotas and job access send Authorization: Bearer <GI_API_KEY> (or the documented X-GI-Key header). Local gi-mcp is a thin client: sequences used for predictions still travel to the hosted REST inference service.

Reviewed hosted discovery on 2026-10-01: 15 tools and six static resources. Initialize/retain the MCP session and let the host negotiate protocol support; the read-only probe negotiated 2025-11-25. Do not assume another server's protocol version or HTTP framing. The reviewed local package is gi-mcp 0.1.0a21 (Python >=3.10); source below a18 has a minus-strand expression-window one-base shift. Pin a reviewed release when using a local deployment.

Raw lines 1 to 15
Uses an outside tool MCP :1
16## Acquisition and handles
18| Tool | Required | Notes |
19|---|---|---|
20| `fetch_ensembl_sequence` | `gene` | Gene symbol or supported Ensembl ID; optional `species`, nonnegative `flank_bp`. For direct stable-ID REST lookup use `/lookup/id/{id}`. |
21| `fetch_region` | `region` | 1-based inclusive range; optional `species`, `strand` (1 or -1), `flank_bp`. Plus strand is the default. |
22| `fetch_gene_for_expression` | `gene` | Gene-sense 9,198 bp window; verify `data.tss_source`, strand, assembly and source metadata. |
23| `load_demo_sequence` | `name` | Discover task-specific names from `gi://sequences`; avoid ambiguous gene aliases (HBB has both splice and expression demos). |
24| `store_inline_sequence` | `sequence` | Optional `name`; whitespace stripped. The inline bases necessarily pass through the calling context. |
26Acquisition returns a GI envelope **`{data: {ref, name, length, ...}, meta}`**.
27Use `data.ref` as the next tool's `sequence_ref`; it is not a top-level `ref`.
28At the MCP transport layer this is inside `result.structuredContent` on the
29reviewed server, also serialized in text content. Check MCP `isError` and any
30GI error object before reading a success payload: an HTTP 200 can be a tool
31failure. Hosted demo job listing, for example, returns `isError: true` and
32`code: unavailable`, outside the REST error-code enum.
34Handles are server/session-local, in memory, TTL/capacity-limited, and disappear
35on restart or eviction. They are not durable sequence accessions. Preserve
36acquisition parameters and sequence provenance so a lost handle can be recreated.
37The hosted tool list excludes `load_local_fasta`; that tool is local-only.
38The handle summary contains only a sequence preview and no checksum. In this
39handle-only workflow verify returned length/TSS/strand/source metadata and tool
40errors; do not claim to have checked every base or computed a sequence hash.
41For exact byte-level provenance, separately acquire and hash the full reference
42bases from the recorded assembly/region, checking that source provenance matches.
44Despite acquisition tool names, bases can come from the bundled cache, UCSC,
45or Ensembl. `meta.source`, `meta.locus_source`, `meta.assembly`,
46`meta.catalog_release`, and optional stale metadata reveal this; `data.source`
47may be only the acquisition channel. See [sequence acquisition](sequence-acquisition.md).

Acquisition and handles

ToolRequiredNotes
fetch_ensembl_sequencegeneGene symbol or supported Ensembl ID; optional species, nonnegative flank_bp. For direct stable-ID REST lookup use /lookup/id/{id}.
fetch_regionregion1-based inclusive range; optional species, strand (1 or -1), flank_bp. Plus strand is the default.
fetch_gene_for_expressiongeneGene-sense 9,198 bp window; verify data.tss_source, strand, assembly and source metadata.
load_demo_sequencenameDiscover task-specific names from gi://sequences; avoid ambiguous gene aliases (HBB has both splice and expression demos).
store_inline_sequencesequenceOptional name; whitespace stripped. The inline bases necessarily pass through the calling context.

Acquisition returns a GI envelope **{data: {ref, name, length, ...}, meta}**. Use data.ref as the next tool's sequence_ref; it is not a top-level ref. At the MCP transport layer this is inside result.structuredContent on the reviewed server, also serialized in text content. Check MCP isError and any GI error object before reading a success payload: an HTTP 200 can be a tool failure. Hosted demo job listing, for example, returns isError: true and code: unavailable, outside the REST error-code enum.

Handles are server/session-local, in memory, TTL/capacity-limited, and disappear on restart or eviction. They are not durable sequence accessions. Preserve acquisition parameters and sequence provenance so a lost handle can be recreated. The hosted tool list excludes load_local_fasta; that tool is local-only. The handle summary contains only a sequence preview and no checksum. In this handle-only workflow verify returned length/TSS/strand/source metadata and tool errors; do not claim to have checked every base or computed a sequence hash. For exact byte-level provenance, separately acquire and hash the full reference bases from the recorded assembly/region, checking that source provenance matches.

Despite acquisition tool names, bases can come from the bundled cache, UCSC, or Ensembl. meta.source, meta.locus_source, meta.assembly, meta.catalog_release, and optional stale metadata reveal this; data.source may be only the acquisition channel. See sequence acquisition.

Raw lines 16 to 48
Uses an outside tool MCP :28
49## Prediction
51`predict_promoter`, `predict_splice`, `predict_enhancer`, `predict_chromatin`,
52`predict_expression` each take **exactly one** of `sequence_ref` or `sequence`,
53plus optional `model` and `sequence_name`. With a handle, its stored name wins.
54Expression also needs `description` and, for longer-than-9,198-bp input,
55`tss_index`. These two semantic requirements are described by the tools even
56where JSON Schema does not mark the arguments required.
58Current hosted prediction schemas do **not** expose REST `options.threshold`,
59`site_types`, `format`, or an async preference. Use REST when those controls are
60needed; do not invent corresponding MCP keyword arguments.
62Annotation is `find_genes`, not `predict_annotation`. It takes a sequence or
63handle, not a `region`. `find_genes_and_predict_expression` likewise takes a
64sequence/handle plus required experimental `description`, with no region or
65`tss_index` argument. Both run async internally. `wait=True` (default) returns
66the result or a timeout error, not a detached job handle.
68**The anonymous demo disables `get_job`, `list_jobs`, and `wait=False`.** With
69an own-key session, `wait=False` returns `{data: {job_id, status: "submitted"}}`
70to poll with `get_job(job_id)`. This MCP status differs from REST submission's
71`"accepted"`. `list_jobs(limit=...)` accepts 1–100 (default 20), whereas REST
72allows up to 500. Neither surface exposes pagination.

Prediction

predict_promoter, predict_splice, predict_enhancer, predict_chromatin, predict_expression each take exactly one of sequence_ref or sequence, plus optional model and sequence_name. With a handle, its stored name wins. Expression also needs description and, for longer-than-9,198-bp input, tss_index. These two semantic requirements are described by the tools even where JSON Schema does not mark the arguments required.

Current hosted prediction schemas do not expose REST options.threshold, site_types, format, or an async preference. Use REST when those controls are needed; do not invent corresponding MCP keyword arguments.

Annotation is find_genes, not predict_annotation. It takes a sequence or handle, not a region. find_genes_and_predict_expression likewise takes a sequence/handle plus required experimental description, with no region or tss_index argument. Both run async internally. wait=True (default) returns the result or a timeout error, not a detached job handle.

**The anonymous demo disables get_job, list_jobs, and wait=False.** With an own-key session, wait=False returns {data: {job_id, status: "submitted"}} to poll with get_job(job_id). This MCP status differs from REST submission's "accepted". list_jobs(limit=...) accepts 1–100 (default 20), whereas REST allows up to 500. Neither surface exposes pagination.

Raw lines 49 to 73
Uses an outside tool MCP :60
74## Discovery and resources
76`list_models(task)` returns the flat `{task, default_model, models}` object.
77Discover and record the resolved model ID, organism, window and request bounds.
78Resources are `gi://models`, `gi://docs/tasks`, `gi://openapi.json`,
79`gi://sequences`, `gi://jobs/recent`, and `gi://account`. The account resource
80identifies demo/byok mode; recent jobs is unavailable in demo mode. A resource
81being listed does not prove that the current principal may read its content.

Discovery and resources

list_models(task) returns the flat {task, default_model, models} object. Discover and record the resolved model ID, organism, window and request bounds. Resources are gi://models, gi://docs/tasks, gi://openapi.json, gi://sequences, gi://jobs/recent, and gi://account. The account resource identifies demo/byok mode; recent jobs is unavailable in demo mode. A resource being listed does not prove that the current principal may read its content.

Raw lines 74 to 82
83## Worked sequence of tool calls
85This is host pseudocode, not a Python SDK. Discovery/acquisition was exercised;
86the inference calls below are illustrative and consume inference quota.
88```text
89h = fetch_region(region="chr11:5,225,000-5,235,000")
90find_genes(sequence_ref=h.data.ref, wait=True)
91find_genes_and_predict_expression(sequence_ref=h.data.ref,
92 description="polyA plus RNA-seq; Homo sapiens K562", wait=True)
94w = fetch_gene_for_expression(gene="HBB")
95# Check w.data.length == 9198 and w.data.tss_source == "canonical-transcript".
96# Retain w.meta assembly/source and w.data strand/TSS/region.
97predict_expression(sequence_ref=w.data.ref,
98 description="polyA plus RNA-seq; Homo sapiens K562")
100# No inference: inspect/load the public positive-control sequence.
101d = load_demo_sequence(name="promoter_tp53")
102# Inference only when requested:
103predict_promoter(sequence_ref=d.data.ref)
104```

Worked sequence of tool calls

This is host pseudocode, not a Python SDK. Discovery/acquisition was exercised; the inference calls below are illustrative and consume inference quota.

h = fetch_region(region="chr11:5,225,000-5,235,000")
find_genes(sequence_ref=h.data.ref, wait=True)
find_genes_and_predict_expression(sequence_ref=h.data.ref,
    description="polyA plus RNA-seq; Homo sapiens K562", wait=True)

w = fetch_gene_for_expression(gene="HBB")
# Check w.data.length == 9198 and w.data.tss_source == "canonical-transcript".
# Retain w.meta assembly/source and w.data strand/TSS/region.
predict_expression(sequence_ref=w.data.ref,
    description="polyA plus RNA-seq; Homo sapiens K562")

# No inference: inspect/load the public positive-control sequence.
d = load_demo_sequence(name="promoter_tp53")
# Inference only when requested:
predict_promoter(sequence_ref=d.data.ref)
Raw lines 83 to 104