Replication Radar
# Replication Radar
<!-- mcp-name: org.sciencelive4all/replication-radar -->
[](https://doi.org/10.5281/zenodo.21850976) [](https://pypi.org/project/replication-radar/)
### π Live demo β **https://openaire-hackathon.netlify.app**
### βΆ Watch the 3-min demo β **https://youtu.be/hVyLafY3Y3E** Β· reproduce it step by step β **https://openaire-hackathon.netlify.app/demo.html**
A tool that **makes the OpenAIRE Graph more useful for replication.** Search a research
field and it answers the question the Graph structurally cannot: *what high-impact work
is worth replicating, has it already been independently checked β with what verdict β and
is the software reusable?*
Ships as a **live web app** (the link above β pure static, queries OpenAIRE + the nanopub
network + GitHub/Software Heritage from the browser) **and** an **MCP server** (this package)
that exposes the same engine to any agent. Built for the OpenAIRE AI Hackathon (Theme B), CC-BY.
OpenAIRE's only value signal is citation-popularity (BIP! influence / popularity /
impulse, classes C1βC5) β paper-bound, and orthogonal to whether a claim is *true*.
The Radar joins three sources to add a **replication layer** on top:
- **OpenAIRE Graph** β impact-ranks candidate papers (`api.openaire.eu/graph/v1`).
- **Software Heritage + repo signals** β surfaces *reusable* method software.
- **Science Live nanopub verdicts** β the "already checked β did it hold" overlay.
> OpenAIRE AI Hackathon Β· Theme B (Build) Β· CC-BY. Built to be reused through the
> [forrt-replication-template](https://github.com/ScienceLiveHub/forrt-replication-template):
> discovery at the *start* of a replication, where the template's existing skills
> handle the nanopub chain at the *end*.
## Tools
| Tool | What it answers |
|---|---|
| `radar(topic)` | Impact-ranked replication targets in a field β each **OPEN** (opportunity) or **VERIFIED** (done, with verdict) + independent tooling + funder context |
| `find_independent_software(doi, topic)` | Reusable engines **not authored by the original team** (author-disjoint = *replication*, not *reproduction*), ranked by reuse signal β repo Β· Software Heritage Β· downloads Β· **GitHub stars** β not citations (returns `stars` + `rank_score`) |
| `replication_status(doi)` | Has this DOI been replicated, did it hold? Verdict(s) β **live from the nanopub network, any signer** β with status, CiTO relation, repo, and signed Outcome/CiTO nanopub links; `open` if not |
| `verified_claims()` | The whole **verified-knowledge corpus** β every claim the network holds a verdict for (author-agnostic) |
| `replication_template(doi, topic, owner)` | The **FORRT replication template** (the *produce* half) β the [scaffold repo](https://github.com/ScienceLiveHub/forrt-replication-template), the workflow, and a suggested `<topic>-replication` repo name (checks availability under `owner`) |
| `find_dataset(topic)` | **Hand-off to the OpenAIRE MCP** for datasets β replication-radar doesn't search datasets; this says how to find a citable dataset DOI there |
The verdict tools pull **live** from the nanopub network (the FORRT Outcome/CiTO templates on
`query.knowledgepixels.com`); the bundled `verdicts.json` is an offline fallback. So the MCP is the
**verified-knowledge layer** β pair it with the OpenAIRE MCP and an agent has both the structural
Graph *and* "has this been checked, and did it hold".
### The reproduction-vs-replication distinction, made computable
A *reproduction* re-runs the original code; a *replication* tests the same claim by a
**different** route. So the Radar filters tooling by **author-disjointness** from the
original paper β e.g. for Phillips et al. 2009, the `dismo` package (co-authored by
Phillips & Elith) is flagged *rooted* / non-independent, while `biomod2` and `jSDM`
are *independent*. That filter is the difference between the two, and it's the thing
that makes this replication-aware rather than just "find the code".
## Run
```bash
pip install -e . # installs the `mcp` runtime
python -m replication_radar.server # stdio MCP server
```
Add to an MCP client (`.mcp.json`):
```json
{ "mcpServers": {
"replication-radar": { "command": "python", "args": ["-m", "replication_radar.server"] }
} }
```
The **core** (OpenAIRE client + radar logic) is stdlib-only β try it without the MCP
runtime:
```bash
PYTHONPATH=src python3 demo_sdm.py # live vertical-slice demo on SDM
```
## Configuration
| Env var | Default | Purpose |
|---|---|---|
| `RADAR_OPENAIRE_BASE` | `https://api.openaire.eu/graph/v1` | Swap to the Alien AI-Gateway or a mirror β the Radar is endpoint-agnostic |
| `RADAR_HTTP_TIMEOUT` | `30` | Per-request timeout (s) |
## Known limits (v1, honest)
- **Keyword-bound discovery.** OpenAIRE free-text terms are AND-ed; long queries
return nothing. Use short topics. The VERIFIED overlay is *guaranteed* (resolved
from the verdict index directly), but OPEN-target recall depends on the query.
- **No graph-relation traversal** on the public API (paperβits software/data/grant
edges aren't exposed): tooling/data are matched heuristically by topic + author
independence, not by a hard relation. Upgrades cleanly if a gateway exposes relations.
- **Funder context is field-level, not per-paper** (per-paper funder attribution is
not reachable); budgets are frequently reported as 0 in records.
- The verdict index ships 6 source works / 12 chains (Science Live). Extend
`data/verdicts.json` to grow coverage.
```
TDQS
Scored across 6 tools
Each tool targets a distinct aspect of the replication workflow: radar discovers papers to replicate, find_independent_software locates reusable software, replication_status checks whether a specific DOI has been verified, verified_claims lists all verified claims, replication_template provides the production template, and find_dataset delegates to another MCP. No two tools overlap in purpose.
Naming patterns are inconsistent: 'radar' is a noun command, while others use verb_noun (find_*), noun phrases (replication_status, replication_template), and adjective_noun (verified_claims). There's no consistent verb convention across the set.
Six tools cover the discovery, status, software, dataset, template, and verified-claims aspects of replication without redundancy. Neither sparse nor bloated.
Covers the full discovery-to-production loop: targets (radar), verification status (replication_status), verified claims list, software and dataset finding, and the actual replication template. The dataset handoff is an intentional delegation to another MCP, not a gap.