For agents
Let your agent check its own claims.
Connect over MCP and it can verify what it is about to tell you, against the source, before it says it.
An agent that summarises a paper is guessing at how faithful it is being. Connected to Pepiros, it does not have to guess: it calls verify_claim on its own sentences and gets back a tier, a match score, and the page the quote sits on.
The useful part is what happens when a claim fails. The agent finds out mid-answer, and can say so, rather than asserting it and leaving you to catch it later.
12 tools, live today
Search and read
list_papers(workspace_id)List the papers in a workspace with id, title, authors, year, and archetype.
search_paper(workspace_id, query, paper_id?, k?)Find chunks of paper text matching a query. Returns each chunk's stable citation id (e.g. C7), its page, and its verbatim text. Cite the returned ids -- never invent one.
get_outline(workspace_id)Compact text tree of the workspace: papers, their pillars, leaf titles, and evidence counts.
get_node(workspace_id, node_id)Fetch one node's body with its anchors resolved inline to quote, page, and deep link.
Verify and write
verify_claim(workspace_id, ref_id, quote, claim?)Deterministically check whether a quote actually appears in a cited chunk. Returns quote_located / paraphrase / unsupported, the match score, page, and the numeric-entailment result. Proves quotation provenance, not that the claim follows from the quote.
create_node(workspace_id, parent_id?, title, body_md, evidence[])Write a claim into the graph. Submitted evidence is ALWAYS re-verified server-side against the source: a quote that fails the fuzzy match or the numeric floor has its anchor dropped and the node is marked low-confidence. You cannot assert that a quote is located.
Audit
find_contradictions(workspace_id, concept?)Find claim pairs in this workspace that contradict each other. Only pairs where BOTH sides have a located quote are returned -- a one-sided contradiction is not evidence.
paper_facts(workspace_id, paper_id, kind)Structured facts about one paper: numeric_ledger (every extracted statistic with its N-ref) or coverage (how much of the paper's text is actually anchored by evidence).
Workspace and ingest
list_workspaces((none))List every workspace this server knows about, with id, name, and paper count.
create_workspace(name)Create a new, empty workspace and return its id -- ready for add_paper.
add_paper(workspace_id, url)Queue a paper (arXiv, PMC, or a direct PDF link) for ingest into a workspace. Returns a job id to poll with get_job. DOI links aren't resolvable yet.
get_job(job_id)Poll an ingest job's stage-by-stage progress and status.
Install
The server runs over stdio and works with Claude, Codex and Cursor today. From a clone of the repository:
npm run mcp:stdiopackage.json now has a real bin entry (pepiros-mcp) and a build:mcp script that bundles the tool layer to a single standalone file with esbuild --npx pepiros-mcp will work once the package is published. It is not published yet, so that one-liner is not live today. Remote HTTP with OAuth, for hosted connectors, is the next step after that rather than a shipped feature.
Tokens are managed in settings, and the tiers the tools return are explained on how it works.