Metadata-Version: 2.4
Name: gi-mcp
Version: 0.1.0a13
Summary: MCP server for the Genomic Intelligence DNA-analysis API: promoter, splice, enhancer, chromatin, expression, annotation + a composite annotation→expression workflow, over MCP stdio.
Project-URL: Homepage, https://genomicintelligence.ai
Project-URL: Documentation, https://docs.genomicintelligence.ai
Project-URL: Get an API key, https://genomicintelligence.ai/contact
Author-email: Genomic Intelligence <alex@genomicintelligence.ai>
License-Expression: MIT
License-File: LICENSE
Keywords: DNA models,bioinformatics,claude,dna,ensembl,genomic models,genomics,llm,mcp,model-context-protocol
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Requires-Python: >=3.10
Requires-Dist: httpx<1,>=0.27
Requires-Dist: mcp<2,>=1.27
Provides-Extra: dev
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Description-Content-Type: text/markdown

# gi-mcp

> For research and development use, not 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](https://genomicintelligence.ai)
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`](https://docs.astral.sh/uv/) (`uvx` fetches and runs it
with no manual install):

```bash
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:

```json
{
  "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`.

## 📖 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 |

## Development & contributing

Setup, conventions, the architecture walkthrough, and the release process live
in [`CONTRIBUTING.md`](CONTRIBUTING.md). Quick start:

```bash
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest                 # full suite (mocked; no network)
```

Release history is in [`CHANGELOG.md`](CHANGELOG.md).
