For agents
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.
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_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.
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).
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.
Published on npm as pepiros-mcp -- point Claude, Codex, or Cursor at it directly, no clone required:
npx -y pepiros-mcpA remote streamable-HTTP transport with OAuth 2.1 (dynamic client registration, PKCE) is also live, for hosted connectors that can only reach a URL rather than spawning a local process.
Tokens are managed in settings, the tiers the tools return are explained on how it works, and the docs page has the fuller setup reference -- working from a clone, the exact config block for each client, and the remote connector flow.