This release is a pre-release and may not be stable for production use.
gi-mcp
Research and development use. Not for clinical or diagnostic decisions. For high-volume or latency-sensitive use, contact contact@genomicintelligence.ai to provision a production-shaped deployment.
An MCP server for the Genomic Intelligence DNA-analysis API. It exposes the six inference tasks (promoter, splice, enhancer, chromatin, expression, annotation), a composite annotation→expression workflow, sequence acquisition (Ensembl + local FASTA), reference resources, and ready-made prompt workflows — all over MCP stdio.
It runs locally as a thin protocol translator: it owns no inference and stores no key, forwarding each request to your Genomic Intelligence backend under your API key.
Install & configure
gi-mcp runs with uv (uvx fetches and runs it
with no manual install):
uvx gi-mcp # recommended
pip install gi-mcp # alternative
Request a partner key from https://genomicintelligence.ai/contact, then point
your MCP client at uvx gi-mcp with GI_API_KEY in the environment. For
Claude Desktop, edit claude_desktop_config.json and reopen:
{
"mcpServers": {
"genomic-intelligence": {
"command": "uvx",
"args": ["gi-mcp"],
"env": { "GI_API_KEY": "gi_..." }
}
}
}
For Claude Code: claude mcp add genomic-intelligence --env GI_API_KEY=gi_... -- uvx gi-mcp.
Upgrading from 0.1.0a17 or earlier
Pinned below 0.1.0a18? Upgrade. That release fixed a coordinate bug, not a
cosmetic one: fetch_gene_for_expression placed the TSS of a minus-strand
gene at gene-sense offset 4,598 instead of 4,599, so the 9,198 bp expression
window was shifted one base. A shifted window does not fail — it returns a
confident number for the wrong sequence. Plus-strand genes were unaffected.
uvx gi-mcp already tracks the newest release; pip install -U gi-mcp if you
installed with pip, and re-pin if you pin (uvx gi-mcp@<version>).
📖 Full documentation
https://docs.genomicintelligence.ai/mcp.md — per-client setup, the
handle pattern, copy-paste "try it" prompts, the full tool/resource surface,
and the underlying /v1 contract. Start there.
Environment
| Var | Default | Purpose |
|---|---|---|
GI_API_KEY |
— (required) | Partner bearer key (gi_…) |
GI_BASE_URL |
https://api.genomicintelligence.ai |
Override for staging / local backend |
GI_ENSEMBL_URL |
https://rest.ensembl.org |
Ensembl REST base |
GI_FASTA_ALLOW_ANY |
unset | 1 to skip MCP-roots gating for local FASTA |
GI_ASYNC_TIMEOUT |
240 |
Ceiling (s) a wait=True slow task blocks while streaming progress before returning a timeout error |
GI_ASYNC_POLL_INTERVAL |
2 |
Poll cadence (s) for the block-and-stream loop |
GI_HTTP_TIMEOUT |
300 |
Per-request read timeout (s) for /v1 calls |
GI_UCSC_URL |
https://api.genome.ucsc.edu |
UCSC REST base for reference sequence bytes (never gene metadata). Empty string = Ensembl only |
GI_REFDATA_CATALOG |
1 |
0 resolves every gene symbol live instead of using the bundled coordinate catalog |
GI_REFDATA_CACHE |
1 |
0 disables the reference response cache and its bundled prewarm |
GI_REFDATA_CACHE_MB |
64 |
Cache ceiling for sequence bytes (MiB, LRU by bytes) |
GI_REFDATA_BYTES_TTL_S |
2592000 |
Freshness window for cached bases (30 days; the key carries the assembly, so they are immutable) |
GI_REFDATA_LOOKUP_TTL_S |
604800 |
Freshness window for cached symbol→locus answers (7 days) |
GI_ENSEMBL_BYTES_TIMEOUT_S |
20 |
Read timeout for an Ensembl sequence fetch that has a UCSC fallback |
GI_ENSEMBL_SOLE_TIMEOUT_S |
45 |
Read timeout where Ensembl is the only source (rat, arabidopsis, scaffolds and alt contigs — no UCSC path by design) |
Where reference data comes from
Gene symbols resolve against a bundled coordinate catalog (109 pre-resolved
loci across human, mouse, rat, zebrafish, fly, yeast and arabidopsis) before
anything reaches rest.ensembl.org; anything outside it still resolves live.
Sequence bytes come from a response cache, then UCSC, then Ensembl, and the
bases behind the published example prompts ship in the package so they need no
network at all. When every upstream is unreachable a cached copy is served
rather than an error, and the response's meta says so (source,
locus_source, assembly, catalog_release, stale). Reference sequence for
a fixed assembly does not change, so a cached answer is the same bases a live
fetch would have returned — verified byte-identical between UCSC and Ensembl on
every control locus.
Development & contributing
Setup, conventions, the architecture walkthrough, and the release process live
in CONTRIBUTING.md. Quick start:
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest # full suite (mocked; no network)
Release history is in CHANGELOG.md.
Release files for gi-mcp 0.1.0a21
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gi_mcp-0.1.0a21.tar.gz | 242.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gi_mcp-0.1.0a21-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 423.3 kB
Release files / gi_mcp-0.1.0a21.tar.gz
| Download URL | gi_mcp-0.1.0a21.tar.gz |
|---|---|
| Size | 242.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
62483b50afb8691b318f6904969999ab1cb6fd6f953973ccda5cec187cbb1d48
|
|
BLAKE2b-256 checksum How to use checksums |
c1ffc8b14849c44c782a1eb98d1059ee454cc2f913848bc614c5213eef2c865d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / gi_mcp-0.1.0a21-py3-none-any.whl
| Download URL | gi_mcp-0.1.0a21-py3-none-any.whl |
|---|---|
| Size | 180.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6dfc27e55ab402f6ea06a9dc1c1ce90802c503c5a05416a7a498ddd57bcda4e5
|
|
BLAKE2b-256 checksum How to use checksums |
2cd3f5dd9dc39a0daf7658526ee7785493332fbcf2eebfd2385060ff98214909
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|