openevidence-tools

openevidence-tools

Enables clinical question answering via OpenEvidence with citation verification, including tools to ask questions, retrieve results, and follow up, plus an integrated skill to check citations against primary sources.

Category
访问服务器

README

openevidence-tools

繁體中文版 → README.zh-TW.md

Two pieces that work together to use OpenEvidence as an evidence source you can actually trust:

  1. An MCP server that exposes OpenEvidence to any MCP client (Claude Code, etc.) as four tools — ask_openevidence, list_recent_oe_queries, fetch_oe_result, ask_oe_followup.
  2. The /oe-verify skill, which cross-checks every citation in an OE answer against primary sources and flags what OE left out.

Why both? OpenEvidence answers clinical questions fast, but it is a RAG pipeline (vector search + LLM synthesis), and its citations can be wrong even when the underlying claim is real. The classic failure is transitive citation: OE retrieves a chunk of a review's full text in which the review quotes another trial's number, then credits that number to the review itself. The claim is true; the attribution is false. Never absorb an OE answer unverified — that is the whole reason /oe-verify exists.


What the MCP server exposes

Tool Purpose
ask_openevidence(question, preserve_citations=False) Submit a new clinical question; returns evidence-based answer + citations. Auto-logs the article_id for recovery.
list_recent_oe_queries(limit=20) List recently-submitted queries (ts, article_id, question) — recover an article_id after an interrupted run.
fetch_oe_result(article_id, preserve_citations=False) Re-fetch a previously-submitted answer by ID. This is a GET and costs no question quota.
ask_oe_followup(parent_article_id, followup_question, preserve_citations=False) Drill down in the same conversation thread; OE expands the prior Q&A as context.

preserve_citations=True — the provenance channel /oe-verify consumes

With preserve_citations=True, the answer keeps its inline [N] markers and appends a ## Citation Data JSON block. Each entry carries the metadata the verifier needs — title, doi, pmid, journal, authors, publication_types, impact_score, recency_days, is_guideline, url, plus two provenance fields:

  • origin — the RAG corpus the cited chunk was retrieved from. OE ships this ROT-1 obfuscated (every byte shifted +1, so _ arrives as a backtick); the server decodes it, e.g. mbodfu`gvmmufyu`tdsbqfe`w3lancet_fulltext_scraped_v2.

  • origin_risk — a transitive-citation risk tier derived from origin:

    Tier Corpora Meaning
    HIGH *_fulltext_scraped_* (lancet, nejm, aan, …) Scraped review full text — the quoted sentence is often the review citing someone else's trial. This is OE's main failure mode.
    MEDIUM wiley_cdsr_fulltext (Cochrane), wiley_research_fulltext, guidelines_fulltext_*, media_annotated_gemini Publisher full text / AI-annotated figures — real chunks, still not necessarily the paper's own finding.
    LOW pubmed_abstracts_* Abstract-level; little room to mis-attribute.
    UNKNOWN no span metadata Provenance unavailable — treated as MEDIUM, never as LOW.

/oe-verify uses origin_risk to aim its attribution check: a HIGH/MEDIUM chunk backing a quantitative claim is the danger zone, and each such citation gets traced back to whether the number is really that paper's own finding.

One paper can legitimately hold several [N] indices — OE indexes per retrieved chunk, not per paper (observed: 10 indices over 7 papers). The server maps markers to citation objects positionally (the i-th [N] occurrence == the i-th citation object in document order) and, on any count mismatch, degrades explicitly rather than guessing.


The /oe-verify skill

A three-layer verification pass over one OE answer (skills/oe-verify/SKILL.md):

  • Step 0.5 — existence gate: every DOI is checked against CrossRef before any semantic work. A DOI that doesn't resolve is FABRICATED; no agent tokens are wasted on it.
  • Layer 1 — per-citation accuracy (parallel cheap agents): look each paper up in Semantic Scholar / PubMed, compare what OE claimed against what the source says, and — for HIGH/MEDIUM-provenance quantitative claims — run the attribution check that catches transitive citation.
  • Layer 2 — completeness (one stronger agent): anchor on the best recent systematic review / meta-analysis and ask what OE omitted, in both directions, plus an applicability check against your own practice context.
  • Layer 3 — internal contradiction scan: do the papers OE itself cited actually agree with each other? Only runs when ≥2 papers make quantitative claims on the same outcome.

The output is a compact Markdown report with a per-citation verdict table (✅ accurate, ⚠️ overstated, ❌ misrepresented, 🚫 fabricated, ↗️ transitive, 🔄 secondary-untraced, ❓ unverifiable) and an evidence-landscape summary.


Requirements

  • An OpenEvidence account (OpenEvidence is intended for clinicians). You log in yourself, in your normal browser.
  • A local browser-bridge daemon. The server does not scrape or spoof anything: it runs each OpenEvidence API call as a page-context fetch() inside your own already-logged-in openevidence.com browser tab, driven through a small local daemon that listens on 127.0.0.1. Every request therefore uses your own account and session — exactly what would happen if you clicked in the tab yourself. The reference implementation targets a daemon called kimi-webbridge (default endpoint http://127.0.0.1:10086/command); point OE_BRIDGE_URL at any daemon that speaks the same simple {action, args, session} JSON contract. OpenEvidence has no public API and its session cookie is httpOnly, which is why an in-tab fetch (rather than a plain HTTP client) is used at all.
  • Python 3.10+ and the deps in requirements.txt (mcp).

Configuration (environment variables)

Variable Default Purpose
OE_BRIDGE_URL http://127.0.0.1:10086/command Browser-bridge daemon endpoint.
OE_BRIDGE_BIN ~/.kimi-webbridge/bin/kimi-webbridge.exe Daemon binary to auto-start if it isn't running.
OE_DATA_DIR ~/.openevidence Where the query log and rate log are written.

Install

pip install -r requirements.txt

# Register with an MCP client, e.g. Claude Code:
claude mcp add openevidence -- python /path/to/openevidence-tools/mcp/server.py

# Put skills/oe-verify/ where your client discovers skills.

Log into openevidence.com in your normal browser and make sure your browser-bridge daemon is running; the server will open/reuse an OpenEvidence tab as needed.


Responsible use

  • Your own account, your own session. This tool automates your logged-in browser tab. Use it only with an account you are entitled to use, and follow OpenEvidence's terms of service.
  • Respect the quota. OpenEvidence's account quota is roughly 100 questions/hour, and only new questions and follow-ups spend it (re-fetching a prior answer is free). The server enforces a built-in courtesy rate limiter (sliding window + concurrency cap) that stays conservative on purpose — don't raise it to hammer the service.
  • Verify before clinical use. Run /oe-verify (or otherwise check the primary sources) before you rely on an OE answer. That is the entire point of this repo.
  • Not medical advice. These tools help a clinician evaluate evidence; they do not replace clinical judgment, and their output is not medical advice.

Credit where it's due — htlin222

This project started independently: I wanted OpenEvidence answers to flow into my note-writing workflow, and the first version drove the site with my own browser automation. That version died to bot detection, and it was while looking for a way forward that I found Hsieh-Ting Lin (htlin222)'s work. Much of what this repo does well now comes from his more recent updates, and it is worth being specific about what came from where.

From audit-oe-skill (MIT) came the core insight this whole repo is built around: that OpenEvidence's origin field is ROT-1 obfuscated, that it names the RAG corpus a chunk was retrieved from, and that the corpus therefore predicts how likely the citation is to be mis-attributed. He also named the failure mode — transitive citation, where a review quotes another trial's number and OE credits the review — and built the verification architecture we adopted: one cheap agent per citation in parallel, a trace-back stage for quantitative claims in review full text, and a single stronger agent scanning the cited papers for contradictions with each other, graded CRITICAL / WARNING / NOTE. Our origin_risk tiers are his risk table; our Layer 1 and Layer 3 are his Phase 3 and Phase 4. When you read our verification report, most of the questions it asks are his questions.

From openevidence-mcp (Apache-2.0) came the transport idea that got us unstuck: OpenEvidence has no public API and an httpOnly session cookie, so don't scrape it — run the call inside the clinician's own already-logged-in browser tab. Our implementation is our own (and drives a different daemon), but the direction was his.

We wrote our own tool layer rather than forking, for a practical reason: our verifier needs publication_types, impact_score, recency_score, is_guideline and per-chunk origin returned through the MCP contract itself, and we drive a general-purpose browser daemon rather than a dedicated extension. We also added a completeness layer his skill doesn't have (what did OE omit?), a CrossRef existence gate, and a marker↔citation index mapping our architecture needs and his does not. Those are additions to his foundation, not a replacement for it.

skills/oe-verify/ is derived from audit-oe-skill, MIT © 2026 Hsieh-Ting Lin; see NOTICE. Thank you, Hsieh-Ting.

Works with textbook-to-note

/oe-verify is designed to plug into the textbook-to-note note-writing workflow as its optional evidence-enrichment stage: when a note's management/treatment section needs current guidance, ask_openevidence fetches it and /oe-verify gates it before it enters the note. Standalone use — just asking OE questions and verifying the answers — is equally fine.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选