{
  "markdown": "# sniff-mcp — agent-callable canine genomics\n\n[![PyPI](https://img.shields.io/pypi/v/sniff-mcp)](https://pypi.org/project/sniff-mcp/)\n[![npm](https://img.shields.io/npm/v/sniff-mcp)](https://www.npmjs.com/package/sniff-mcp)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-world.sniff%2Fsniff--mcp-6E40C9)](https://registry.modelcontextprotocol.io)\n[![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20566358-1f7a1f)](https://doi.org/10.5281/zenodo.20566358)\n[![Data: CC-BY-4.0](https://img.shields.io/badge/data-CC--BY--4.0-lightgrey)](https://creativecommons.org/licenses/by/4.0/)\n\n**The reference layer for dog DNA.** A live, open API + [MCP](https://modelcontextprotocol.io) 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.**\n\n> 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.\n\n- 🔌 **MCP endpoint:** `https://mcp.sniff.world/mcp/` (Streamable HTTP, 15 tools) — including **`ask`**, a grounded canine-genetics Q&A that answers **only from cited data or honestly abstains** (no hallucinated dog-health advice), and **`disease_bridge`** (inherited-disease atoms with ACMG-style pathogenicity grades + the dog⇄human homolog)\n- 🌐 **REST API:** `https://api.sniff.world/` ([OpenAPI docs](https://api.sniff.world/docs) · [`llms.txt`](https://api.sniff.world/llms.txt))\n- 📚 **Dataset:** [10.5281/zenodo.20566358](https://doi.org/10.5281/zenodo.20566358) (CC-BY-4.0)\n\n---\n\n## Add it to your coding agent (copy-paste)\n\nThe hosted server is open and needs no auth. Pick your tool:\n\n**Claude Code**\n```bash\nclaude mcp add --transport http sniff https://mcp.sniff.world/mcp/\n```\n\n**Cursor / Windsurf / VS Code** — add to your MCP config (`.cursor/mcp.json`, `mcp.json`, etc.):\n```json\n{\n  \"mcpServers\": {\n    \"sniff\": { \"url\": \"https://mcp.sniff.world/mcp/\" }\n  }\n}\n```\n\n**Claude Desktop** or any stdio-only client (uses the hosted server via a local bridge):\n```json\n{\n  \"mcpServers\": {\n    \"sniff\": { \"command\": \"npx\", \"args\": [\"-y\", \"sniff-mcp\"] }\n  }\n}\n```\n\nThat's it. Ask your agent: *\"What's the frequency of CPT2 5:56189113 across breeds?\"* or *\"Find HIGH-impact variants in DLA genes.\"*\n\n---\n\n## Use the REST API (for web apps)\n\nNo SDK needed — it's plain HTTP/JSON.\n\n```bash\ncurl https://api.sniff.world/v1/variant/5:56189113\n```\n```jsonc\n{\n  \"variant_id\": \"5:56189113\", \"ref\": \"A\", \"alt\": \"G\",\n  \"global_af\": 0.0185, \"popmax_af\": 0.591, \"popmax_breed\": \"akita\",\n  \"consequence\": \"missense_variant\", \"impact\": \"MODERATE\",\n  \"gene\": \"CPT2\", \"esm2_llr\": -6.1, \"deleteriousness_tier\": \"...\",\n  \"provenance\": { \"dataset_doi\": \"10.5281/zenodo.20566358\",\n                  \"predicted_disease_relevance\": \"UNPROVEN\", \"...\": \"...\" }\n}\n```\n\n```js\n// JavaScript / TypeScript\nconst r = await fetch(\"https://api.sniff.world/v1/variant/5:56189113/context?breed=akita\");\nconst ctx = await r.json(); // frequency + pathogenicity + gene + cross-breed + provenance\n```\n\n| Endpoint | What it returns |\n|---|---|\n| `GET /v1/variant/{pos}` | single variant: AF, popmax, consequence, gene, ESM2/Pangolin/phyloP |\n| `GET /v1/variant/{pos}/context` | **the joined query** — everything about a variant in one call |\n| `GET /v1/breed/{breed}` | breed profile (top variants, geometry, nearest breeds) |\n| `GET /v1/breed/{breed}/nearest` | genetically nearest breeds (PCA distance) |\n| `GET /v1/gene/{symbol}` | variants in a gene, ranked by impact |\n| `GET /v1/semantic?q=` | natural-language search (\"ancient arctic sled dogs\") |\n| `GET /v1/search` | filtered discovery across all 9.67M variants |\n| `GET /v1/metadata` | release, DOI, counts, scope banner |\n\nPositions are **CanFam4** `chrom:pos` (e.g. `5:56189113`). Full schema: **https://api.sniff.world/openapi.json**.\n\n---\n\n## Self-host (optional)\n\n```bash\nuvx sniff-mcp          # run the MCP server locally (needs the release data on disk)\npip install sniff-mcp  # or install into your env\n```\nSee [`ARCHITECTURE.md`](ARCHITECTURE.md) and [`Dockerfile`](Dockerfile). The hosted endpoint is the easy path; self-hosting is for air-gapped or high-volume use.\n\n---\n\n## What it is (and isn't)\n\nBuilt from [CanVAS](https://doi.org/10.5281/zenodo.19186944) (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.\n\n## Citation\n\n> Gehring, M. (2026). *Sniff Atlas.* Zenodo. https://doi.org/10.5281/zenodo.20566358 (CC-BY-4.0)\n\n```bibtex\n@dataset{sniff_atlas_2026,\n  author    = {Gehring, Matt},\n  title     = {Sniff Atlas},\n  year      = {2026},\n  publisher = {Zenodo},\n  doi       = {10.5281/zenodo.20566358},\n  url       = {https://sniff.world}\n}\n```\n\n**Code** MIT · **Data** CC-BY-4.0 · world.sniff/sniff-mcp · https://sniff.world\n",
  "bytes": 5338,
  "sha": "a4cf244c29e5549588683647eae5d31765cd83b7e2416b5ce5935e9796bb205b",
  "repo_slug": "sniffscore/sniff-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_world_sniff_sniff_mcp_7e92eb9d/readme"
}