Explain why two scientific papers disagree, every claim grounded in a verbatim source quote.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Understand why two scientific studies reach different conclusions β
with every claim verified against the source.
Live demo Β· Quick start Β· How it works Β· Examples Β· MCP server Β· Roadmap Β· Contributing
Two well-run papers often reach opposite conclusions. Usually the reason isn't that one is wrong β it's a methodological difference (a cell type, a dose, a follow-up window, an analysis choice) that a reader has to dig out of the methods sections by hand. StudyDiff does that digging. Give it two studies and it extracts each one's design, surfaces the differences that could explain the disagreement, and β critically β grounds every statement in the source text, so it never invents a finding.
It is built for a bench scientist deciding which of two conflicting papers to trust before planning an experiment.
Most "AI literature" tools generate a fluent answer and ask you to trust it. StudyDiff inverts that:
StudyDiff used to rank the divergent design dimensions and present the top one as the likely driver of a disagreement. We built a benchmark to test that, and it doesn't work.
15 documented contradictions where the literature has since established why the papers disagreed β each label carrying its own citation, the set built blind before any accuracy number existed. Scored against StudyDiff's top-ranked driver:
The ranking was a fixed prior (DRIVER_RANK in src/compare.mjs) in which assay
outranks everything. Two papers almost always use somewhat different methods, so assay
almost always diverges, so it was picked 13 times out of 15 β and the two hits are exactly
the two assay-labelled cases. It is not merely as good as guessing a constant; it is
behaviourally identical to it on every case in the set.
Fixing grounding first (Phase 2) removed that excuse. Recovering 20 of 26 false-positive rejections doubled the oracle ceiling from 33% to 67% β the established cause is now an available candidate in 10 of 15 cases instead of 5 β and top-1 accuracy did not move at all. The ranker was handed the right answer five more times and took none of them.
What changed as a result: the app no longer nominates a primary driver. It presents the divergent dimensions as an unranked list, because that list is informative (it contains the established cause 10 times in 15) while the ordering is not. Choosing among them needs domain knowledge the tool doesn't have.
What still holds: which dimensions differ, which are identical (ruled out), and the verbatim sentence behind every value. None of that depends on the ranking.
Those 15 cases had by then been read across two phases β failures analysed, spans re-audited β so every post-fix figure from them is development-set accuracy, not a blind measurement. So we built a second set and measured it once.
eval/cases-heldout.json is 15 further documented contradictions, curated to a protocol written
and committed before any case was selected (eval/HELDOUT-PROTOCOL.md),
by a curator kept blind to the dev set's per-case failures, in deliberately different fields:
microbiome, marine ecology, toxicology, psychology, critical care, oncology, infectious disease.
No paper and no contradiction is shared with the dev set β selftest enforces that mechanically.
On unseen data the prior scores below the constant guess β by exactly one case. The intervals
overlap almost entirely and the two strategies disagree on 1 of 15, so the honest statement is
that it remains indistinguishable from guessing assay every time, not that it is worse.
The line that does not move is the last one. Across both sets, 25 cases where the established
cause was something other than assay, the prior identified none of them. And the ceiling here
is higher than on the dev set β 73.3% against 66.7% β so extraction put the right answer in
front of the ranker more often, and it was taken no more often. That is the Phase 1β2 conclusion
reproduced on data the development loop never saw, which is the only way it could have been
strengthened.
The number is reported as-is, and is never pooled with the dev-set number: summing them into an
"n=30" figure would relaunder read data as blind data. Nothing in src/ was changed on the basis
of it. The set was fetched once on a single pre-registered arm, but the scoring was not one clean
pass β the first run reported n=14 after one paper failed to fetch, and the full set was scored
after retrieving it. Both figures, the sixteen defects an adversarial verification pass found and
corrected before any scoring, and the reasoning behind each label are recorded in the file's own
provenance block rather than summarised away.
Full method, the pre-registered decisions, and every prediction that turned out wrong:
eval/README.md and eval/PHASE2.md. The benchmark
sets are eval/cases.json (development) and
eval/cases-heldout.json (held-out).
eval/cache/ and eval/cache-heldout/ are committed on purpose. They aren't build output,
they're evidence: the published numbers are reproducible from artefacts in the repo rather than
taken on faith.
Under 60 seconds, no API key, no network:
Run the web app:
The built-in examples run on cached data and need no key. To compare live, add your key and use the PMID / DOI, Upload PDF, or Paste inputs.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/studydiff)<a href="https://allmcps.com/mcp/studydiff"><img src="https://allmcps.com/api/badge/studydiff?style=directory" alt="Studydiff on AllMCPs" /></a>