Agent-callable canine genomics — open MCP server + REST API over the Sniff Atlas: breed-stratified allele frequencies for 9.67M variants across 188 dog breeds, calibrated AI pathogenicity, and a variant/gene/breed/disease knowledge graph.
Project description
sniff-mcp — agent-callable canine genomics
The reference layer for dog DNA. A live, open API + MCP server over the Sniff Atlas — breed-stratified allele frequencies for 9,667,790 variants across 188 dog breeds (CanFam4), calibrated AI pathogenicity (ESM2, AUC 0.935 vs OMIA), Pangolin splice, Zoonomia phyloP conservation, and a variant ⇄ gene ⇄ breed ⇄ disease knowledge graph. Every response carries its own citation + provenance.
Building anything with dogs, breeds, or canine health? This is the data layer. No key, no signup — point your agent or app at it and go.
- 🔌 MCP endpoint:
https://mcp.sniff.world/mcp/(Streamable HTTP, 13 tools) - 🌐 REST API:
https://api.sniff.world/(OpenAPI docs ·llms.txt) - 📚 Dataset: 10.5281/zenodo.20566358 (CC-BY-4.0)
Add it to your coding agent (copy-paste)
The hosted server is open and needs no auth. Pick your tool:
Claude Code
claude mcp add --transport http sniff https://mcp.sniff.world/mcp/
Cursor / Windsurf / VS Code — add to your MCP config (.cursor/mcp.json, mcp.json, etc.):
{
"mcpServers": {
"sniff": { "url": "https://mcp.sniff.world/mcp/" }
}
}
Claude Desktop or any stdio-only client (uses the hosted server via a local bridge):
{
"mcpServers": {
"sniff": { "command": "npx", "args": ["-y", "sniff-mcp"] }
}
}
That's it. Ask your agent: "What's the frequency of CPT2 5:56189113 across breeds?" or "Find HIGH-impact variants in DLA genes."
Use the REST API (for web apps)
No SDK needed — it's plain HTTP/JSON.
curl https://api.sniff.world/v1/variant/5:56189113
{
"variant_id": "5:56189113", "ref": "A", "alt": "G",
"global_af": 0.0185, "popmax_af": 0.591, "popmax_breed": "akita",
"consequence": "missense_variant", "impact": "MODERATE",
"gene": "CPT2", "esm2_llr": -6.1, "deleteriousness_tier": "...",
"provenance": { "dataset_doi": "10.5281/zenodo.20566358",
"predicted_disease_relevance": "UNPROVEN", "...": "..." }
}
// JavaScript / TypeScript
const r = await fetch("https://api.sniff.world/v1/variant/5:56189113/context?breed=akita");
const ctx = await r.json(); // frequency + pathogenicity + gene + cross-breed + provenance
| Endpoint | What it returns |
|---|---|
GET /v1/variant/{pos} |
single variant: AF, popmax, consequence, gene, ESM2/Pangolin/phyloP |
GET /v1/variant/{pos}/context |
the joined query — everything about a variant in one call |
GET /v1/breed/{breed} |
breed profile (top variants, geometry, nearest breeds) |
GET /v1/breed/{breed}/nearest |
genetically nearest breeds (PCA distance) |
GET /v1/gene/{symbol} |
variants in a gene, ranked by impact |
GET /v1/semantic?q= |
natural-language search ("ancient arctic sled dogs") |
GET /v1/search |
filtered discovery across all 9.67M variants |
GET /v1/metadata |
release, DOI, counts, scope banner |
Positions are CanFam4 chrom:pos (e.g. 5:56189113). Full schema: https://api.sniff.world/openapi.json.
Self-host (optional)
uvx sniff-mcp # run the MCP server locally (needs the release data on disk)
pip install sniff-mcp # or install into your env
See ARCHITECTURE.md and Dockerfile. The hosted endpoint is the easy path; self-hosting is for air-gapped or high-volume use.
What it is (and isn't)
Built from CanVAS (14,478 dogs, Beagle-imputed, MAF≥1%) plus projected community cohorts. Pathogenicity is computational — every prediction is flagged predicted_disease_relevance: "UNPROVEN". This is a research and discovery resource, not a clinical diagnostic. The scope (common + low-frequency variants, MAF≥1%) and the UNPROVEN caveat ride in every response's provenance block, so anything an agent quotes stays honest and self-citing.
Citation
Gehring, M. (2026). Sniff Atlas. Zenodo. https://doi.org/10.5281/zenodo.20566358 (CC-BY-4.0)
@dataset{sniff_atlas_2026,
author = {Gehring, Matt},
title = {Sniff Atlas},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.20566358},
url = {https://sniff.world}
}
Code MIT · Data CC-BY-4.0 · world.sniff/sniff-mcp · https://sniff.world
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sniff_mcp-0.1.1.tar.gz.
File metadata
- Download URL: sniff_mcp-0.1.1.tar.gz
- Upload date:
- Size: 20.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b7b2078a7e0bff0c5f4c026f9a6c27ef5ab433eac1448666372cf21ad550473
|
|
| MD5 |
5c0c225388c9db6730730e7720101871
|
|
| BLAKE2b-256 |
2f498577cab23a1365b5e85c4bd645be0f138e214ea9b39d5ee5b37aa8cf3cbe
|
Provenance
The following attestation bundles were made for sniff_mcp-0.1.1.tar.gz:
Publisher:
release.yml on Sniffscore/sniff-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sniff_mcp-0.1.1.tar.gz -
Subject digest:
1b7b2078a7e0bff0c5f4c026f9a6c27ef5ab433eac1448666372cf21ad550473 - Sigstore transparency entry: 1741101466
- Sigstore integration time:
-
Permalink:
Sniffscore/sniff-mcp@d8cf5da08612b692d0a85ed64d0813c11a8ebe38 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Sniffscore
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8cf5da08612b692d0a85ed64d0813c11a8ebe38 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sniff_mcp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sniff_mcp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d176123d57a4f96fbcdd42310fb0ab8567671a6bb9194813254e1572011bf8d
|
|
| MD5 |
fee0590e9e01f1abb52b7e4c57e793e0
|
|
| BLAKE2b-256 |
70bc67bdd7e60d05515ac6aa716c8671b60345fe5fcb4f7c6ec147a3ab0492e0
|
Provenance
The following attestation bundles were made for sniff_mcp-0.1.1-py3-none-any.whl:
Publisher:
release.yml on Sniffscore/sniff-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sniff_mcp-0.1.1-py3-none-any.whl -
Subject digest:
4d176123d57a4f96fbcdd42310fb0ab8567671a6bb9194813254e1572011bf8d - Sigstore transparency entry: 1741101467
- Sigstore integration time:
-
Permalink:
Sniffscore/sniff-mcp@d8cf5da08612b692d0a85ed64d0813c11a8ebe38 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Sniffscore
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8cf5da08612b692d0a85ed64d0813c11a8ebe38 -
Trigger Event:
push
-
Statement type: