Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,41 @@ dominant client re-reads the schema each session. Only a removal/rename is MAJOR

_Nothing yet._

## [2.3.0] - 2026-07-31

<!-- whatsnew: 2026-07-31 | New database: the <strong>NHGRI-EBI GWAS Catalog</strong> — 955,930 SNP–trait associations across 89,981 studies, with p-values, effect sizes, risk alleles and mapped genes, joinable to EFO trait terms. Ask things like "which variants are associated with QT interval, and how strong is the evidence?" -->

### Added

- **`gwascatalog` — the NHGRI-EBI GWAS Catalog, the 37th database.** Published genome-wide
association results: 955,930 SNP–trait associations (801,096 at genome-wide significance) over
444,106 SNPs, 89,981 studies and 11,017 EFO traits. It sits on the `ebi` endpoint we already talk
to, so this is a registry row plus an MIE — no new infrastructure.
Picked from the production tool-call log rather than by guesswork: with the ~94% of traffic that is
a load-test harness and one automated pipeline filtered out, the largest remaining usage cluster is
disease-variant work chaining `clinvar` → `togovar` → `medgen` → `mondo` → `hco` → `hgnc`, and
trait association is the layer that thread was missing.
The MIE ships 10 live-verified examples (4 basic, 3 intermediate, 2 aggregation, 1 cross_db) and
documents three traps an agent cannot recover on its own. **The two vocabularies in the graph store
string literals in opposite term forms** — `gwas:has_snp_reference_id` needs `^^xsd:string` while
`m2r:snps` needs the plain form, and `DATATYPE()` reports `xsd:string` for both, so only an `ASK`
tells them apart; getting it backwards returns 0 rows silently. **Two parallel association models**
coexist: 955,930 med2rdf blank-node `Association`s carrying the flat row, versus 782,879
IRI-addressable OBAN `TraitAssociation`s — different populations, and mixing them double-counts.
And **`?s a gwas:Study` returns 224,583 across two disjoint IRI families**, of which only 89,981 are
real GCST study records; the rest are EBI `Trackable/*` publication stubs.
Trait labels live only in the co-hosted `ontology/efo` graph, so the `cross_db` example is the
route to trait names, not a nicety.

### Changed

- Adding a database is now documented as touching **five** files, not one: `endpoints.csv`, the MIE,
the regenerated `02b_database_catalog.md`, the **hand-written** endpoint table in
`02_budgets_and_discovery.md` (no generator touches it — two `TestUsageGuideEndpointTable` tests
are what catch a miss), and the intro page's database grid. The README's **Contributing** section
now lists all five with the guarding test for each; it previously said two, which is how three of
them got missed on the first pass of this very release. A *removal* really is just the registry row.

## [2.2.1] - 2026-07-30

### Added
Expand Down Expand Up @@ -751,7 +786,8 @@ their own file. No tool-surface change; the served MIE/guide content is correcte
_MIE database onboarding and revisions land continuously and are summarised per
release above; see git history for the full detail._

[Unreleased]: https://github.com/dbcls/togomcp/compare/v2.2.1...HEAD
[Unreleased]: https://github.com/dbcls/togomcp/compare/v2.3.0...HEAD
[2.3.0]: https://github.com/dbcls/togomcp/compare/v2.2.1...v2.3.0
[2.2.1]: https://github.com/dbcls/togomcp/compare/v2.2.0...v2.2.1
[2.2.0]: https://github.com/dbcls/togomcp/compare/v2.1.3...v2.2.0
[2.1.3]: https://github.com/dbcls/togomcp/compare/v2.1.2...v2.1.3
Expand Down
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ TogoMCP exposes tools for querying the following (via SPARQL or REST APIs):
| Category | Resources |
|---|---|
| Proteins / Proteomics | UniProt, PDB, jPOST |
| Genes / Genomics | NCBI Gene, Ensembl, HGNC, OMA, Bgee, HCO, MCO, DDBJ, MoG+, TogoVar |
| Genes / Genomics | NCBI Gene, Ensembl, HGNC, OMA, Bgee, HCO, MCO, DDBJ, MoG+, TogoVar, GWAS Catalog |
| Chemistry | ChEMBL, PubChem, ChEBI, Rhea, BRENDA, MassBank |
| Pathways | Reactome |
| Disease / Clinical | ClinVar, MedGen, MONDO, NANDO |
Expand Down Expand Up @@ -232,7 +232,15 @@ togomcp/

Contributions are welcome!

**Adding a database**: add an MIE file under `togo_mcp/data/mie/` and a corresponding row in `togo_mcp/data/resources/endpoints.csv` (see the MIE spec in `togo_mcp/data/docs/`).
**Adding a database**: five places, not two. Only the first two affect what the server *validates*; the rest are documentation surfaces that drift silently, and the tests are what catch them.

1. `togo_mcp/data/resources/endpoints.csv` — the registry row (this alone decides valid `database=` values).
2. `togo_mcp/data/mie/<db>.yaml` — the MIE file (see the MIE spec in `togo_mcp/data/docs/`).
3. `uv run python scripts/generate_usage_guide_catalog.py` — regenerates the Usage Guide's database catalog. Guarded by `tests/test_catalog_in_sync.py`.
4. `togo_mcp/data/resources/usage_guide_v6/02_budgets_and_discovery.md` — a **hand-written** copy of the registry that no generator touches. Bump the per-endpoint count *and* add the key. Guarded by `TestUsageGuideEndpointTable` in `tests/test_server.py`.
5. `togo_mcp/data/docs/togomcp-intro.html` — add a card to the database grid (not generated).

Note that a database *removal* really is just step 1: nothing validates against the other four.

**Adding a tool**: pass `annotations=READ_ONLY_TOOL` to the `@mcp.tool` decorator. Every TogoMCP tool is read-only, and MCP's default for an *unannotated* tool is the unsafe one — clients such as ChatGPT treat a tool with no `readOnlyHint` as a write action, which means a confirmation prompt on every call. A test asserts this, so omitting it fails the build.

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ togo_mcp = [

[project]
name = "togo-mcp"
version = "2.2.1"
version = "2.3.0"
description = "MCP Servers for using the RDF Portal"
authors = [
{name = "Akira R. Kinjo"},
Expand Down
12 changes: 8 additions & 4 deletions togo_mcp/data/docs/togomcp-intro.html
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,10 @@ <h2 class="section-title">What's New</h2>
</div>
<ul class="whatsnew-list">
<!-- WHATSNEW:START -->
<li>
<span class="whatsnew-date">2026-07-31</span>
<span>New database: the <strong>NHGRI-EBI GWAS Catalog</strong> — 955,930 SNP–trait associations across 89,981 studies, with p-values, effect sizes, risk alleles and mapped genes, joinable to EFO trait terms. Ask things like "which variants are associated with QT interval, and how strong is the evidence?"</span>
</li>
<li>
<span class="whatsnew-date">2026-07-30</span>
<span>Drug lookups in ChEMBL now find <strong>biologics</strong> — antibodies, therapeutic proteins, vaccines and cell therapies were silently missing, so names like <em>Rituxan</em> or <em>efalizumab</em> returned nothing. A new <code>mode='extract'</code> also resolves the drugs named inside a clinical-trial intervention string such as "Ropivacaine 10% + Clonidine".</span>
Expand All @@ -783,10 +787,6 @@ <h2 class="section-title">What's New</h2>
<span class="whatsnew-date">2026-07-17</span>
<span>Query results are more trustworthy: <code>get_MIE_file</code> now leads with each database's "traps" (mandatory filters, namespace pitfalls, and shared-graph count inflation), and all 36 databases document cross-graph co-tenancy so counts aren't silently inflated.</span>
</li>
<li>
<span class="whatsnew-date">2026-07</span>
<span>Published in <em>Database</em> — <a href="https://doi.org/10.1093/database/baag042" target="_blank" rel="noopener">2026:baag042</a>.</span>
</li>
<!-- WHATSNEW:END -->
</ul>
<p class="whatsnew-more"><a href="https://github.com/dbcls/togomcp/blob/main/CHANGELOG.md" target="_blank" rel="noopener">Full changelog →</a></p>
Expand Down Expand Up @@ -1121,6 +1121,10 @@ <h2 class="section-title">Available Databases</h2>
<div class="db-card-name">MoG+ (Mouse Genomes plus)</div>
<div class="db-card-desc">Genome-wide sequence variation across 62 inbred and wild-derived mouse strains on the GRCm39 assembly: ~146M variants (SNVs and indels) with per-strain genotypes, Ensembl VEP and SnpEff functional consequences, and Ensembl gene-overlap links.</div>
</div>
<div class="db-card">
<div class="db-card-name">GWAS Catalog</div>
<div class="db-card-desc">NHGRI-EBI catalog of published genome-wide association studies: 955,930 SNP–trait associations (801,096 at genome-wide significance) across 89,981 studies and 444,106 SNPs, with p-values, effect sizes, risk alleles, mapped genes, and 11,017 EFO trait terms joinable to the co-hosted EFO ontology.</div>
</div>
<div class="db-card">
<div class="db-card-name">TogoVar</div>
<div class="db-card-desc">Integrated human genome variation database (GRCh38): ~390M variants (SNV, deletion, insertion, MNV, indel) with normalized/VCF coordinates, Ensembl-VEP consequences (SIFT/PolyPhen/AlphaMissense, HGVS), dbSNP and HGNC/Ensembl gene links, and an embedded ClinVar annotation layer. Per-population allele frequencies are served via the TogoVar REST API tools.</div>
Expand Down
Loading
Loading