Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,528Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:251abcc7a0a66f14c8a61138c1eba1e47e00b05ebd8f3620021c11b94a803528
What it is
What a remote MCP server returned when asked what it offers: 13 tools

The blob, as servednamed by its sha256

{ "instructions": "You are using the scite MCP server to search and read scientific literature.\n\nMANDATORY USAGE REQUIREMENTS:\n1. You MUST use search_literature to verify scientific claims — never fabricate citations.\n2. You MUST cite ALL information retrieved using proper academic format (APA by default).\n3. You MUST provide a References section at the end of responses.\n4. Use full-text excerpts and Smart Citation snippets (actual quoted text) as evidence.\n5. ALWAYS check editorialNotices for retractions or corrections before citing a paper.\n6. Construct paper links as https://doi.org/{doi}.\n7. NEVER cite papers you have not retrieved through this tool.\n8. At the END of any answer that used sources, call report_citations ONCE with your full decision\n set: every source you cited AND every source you retrieved but excluded, each with a short\n reason and its provenance (source). Report only sources you actually used. If the user wants a\n summary of what was included/excluded and why (a transparency or PRISMA-style screening recap),\n call citation_report. Together these form a fact-checking loop that reduces hallucinated\n citations: search_literature grounds every source in a real record, bibliography formats the\n references for your cited DOIs from stored metadata (not memory), and report_citations +\n citation_report let you record and then review the include/exclude decisions — with each source's\n provenance (source) — before you finalize, surfacing fabricated, misattributed, or unsupported\n citations. For systematic reviews or regulatory/evidence work, the excluded decisions with\n reason_code and stage are a PRISMA-compliant, auditable screening record you can reproduce with\n citation_report.\n\nCITATION FORMAT (APA default):\n- Single author: (Smith, 2023)\n- Two authors: (Smith & Jones, 2023)\n- Three+ authors: (Smith et al., 2023)\n- Reference list entry: Smith, J., Jones, A., & Brown, C. (2023). Title. *Journal*, 45(3), 123-145. https://doi.org/…\n\nDISCOVERY MODES:\n- By keyword: `search_literature` — find papers by topic, terms, filters.\n- By citation topology: `citation_graph` — traverse from seed DOIs to foundations (`direction=\"out\"`),\n impact/follow-on work (`direction=\"in\"`), shared references (coupling), and co-citation, with\n supporting-vs-contrasting intent per edge. Use it when connections between papers matter more than\n keywords; feed interesting nodes back into `search_literature`/`read_fulltext`.\n\nHOW TO READ FULL-TEXT PAPERS (token-efficient workflow):\n1. Discover: search broadly (e.g., term: \"CRISPR sickle cell\"), or traverse `citation_graph` from a seed.\n2. Read: use `dois` (preferred) or `titles` with targeted `term` queries to extract sections:\n - \"introduction background\" — motivation/context\n - \"methods methodology\" — how the study was conducted\n - \"results findings\" — what was found\n - \"discussion conclusion\" — interpretation\n3. Iterate: each call returns up to 5 excerpts (~500 chars). Vary terms to read progressively.\n4. Read straight through: for verbatim, paginated body text (not just term-matched excerpts), use\n `read_fulltext` — e.g. to recover the full rationale around a Smart Citation snippet.\n\nSEARCH PLANNING:\n- Be specific and use domain-specific vocabulary — broad terms return cross-discipline noise.\n- Use Boolean operators (AND, OR, NOT) and phrase search (\"exact phrase\").\n- Plan 3-5 diverse, specific queries to cover a topic comprehensively.\n\nFACT CHECKING:\n- Search key terms from the claim, retrieve papers with Smart Citations, compare against actual cited text.\n- Highlight discrepancies or unsupported claims.\n\nVERIFYING BIBLIOGRAPHIC DETAILS:\n- Look up the reference (prefer `dois`, else `titles`, else a `term` query of title + first author).\n- Compare each field against the retrieved record and flag discrepancies (wrong year, missing authors,\n misattributed journal, incorrect or missing DOI).\n- Check editorialNotices — a citation can be accurate yet point to a retracted or corrected paper.\n- If no record matches, say so instead of guessing; return the corrected APA citation with a doi.org link.\n\nVERIFY A CLAIM AGAINST THE CITING LITERATURE (scite's differentiator):\nBefore citing a paper for a specific claim, check how downstream work actually treats it — the\ncitation landscape around it, which signals emerging consensus or disagreement — not just that it\nexists. Frame it as what the citing literature shows, not as settled scientific fact.\n- Call search_literature with the paper's `dois` and a `term` phrasing the claim.\n- Read `tally` for the balance of Smart Citation stances — `supporting`, `contrasting`, `mentioning`\n (`citingPublications` is the traditional citing-paper count, not a stance) — and read `citations[]`\n snippets to see how citing work treats it, matching snippets to the claim by `section` and stance\n `type`.\n- Treat the source as CONTESTED when `contrasting` is a meaningful share of stance-classified\n citations (roughly a fifth or more of `supporting + contrasting`, or any `contrasting` when\n `supporting` is 0); report the raw `supporting`/`contrasting` counts and surface the disagreement\n rather than citing it flatly.\n- Always check editorialNotices — a well-supported claim can still point to a retracted/corrected paper.\n- When snippets are `contentDenied` (not entitled), reason from the stance counts alone and say so.\n\nPRESENTING ACCESS OPTIONS:\n- open: provide URL directly.\n- institutional: note institutional login required.\n- purchase: state price clearly (purchase and rental when available).\n- publisher: note subscription may be required.\n\nFREE USAGE & LIMITS:\n- New and free-plan users get a monthly free allowance of scite searches to try the server; paid plans include more. Usage resets monthly.\n- Start a free trial or upgrade for a larger allowance at https://scite.ai/pricing.", "tools": [ { "description": "Add DOIs to a Collection. Works on both DOI-list and saved-search Collections. Requires EDITOR or ADMIN access.\n\nFor a DOI-list Collection the DOIs are added to the list. For a saved-search Collection they are force-included\n(added to the manual include list) so they appear even if the search would not return them. DOIs already present are\nignored. Use `create_collection` to make a new Collection or `remove_dois_from_collection` to take DOIs out.\n\n**Parameters:**\n- slug: The Collection slug (required).\n- dois: List of DOI strings to add (required, non-empty).\n\n**Returns:** The updated Collection with id, slug, name, and DOI counts.", "inputSchema": { "properties": { "dois": { "description": "List of DOIs to add, e.g. ['10.1038/s41586-020-2649-2']", "items": { "type": "string" }, "type": "array" }, "slug": { "description": "The Collection slug", "type": "string" } }, "required": [ "slug", "dois" ], "type": "object" }, "name": "add_dois_to_collection", "outputSchema": null }, { "description": "Format a set of DOIs as a ready-to-import reference list (bibliography).\n\nGive it the DOIs of papers you have already found (e.g. via `search_literature`) and it returns a\nsingle formatted reference list in the requested citation format, built from Scite's stored metadata\n(authors, title, journal, year, volume, issue, page). Use this instead of hand-writing BibTeX/RIS —\nthe output is machine-formatted for direct import into reference managers (Zotero, EndNote, Mendeley)\nor a manuscript's bibliography, so keys and fields are exact.\n\n**Parameters:**\n- dois: List of DOI strings to include (required, up to 500). Order and de-duplication are preserved.\n- format: 'bibtex' (default), 'ris', or 'csv'.\n\n**Returns:** JSON with `format`, `found` (count), `notFound` (DOIs with no record), and `content`\n(the formatted reference list as text).", "inputSchema": { "properties": { "dois": { "description": "DOIs to format, e.g. ['10.1038/s41586-020-2649-2']", "items": { "type": "string" }, "type": "array" }, "format": { "default": "bibtex", "description": "Output citation format", "enum": [ "bibtex", "ris", "csv" ], "type": "string" } }, "required": [ "dois" ], "type": "object" }, "name": "bibliography", "outputSchema": null }, { "description": "Traverse the scite citation graph from seed DOIs to discover connected papers by citation topology\nrather than keyword. Each edge is a citation: `s` (citing paper) -> `t` (cited paper).\n\nUse it to find prior art / foundations (`direction=\"out\"`), impact and follow-on work (`direction=\"in\"`),\nor both. Get seed DOIs from `search_literature` first, then traverse; feed interesting nodes back into\n`search_literature` or `read_fulltext` for content. This tool returns structure (edges + titles), not\nabstracts or full text.\n\nSeeds are automatically expanded to their linked preprint/published versions (e.g. an arXiv DOI and its\njournal DOI), so a paper split across two DOIs is traversed as one work with a merged citation pool; the\nextra DOIs appear in `seeds` and `seed_coverage`.\n\nResponse: `edges` is a deduped list of `{\"s\",\"t\",\"d\"}` (d = hop distance from a seed); `papers` maps every\nDOI in the graph to its `{title, year}`. `truncated` is true when the `max_edges` cap was hit.\n\n**Coverage — check before trusting the topology.** `seed_coverage` maps each seed to how many of its edges\nresolved directly (hop 1); `low_coverage_seeds` lists seeds with too few to be reliable. Coverage is\nper-paper: it only follows references/citers scite resolved to DOIs, and arXiv-heavy (e.g. ML) papers\noften under-resolve, so a thin graph means missing edges, not a poorly-connected paper. For any seed in\n`low_coverage_seeds`, treat its topology as incomplete and fall back to `search_literature` for that paper.\n\n**Citation intent (scite's differentiator).** Set `include_intent=true` to annotate each edge with the\nsmart-citation `type` (supporting / contrasting / mentioning) and the `section` it appears in — this turns\nthe structure into an *intent graph*: you can see agreement vs. dissent, and method vs. background citations.\nSet `include_snippets=true` to additionally attach up to 3 `snippets` of the actual citing text (implies\nintent). Snippet text is returned only for open-access / unrestricted sources; closed-publisher citations\nstill carry type and section.\n\n**Custom \"why was it cited?\" classifications from `snippets`.** scite's `type` is a fixed 3-way label\n(supporting / contrasting / mentioning). When you need a finer or domain-specific taxonomy — e.g. *uses as\nbaseline*, *extends the method*, *reuses the dataset*, *critiques an assumption*, *motivates the problem* —\nread the `snippets` (the verbatim sentence the citing paper used) and classify each edge yourself into\nwhatever scheme the task calls for. The snippet is the ground truth; treat scite's `type`/`section` as a\nprior, not the final answer. Group edges by your derived label to answer \"why does this literature cite X?\".\n\nWhen a snippet is too short to judge the intent, chain `read_fulltext` on the citing paper (edge `s`) to\nread the surrounding paragraph / section and recover the full rationale — snippets are ~1 sentence each,\n`read_fulltext` gives you the argument around them. Typical flow: `citation_graph` (structure + snippets)\n-> pick the edges that matter -> `read_fulltext(dois=[citing paper])` with a targeted `term` to confirm\n*why* it was cited before you label it.\n\n**Recording a screen.** When you use this tool to screen literature — keeping some papers and dropping\nothers with a reason — record those keep/drop decisions with `report_citations` (cited / excluded +\nreason_code), and `citation_report` will summarize the include/exclude funnel as a PRISMA-style audit.\n\n**Deriving analyses from `edges` (no extra calls).** The edge list is all you need for the classic\ncitation-analysis questions — compute them directly:\n- *Common references* (shared foundations): traverse `direction=\"out\"` from multiple seeds; take the DOIs\n that appear as `t` for every seed.\n- *Common citers* (who cites all of them, e.g. surveys/syntheses): `direction=\"in\"`; DOIs appearing as `s`\n for every seed.\n- *Bibliographic coupling* (papers similar to a seed): `direction=\"out\"` at depth 2; rank other papers by\n how many `t` references they share with the seed.\n- *Co-citation* (papers cited alongside a seed): `direction=\"in\"` then `out`; rank papers frequently cited\n by the same citers.\n- *Citation classics* (most influential in the network): rank DOIs by in-degree (how often they appear as\n `t`).\nFilter any of these to supporting/contrasting edges by adding `include_intent=true` first.", "inputSchema": { "properties": { "depth": { "default": 1, "description": "Hops from the seeds. 1 = direct citations, 2 = citations of citations. Default 1.", "maximum": 2, "minimum": 1, "type": "integer" }, "direction": { "default": "both", "description": "'out' = papers the seeds cite (backward/foundations), 'in' = papers citing the seeds (forward/impact), 'both' = bidirectional. Default 'both'.", "enum": [ "in", "out", "both" ], "type": "string" }, "include_intent": { "default": false, "description": "Annotate each edge with scite's smart-citation type (supporting/contrasting/mentioning) and section — the intent graph. One extra DB lookup. Default false.", "type": "boolean" }, "include_snippets": { "default": false, "description": "Also attach up to 3 citing-text snippets per edge (OA sources only); implies include_intent. Verbose — keep max_edges modest when using it. Default false.", "type": "boolean" }, "max_edges": { "default": 500, "description": "Cap on total edges returned. Default 500, max 2000.", "maximum": 2000, "type": "integer" }, "seeds": { "description": "Seed DOIs to start from (max 10). Get them from search_literature.", "items": { "type": "string" }, "maxItems": 10, "minItems": 1, "type": "array" } }, "required": [ "seeds" ], "type": "object" }, "name": "citation_graph", "outputSchema": null }, { "description": "Generate a report of the sources you included and excluded in this session, with reasons — for fact-checking, provenance, and systematic-review/regulatory audit.\n\nSummarizes the citation decisions recorded via report_citations for the current session (or a\nspecific answer_id): how many sources were retrieved, screened, included (cited), and excluded, the\nbreakdown of exclusion reasons and screening stages, provenance by source, and the full per-source\nlists — so the user can review and sanity-check the reasoning behind each include/exclude choice.\n\nUse it for:\n- Fact-checking: show which sources were used vs rejected and why, so unsupported or hallucinated\n claims stand out; `checks` flags decisions missing a reason.\n- Provenance transparency: `by_source` and each item's `source` show which citations came from scite\n retrieval vs web/user-supplied, so a reader can weigh how verified each source is.\n- Systematic review / PRISMA: the identified -> screened -> included/excluded funnel with per-reason\n and per-stage counts is a PRISMA-compliant screening record.\n- Regulatory / audit: a reproducible, per-source account of the include/exclude reasoning for an\n evidence submission or compliance review.\n\nCall report_citations first to record the decisions; pass the same answer_id here to scope the\nreport to one answer. Read-only — it does not change anything.\n\nReturns JSON: summary (retrieved / screened / included / excluded counts; retrieved is null for an\nanswer-scoped report), excluded_by_reason, by_stage, by_source, checks (e.g. decisions missing a\nreason), truncated, and the full included[]/excluded[] lists.", "inputSchema": { "properties": { "answer_id": { "description": "Optional: scope the report to one answer's decisions (the same answer_id passed to report_citations).", "type": "string" } }, "required": [], "type": "object" }, "name": "citation_report", "outputSchema": null }, { "description": "Create a new Collection owned by the signed-in user.\n\nUse this to start a Collection from a list of DOIs the user wants to group, track, and analyze together. The\ncaller becomes the Collection ADMIN. The returned `slug` identifies the Collection for `get_collection`,\n`update_collection`, `add_dois_to_collection`, and the other Collection tools.\n\n**DOI validation.** Provided DOIs are validated and resolved against scite; unknown DOIs are dropped and surfaced\nvia the `unmatchedDoiCount` in the response. An empty `dois` list creates an empty Collection the user can add to later.\n\n**Scope.** This tool creates DOI-list Collections. Collections backed by a saved search query are created in the\nscite web app, not via MCP.\n\n**Parameters:**\n- name: Collection name (required).\n- description: Optional free-text description.\n- dois: Optional list of DOI strings to seed the Collection.\n- is_public: If true, anyone with the slug can view the Collection (default: false).\n\n**Returns:** The created Collection with id, slug, name, description, isPublic, doiQueryType, accessType, and DOI counts.", "inputSchema": { "properties": { "description": { "description": "Optional description", "type": "string" }, "dois": { "description": "Optional list of DOIs to seed the Collection, e.g. ['10.1038/s41586-020-2649-2']", "items": { "type": "string" }, "type": "array" }, "is_public": { "default": false, "description": "If true, anyone with the slug can view (default: false)", "type": "boolean" }, "name": { "description": "Collection name", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "create_collection", "outputSchema": null }, { "description": "Permanently delete a Collection. Requires ADMIN access on the Collection.\n\nThis cannot be undone. The Collection and its DOI membership are removed. Only the Collection ADMIN may delete it.\n\n**Parameters:**\n- slug: The Collection slug (required).\n\n**Returns:** `{deleted: true, slug: \"...\"}` on success.", "inputSchema": { "properties": { "slug": { "description": "The Collection slug", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "delete_collection", "outputSchema": null }, { "description": "Fetch a single Collection (a saved, named set of papers) by its slug.\n\nUse the `slug` returned by `create_collection` or `search_collections`. Returns the Collection's identity, sharing,\naccess level, and DOI counts. The caller must have at least VIEWER access (own it, be shared on it, or it is public).\n\n**Parameters:**\n- slug: The Collection slug (required).\n\n**Returns:** The Collection with id, slug, name, description, isPublic, accessType, and DOI counts.", "inputSchema": { "properties": { "slug": { "description": "The Collection slug", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get_collection", "outputSchema": null }, { "description": "Read a paper's body text by DOI, one page of characters at a time.\n\nUse this when you need the ACTUAL text of a paper — not term-matched snippets. It returns the body\nsliced by character offset so you can page through the whole document.\n\n**How it differs from other tools:**\n- `search_literature` returns up to 5 term-matched ~500-char excerpts — good for finding passages, not reading straight through.\n- `get_full_text` returns a proxy stitched only from sentences that cite other works — lossy, citation-only.\n- `read_fulltext` (this tool) returns verbatim body text, linearly, with pagination.\n\n**What you get — the `source` field:**\n- `\"fulltext\"` — verbatim full text, for open-access papers with a permissive license (or papers your org is entitled to) that have indexed full text.\n- `\"abstract\"` — the paper's abstract, returned as a fall-back when verbatim full text is access-restricted or not indexed. Abstracts are public, so most papers return at least this.\n- `null` — no readable text at all; use search_literature's `access` field for a link.\n\n`contentDenied` is true whenever full text was NOT served — i.e. any time `source` is not `\"fulltext\"`\n(access-restricted, not indexed, or nothing). So `source: \"abstract\"` still has `contentDenied: true`.\nAlways check `source`: if it is not `\"fulltext\"` you are NOT reading the full paper. The `message` field\nexplains why.\n\n**Paging:** each call returns up to 8000 characters. Read the first page with `offset: 0`, then set\n`offset` to the previous `offset + returnedChars` while `hasMore` is true. `totalChars` is the length of\nwhatever `source` you got. Character offsets are only stable within a session — do not persist them\nacross days (re-indexing shifts positions).", "inputSchema": { "properties": { "doi": { "description": "DOI of the paper to read. Example: '10.7554/elife.75415'.", "type": "string" }, "length": { "default": 8000, "description": "Number of characters to return (max 8000). Defaults to the max.", "maximum": 8000, "minimum": 1, "type": "integer" }, "offset": { "default": 0, "description": "Character offset to start reading from. Default 0. Use the prior call's offset + returnedChars.", "minimum": 0, "type": "integer" } }, "required": [ "doi" ], "type": "object" }, "name": "read_fulltext", "outputSchema": null }, { "description": "Remove DOIs from a Collection. Works on both DOI-list and saved-search Collections. Requires EDITOR or ADMIN access.\n\nFor a DOI-list Collection the DOIs are dropped from the list. For a saved-search Collection they are excluded (added to\nthe exclude list) so they no longer appear even if the search would return them. DOIs not present are ignored. This\nremoves papers from the Collection; it does not delete the Collection itself (use `delete_collection` for that).\n\n**Parameters:**\n- slug: The Collection slug (required).\n- dois: List of DOI strings to remove (required, non-empty).\n\n**Returns:** The updated Collection with id, slug, name, and DOI counts.", "inputSchema": { "properties": { "dois": { "description": "List of DOIs to remove, e.g. ['10.1038/s41586-020-2649-2']", "items": { "type": "string" }, "type": "array" }, "slug": { "description": "The Collection slug", "type": "string" } }, "required": [ "slug", "dois" ], "type": "object" }, "name": "remove_dois_from_collection", "outputSchema": null }, { "description": "Record your answer's full source decision set — what you cited and what you excluded, each with a reason and its provenance — as a verifiable, auditable citation record.\n\nCall this ONCE at the very end of a response that drew on sources, with your full decision set:\n- every source you CITED (credited in the answer), and\n- every source you retrieved/considered but EXCLUDED, each with a short reason.\n\nReport only sources you actually used — never invent references. Fire-and-forget: it records the\ndecisions and does not change your answer.\n\nUse it for:\n- Fact-checking / reducing hallucinations: works with search_literature (every cited source must\n trace to a real retrieved record), citation_graph (screen the literature by citation topology, then\n log which edges you kept vs. dropped and why), and bibliography (references built from stored\n metadata, not memory). Recording each decision — then reviewing it with citation_report before you\n finalize — surfaces fabricated, misattributed, or unsupported citations.\n- Provenance: `source` records WHERE each source came from — scite_mcp (retrieved via scite),\n web_search, user_supplied, or other — so a reader can tell verified retrievals from unverified ones.\n- Systematic review / PRISMA screening: the `excluded` items with `reason_code` and `stage` are the\n screened-out log with reasons at each stage (title/abstract vs full text) that PRISMA requires;\n the `cited` items are the included studies.\n- Regulatory / evidence submissions: a reproducible, per-source trail of what was included, what was\n excluded, and why — auditable straight from the recorded decisions.\n\nEach citations item:\n- source_ref: the DOI (preferred) or, for non-scite sources, a URL/reference string.\n- decision: \"cited\" (included/credited) or \"excluded\" (screened out).\n- source: provenance — \"scite_mcp\", \"web_search\", \"user_supplied\", or \"other\".\n- source_detail: name the source when source is \"other\" (e.g. \"arxiv\", \"google scholar\").\n- reason_code: short reason — for excluded: off_topic, retracted, contradicted, duplicate,\n low_quality, superseded, out_of_scope; for cited: e.g. supports, relevant.\n- reason: optional free-text note explaining the decision.\n- stage: optional PRISMA screening stage — \"title_abstract\" or \"full_text\".\n\nReturns JSON: recorded_cited, recorded_excluded, skipped (malformed items dropped), mcp_session_id,\nand the accepted decisions grouped as cited[] and excluded[] (each item with source_ref, source,\nsource_detail, reason_code, reason, stage) so a client can render a used/rejected citation panel.", "inputSchema": { "properties": { "answer_id": { "description": "Optional correlation id grouping this answer's decisions.", "type": "string" }, "citations": { "description": "The answer's citation decisions (both cited and excluded).", "examples": [ [ { "decision": "cited", "source": "scite_mcp", "source_ref": "10.1038/s41586-020-2012-7" }, { "decision": "excluded", "reason_code": "off_topic", "source": "scite_mcp", "source_ref": "10.1007/s12671-012-0144-z" } ] ], "items": { "properties": { "decision": { "description": "Whether the source was credited (cited) or screened out (excluded).", "enum": [ "cited", "excluded" ], "type": "string" }, "reason": { "description": "Optional free-text reason note.", "type": "string" }, "reason_code": { "description": "Short reason (esp. for excluded): off_topic, retracted, contradicted, duplicate, low_quality, superseded, out_of_scope.", "type": "string" }, "source": { "description": "Where the source came from.", "enum": [ "scite_mcp", "web_search", "user_supplied", "other" ], "type": "string" }, "source_detail": { "description": "Names the source when source is \"other\" (e.g. \"arxiv\").", "type": "string" }, "source_ref": { "description": "DOI (preferred) or a URL/reference, e.g. \"10.1038/s41586-020-2012-7\".", "type": "string" }, "stage": { "description": "Optional PRISMA screening stage.", "enum": [ "title_abstract", "full_text" ], "type": "string" } }, "required": [ "source_ref", "decision" ], "type": "object" }, "type": "array" }, "context": { "description": "Optional: the question or review inclusion criteria for the whole answer.", "type": "string" } }, "required": [ "citations" ], "type": "object" }, "name": "report_citations", "outputSchema": null }, { "description": "List the Collections the signed-in user can access, with an optional name filter.\n\nReturns Collections the user owns, is shared on, or that are shared with their organization. Pass `q` to filter by a\ncase-insensitive substring of the Collection name. This is a filter over the caller's own Collections, not a full-text\nsearch of all Collections.\n\n**Parameters:**\n- q: Optional case-insensitive name substring to filter by.\n\n**Returns:** `{collections: [...], total: N}` where each Collection has id, slug, name, accessType, and DOI counts.", "inputSchema": { "properties": { "q": { "description": "Optional case-insensitive name substring filter", "type": "string" } }, "required": [], "type": "object" }, "name": "search_collections", "outputSchema": null }, { "description": "Search scientific literature and read full-text content from peer-reviewed papers.\n\nUse `dois` (preferred) or `titles` with targeted `term` queries to extract full-text passages from specific papers. Each call returns up to 5 relevant excerpts (~500 chars each) — vary search terms across calls to read through a paper section by section.\n\n**IMPORTANT — keep `limit` small.** Use `limit: 10-50` with `offset` for pagination. Large limits with full citations and excerpts produce very large payloads that consume significant LLM context.\n\n**Calling with no parameters browses the corpus** (210M+ papers, relevance-sorted). This is allowed for broad exploration but rarely what you want — pass `term`, `dois`, `titles`, or other filters for targeted results.\n\n**What This Tool Returns:**\n\n- Paper metadata: title, authors (first 3), abstract, DOI, journal, year, volume, issue, page\n- `fulltextExcerpts`: up to 5 passages (~500 chars) from the paper matching your query (OA only)\n- `access`: resolved access link with source, type (open/institutional/purchase), content type, and pricing\n- `citations`: Smart Citation statements — actual quoted text from citing papers, classified as supporting/contrasting/mentioning/unclassified (unclassified = statement present but classifier hasn't assigned a type)\n- `tally`: citation metrics (total, supporting, contrasting, mentioning, citing publications)\n- `editorialNotices`: editorial notices (retraction, correction, concern, erratum), each with status, noticeDoi, date\n- `isOa`, `oaStatus`, `license`: open access information\n\n**Fetching Paper Metadata (no search term needed):**\n\nPass `dois` or `titles` WITHOUT a `term` to retrieve metadata for specific papers.\nExample: `dois: [\"10.1038/s41586-020-2012-7\"]`\n\n**Full-Text Excerpts:**\n\nFor OA papers, `fulltextExcerpts` contains passages matching your query. If empty, the full text is not indexed or terms didn't match — use the `access` field for the best link to the PDF or full text.\n\n**Smart Citations ARE Full-Text Evidence:**\n\n- `snippet`: exact sentence/paragraph from the citing paper's full text\n- `type`: classification (supporting, contrasting, mentioning, unclassified)\n- `section`: paper section (Introduction, Methods, Results, Discussion)\n- `sourceDoi`: paper containing this snippet; `targetDoi`: paper being cited\n\n**Search Capabilities:**\n\n- Boolean operators: AND, OR, NOT\n- Phrase search: \"exact phrase\"\n- Proximity: \"term1 term2\"~5\n- Field filters: title, abstract, author, journal, year, affiliation\n- Citation filters: supporting_from/to, contrasting_from/to, mentioning_from/to\n- Editorial filters: has_retraction, has_concern, has_correction, has_erratum\n\n**Parameters:**\n- `term`: cross-field search query (optional when `dois`/`titles` provided)\n- `dois`: array of DOIs to filter to specific papers\n- `titles`: array of titles to filter (use when DOIs unavailable)\n- `limit`: max results (default: 10, max: 1000)\n- `offset`: pagination offset\n- Plus 20+ filter parameters (see schema)\n\n**Response Format:**\n\n```json\n{\n \"hits\": [{\n \"doi\": \"10.1234/example\",\n \"title\": \"Paper Title\",\n \"authors\": [{\"authorName\": \"Jane Smith\"}],\n \"abstract\": \"Full abstract text...\",\n \"year\": 2023,\n \"journal\": \"Nature\",\n \"tally\": {\"supporting\": 32, \"contrasting\": 8, \"mentioning\": 5},\n \"fulltextExcerpts\": [\"Relevant passage...\"],\n \"access\": {\"url\": \"https://...\", \"accessType\": \"open\", \"contentType\": \"pdf\"},\n \"citations\": [{\"snippet\": \"These findings...\", \"type\": \"supporting\", \"section\": \"Results\"}],\n \"editorialNotices\": [{\"status\": \"retracted\", \"noticeDoi\": \"10.1234/notice\", \"date\": \"2021\"}]\n }]\n}\n```", "inputSchema": { "properties": { "abstract": { "description": "Filter by text in publication abstract. Example: 'neural networks'", "type": "string" }, "affiliation": { "description": "Filter by author institutional affiliation. Example: 'Stanford University' or 'MIT'", "type": "string" }, "author": { "description": "Filter by author name. Partial names work. Example: 'Einstein' or 'Albert Einstein'", "type": "string" }, "citing_publications_from": { "description": "Minimum number of total citing publications (traditional citation count)", "type": "integer" }, "citing_publications_to": { "description": "Maximum number of total citing publications (traditional citation count)", "type": "integer" }, "collection_slug": { "description": "Restrict the search to the papers in one of the user's Collections (a saved, named set of papers). Pass the Collection slug from `create_collection` or `search_collections`. Combine with `term` and other filters to search within that Collection.", "type": "string" }, "contrasting_from": { "description": "Minimum number of contrasting Smart Citations. Example: 5 = papers with at least 5 contrasting citations", "type": "integer" }, "contrasting_to": { "description": "Maximum number of contrasting Smart Citations. Example: 20 = papers with up to 20 contrasting citations", "type": "integer" }, "date_from": { "description": "Filter papers published from this date onwards. Format: YYYY-MM-DD or YYYY. Example: '2015-01-01' or '2015'", "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$", "type": "string" }, "date_to": { "description": "Filter papers published up to this date. Format: YYYY-MM-DD or YYYY. Example: '2023-12-31' or '2023'", "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$", "type": "string" }, "dois": { "description": "Filter results to specific DOIs. Use WITHOUT `term` to fetch paper metadata (title, abstract, citations, access URL). Use WITH `term` to search within those papers for full-text excerpts. Prefer DOIs over titles as they are exact matches. Example: ['10.1038/s41586-020-2649-2'].", "items": { "type": "string" }, "type": "array" }, "has_concern": { "description": "Filter papers with editorial concerns. true = papers with concerns", "type": "boolean" }, "has_correction": { "description": "Filter papers with corrections. true = papers with published corrections", "type": "boolean" }, "has_erratum": { "description": "Filter papers with errata. true = papers with published errata", "type": "boolean" }, "has_retraction": { "description": "Filter papers with retraction notices. true = retracted papers only", "type": "boolean" }, "has_tally": { "description": "Filter papers with Smart Citations (tally > 0). true = papers that have been cited with context", "type": "boolean" }, "journal": { "description": "Filter by journal name. Example: 'Nature' or 'Science'", "type": "string" }, "limit": { "default": 10, "description": "Maximum number of results to return. Default: 10, Maximum: 1000. For better performance, use smaller limits (10-50) and pagination.", "maximum": 1000, "minimum": 1, "type": "integer" }, "mentioning_from": { "description": "Minimum number of mentioning Smart Citations. Example: 50 = papers with at least 50 mentioning citations", "type": "integer" }, "mentioning_to": { "description": "Maximum number of mentioning Smart Citations", "type": "integer" }, "offset": { "default": 0, "description": "Pagination offset for result sets. Use with limit for pagination. Example: offset=20, limit=10 returns results 21-30.", "minimum": 0, "type": "integer" }, "paper_type": { "description": "Filter by publication type. Examples: 'Article', 'Review', 'Clinical Trial', 'Meta-Analysis', 'Case Report'", "type": "string" }, "publisher": { "description": "Filter by publisher name. Example: 'Elsevier' or 'Springer'", "type": "string" }, "supporting_from": { "description": "Minimum number of supporting Smart Citations. Example: 10 = papers with at least 10 supporting citations", "type": "integer" }, "supporting_to": { "description": "Maximum number of supporting Smart Citations. Example: 100 = papers with up to 100 supporting citations", "type": "integer" }, "term": { "description": "Cross-field search query. Optional when `dois` or `titles` is provided (omit to fetch metadata only). IMPORTANT: Use domain-specific technical terms, not broad phrases — the index covers all academic fields so ambiguous terms return irrelevant results. Supports Boolean operators (AND, OR, NOT), phrase search (\"exact phrase\"), proximity search (\"term1 term2\"~5). Searches across title, abstract, and full-text. Example: \"PAC learning\" AND \"generalization bounds\" AND \"neural networks\"", "type": "string" }, "title": { "description": "Filter by text in publication title. Example: 'climate change'", "type": "string" }, "titles": { "description": "Filter results to papers matching these titles. Use WITHOUT `term` to fetch paper metadata, or WITH `term` to search within those papers. Use when DOIs are not available — prefer `dois` when possible. Example: ['Attention is all you need'].", "items": { "type": "string" }, "type": "array" }, "topic": { "description": "Filter by research topic/subject area. Example: 'Oncology' or 'Neuroscience'", "type": "string" }, "year": { "description": "Filter by specific publication year. Example: 2020. Cannot be combined with date_from/date_to.", "maximum": 2100, "minimum": 1600, "type": "integer" } }, "required": [], "type": "object" }, "name": "search_literature", "outputSchema": null }, { "description": "Update a DOI-list Collection the signed-in user can edit.\n\nPartial update: only the fields you supply change; omitted fields keep their current values. Omitting `dois` leaves the\nDOI list untouched; supplying `dois` replaces it (unknown DOIs are dropped and surfaced via `unmatchedDoiCount`). Requires\nEDITOR or ADMIN access. Only DOI-list Collections can be updated here — saved-search Collections are managed in the scite web app.\n\n**Parameters:**\n- slug: The Collection slug (required).\n- name: New name (optional).\n- description: New description (optional).\n- dois: Replacement DOI list (optional; omit to leave DOIs unchanged).\n- is_public: New public flag (optional).\n\n**Returns:** The updated Collection with id, slug, name, accessType, and DOI counts.", "inputSchema": { "properties": { "description": { "description": "New description", "type": "string" }, "dois": { "description": "Replacement DOI list (omit to leave DOIs unchanged), e.g. ['10.1038/s41586-020-2649-2']", "items": { "type": "string" }, "type": "array" }, "is_public": { "description": "If true, anyone with the slug can view", "type": "boolean" }, "name": { "description": "New Collection name", "type": "string" }, "slug": { "description": "The Collection slug", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "update_collection", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:251abcc7a0a66f14c8a61138c1eba1e47e00b05ebd8f3620021c11b94a803528 | sha256sum