Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

FORRT Research

PYPI · FORRT-RESEARCH-MCP · SCANNED SEP 21

Produce verifiable FORRT nanopublication chains: grounded quote checks and Science Live projections.

Available components

66 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security99
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 33 of 34 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • Dependency health was assessed across the 33 of 34 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3252 tokens (~250/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

How do I install the FORRT Research MCP server?

FORRT Research runs locally as a PyPI package, launched with uvx forrt-research-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · forrt-research-mcp

# add to Claude Code
claude mcp add org-sciencelive4all-forrt-research-mcp -- uvx forrt-research-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "org-sciencelive4all-forrt-research-mcp": {
      "command": "uvx",
      "args": [
        "forrt-research-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "org-sciencelive4all-forrt-research-mcp": {
      "command": "uvx",
      "args": [
        "forrt-research-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add org-sciencelive4all-forrt-research-mcp -- uvx forrt-research-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "org-sciencelive4all-forrt-research-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "forrt-research-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add org-sciencelive4all-forrt-research-mcp --command uvx --arg forrt-research-mcp
# ~/.hermes/config.yaml
mcp_servers:
  org-sciencelive4all-forrt-research-mcp:
    command: "uvx"
    args: ["forrt-research-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "org-sciencelive4all-forrt-research-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "forrt-research-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add org-sciencelive4all-forrt-research-mcp -t stdio -c uvx -a forrt-research-mcp
// mcp.json
{
  "mcpServers": {
    "org-sciencelive4all-forrt-research-mcp": {
      "command": "uvx",
      "args": [
        "forrt-research-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 66

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed pypi/forrt-research-mcp@0.1.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 33 packages
Packages resolved 33
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 13 exposed · ~3,252 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
constellation ~302

The FORRT chain(s) reachable from a published nanopub URI, as a compact projection you can actually read. Call this to see an existing chain — before starting a replication (what has already been done?), when extending someone else's chain, or to inspect your own after publishing. The raw Science Live constellation is ~330 KB for one chain, of which ~95 % is a depth-5 neighbourhood of UNRELATED chains reachable through shared links (on the marine-heatwave chain, 64 of 98 nodes are other studies' AIDA statements). This returns the chains, the apex CiTO, any Research Synthesis, and the Quote/Question anchors attributable to this paper — and drops the rest, reporting how much it dropped under `neighbourhood`. Read `citedPaper` rather than assuming: the API's own top-level `paperDoi` is a frequency vote across the whole walk and can name a neighbour's paper, so this derives the paper from the chain's CiTO citation and sets `disagreesWithReported` when the two differ. `stepsPresent` legitimately omits steps: a CiTO at the apex of the constellation is hoisted out of its chain, and Quote/AIDA anchors are often not enumerated. Missing does not mean unpublished.

NameTypeReqDescription
depthinteger
max_nodesinteger
uristringyes

No output schema declared.

No examples provided.

constellation_raw ~103

The unprojected `/np/constellation` response, including every node and edge. For debugging the graph itself or investigating an upstream data problem. Prefer `constellation` for normal use: this is very large (~330 KB for a single chain) and most of it belongs to other studies. Lower `depth` to shrink the walk.

NameTypeReqDescription
depthinteger
max_nodesinteger
uristringyes

No output schema declared.

No examples provided.

list_schemas ~51

Which chain steps and vocabularies this server can look up. Cheap, offline, and no network. Call it first if you are unsure what to pass to `template_fields` or `vocabulary`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

prior_work ~202

What has already been claimed about a paper — the starting point for new work, whether that work is a replication or a fresh study. Given any published nanopub URI in a constellation, returns one entry per completed chain: the claim type, what was tested (`scope`), how (`method`), what was done differently (`deviations`), the verdict and confidence, and — the field to read most carefully — `limitations`, where the previous authors stated in their own signed words what their study did NOT cover. Use it to avoid duplicating an existing replication, to choose a CiTO relation relative to prior work (`extends` / `qualifies` / `disputes`), and to find the part of a claim still open. Cite what you find; do not re-derive it — a published chain step is a record with a URI, not a result to recompute.

NameTypeReqDescription
uristringyes

No output schema declared.

No examples provided.

resolve_doi ~164

Does this DOI resolve, and to what? Call it on every DOI destined for a nanopub field, `CITATION.cff`, or a CiTO citation. `resolves: false` means the DOI is not registered — do not publish it, however well-formed it looks. A well-formed DOI is not a real one, and a fabricated one is indistinguishable from a genuine one until something asks the registry. On success it returns the registered title, authors, year, container and type, so you can confirm it is the paper you mean rather than merely a paper that exists. Accepts bare (`10.…`), URL, or `doi:`-prefixed forms.

NameTypeReqDescription
doistringyes

No output schema declared.

No examples provided.

template_fields ~281

The exact form fields of one FORRT chain step, from the live template. Call this BEFORE drafting any nanopub field. A nanopub template *is* the schema for its step, so this is what makes "never invent a field name" a lookup rather than a rule you have to remember: it returns the real field ids, prompts, whether each is required or repeatable, the length/format constraints (`regex`, `prefix`, `datatype` — where the Quote template's character cap actually lives), and, for choice fields, the allowed values. `step` accepts `05_outcome`, `05`, or `outcome`. Known steps: 01_quote, 01_pico, 01_pcc, 02_aida, 03_claim, 04_study, 05_outcome, 06_citation, 07_research_software, 08_synthesis. Check `source`: `live` means fetched from the nanopub network just now; `bundled-snapshot` means the network was unavailable and these are vendored values that may be stale. `driftedFromSnapshot: true` means the template was superseded upstream — the live values win, and this package needs re-vendoring.

NameTypeReqDescription
liveboolean
stepstringyes

No output schema declared.

No examples provided.

validate_chain_draft ~402

Check `nanopubs/chain-draft.json` before handing it to the chain wizard. Run this at the end of Phase 5b, after `pixi run build-chain-draft` and BEFORE pushing the file and opening the wizard URL. `readyForWizard` is true only when nothing came back as an error. This file — not the markdown drafts — is what the wizard pre-fills each step from, and therefore what a human reviews and signs. `validate_draft` checks the authoring input; this checks the artifact. What it catches that reading the file cannot: - a **superseded `template_uri`**, which is invisible in the JSON but makes the wizard pre-fill the old form. Re-run build-chain-draft to fix; - a `prefill` key that is neither a template field nor a known platform form-field — the wizard silently drops it; - a complex field in the wrong shape: `06_citation.st02` must be `[{cites, cited}]` with at least one entry, and `04_study.disciplineSelection` is a single object, NOT an array; - a required field that is neither prefilled nor carried forward; - values violating the template's own regex (the Quote's 500-character cap lives there), an invalid vocabulary term, a malformed date, an unresolved `{{TOKEN}}`, or a DOI that does not resolve; - a `carry_forward` edge that runs backwards through the chain. Fields the wizard fills itself are exempt, not reported missing: `02_aida` has no `project`, `03_claim` no `aida`, `04_study` no `claim`, because each is carried forward from the step published before it.

NameTypeReqDescription
liveboolean
pathstringyes

No output schema declared.

No examples provided.

validate_draft ~293

Check one drafted nanopub against its template and the real world. Run this on every draft before publishing. It is the pre-flight checklist in `docs/forrt-form-fields.md`, actually executed: field ids checked against the live template, choice values against the template's own enumeration, length caps against its regex, DOIs against the registry, Wikidata QIDs against Wikidata. `publishable` is true only when there are no errors. Severities: error would publish something false, or be rejected by the form warning a human should look, but it may be intentional info checked and fine, or deliberately not checked Three placeholder conventions are distinguished, because only one is a problem: `«URI of step 05 …»` is a back-reference the chain wizard fills (info); `{{ZENODO_VERSION_DOI}}` is a release-time token the release workflow substitutes (warning — confirm the release ran); anything else still standing in for a value is an error. `step` is inferred from the filename (`05_outcome.md`); pass it explicitly for a file named otherwise. A draft whose required fields are nearly all empty is reported once as an unfilled skeleton rather than field by field.

NameTypeReqDescription
liveboolean
pathstringyes
stepstring

No output schema declared.

No examples provided.

validate_drafts ~139

Check every draft in a `nanopubs/drafts/` directory at once. The whole-chain pre-flight: run it before starting Phase 5b, and again before announcing. Returns per-draft results plus totals, with `publishable` true only when no draft has an error. Note what it cannot see: values a draft puts in prose or a markdown table rather than behind a `<!-- field: … -->` marker are reported as `coverage` warnings, not as missing. The CiTO step's citation list is the known case.

NameTypeReqDescription
directorystringyes
liveboolean

No output schema declared.

No examples provided.

verify_chain ~429

Verify a published FORRT chain. Run this before announcing it anywhere. Point it at a `nanopubs/PUBLISHED.md` ledger (or the directory holding one). Read-only: it never edits, retracts or supersedes — a failing row is for a human to act on. `green` is true only when nothing failed. What it checks: - every required step (01-06) has a URI in the ledger; - every URI is really published — present in the constellation, or, for the upstream anchors the walk does not reach, served as RDF by the `w3id.org/np/` resolver; - the Outcome's repository resolves (a Zenodo **version** DOI is the expected value — it pins the archived state, where a GitHub URL would be a moving target); - every DOI the chain cites resolves; - **the CiTO relation agrees with the Outcome's verdict** — Validated implies confirms, PartiallySupported implies qualifies, Contradicted implies disputes. A mismatch means the Outcome and the Citation disagree about what the replication found, which is the failure most worth catching before anyone reads the chain. A step reported as "not enumerated by the walk but its TriG resolves" is fine, not a warning: the constellation legitimately stops short of Quote, AIDA and Claim. `mode` — `auto` (default), `replication`, `reproduction` or `new_research`. It changes only what is REQUIRED. Research that starts from scratch has no existing work to cite, so no CiTO step and no cited DOI are expected, and `auto` infers that from the absence of a published step 06. Everything else is checked identically in all three. Reproduction and replication verify the same way; pass one explicitly only to make the wording match your study.

NameTypeReqDescription
modestring
published_pathstringyes
repo_urlstring

No output schema declared.

No examples provided.

verify_quote ~339

Prove that a candidate quotation is really in a source PDF, before it is published as verbatim. Call this on EVERY quotation destined for a Quote-with-comment nanopub. You choose which sentence carries the paper's claim — that is judgement. This decides whether the sentence is admissible, and that is not: it is a string search, and anyone can re-run it and get the same answer. Returns a graded verdict with the page, character offsets and the file's SHA-256 as evidence: exact byte-identical to the extracted page text normalized matched after whitespace / ligature / typographic punctuation / line-break-hyphen repair extraction_tolerant additionally ignored hyphens and punctuation spacing not_found NOT in this PDF — do not publish it as a quotation A tier below `exact` is normal and not a warning about your quotation: PDF extraction inserts line breaks and drops hyphens (a real published FORRT quotation matches only at `extraction_tolerant`, because pypdf reads "35-year" as "35year"). Every tier canonicalises formatting only — never words, digits or order — so an altered number still fails at every tier. Read `matched_text` before publishing. On `not_found`, `closest.text_in_pdf` shows what the paper says where it nearly matched. A one-digit change scores ~0.91 similarity and is still `not_found`: high similarity is not a pass.

NameTypeReqDescription
pdf_pathstringyes
quotationstringyes

No output schema declared.

No examples provided.

vocabulary ~306

The allowed values of a FORRT controlled vocabulary, from its template. Use it whenever a draft needs a claim type, a study type, a validation status, a confidence level, or a CiTO relation. Every term comes from the real restricted-choice field on the real template (or the value-list nanopub it points at), so a value returned here is one the form will actually accept — and nothing else is. Names: claim_type, study_type, validation_status, confidence_level, cito_relation, pico_question_type. Three worth reading before you draft: - `study_type` carries the Reproduction vs Replication distinction (same data + same methods, vs different data and/or methods, or both). - `validation_status` is the Outcome verdict. Pick it from the evidence, not from what would be a nicer result; a contradicted replication is publishable and an overclaimed one is not. - `pico_question_type` is PICO-only, deliberately. Step 01 has three alternative anchors and they are not variants of one form: a PCC question has NO type field, and a Quote-with-comment has neither a type nor a label. Call `template_fields` on the anchor you are actually using (01_quote, 01_pico or 01_pcc) rather than assuming they match.

NameTypeReqDescription
liveboolean
namestringyes

No output schema declared.

No examples provided.

wikidata_lookup ~241

Find real Wikidata items for a term, and type-check them. Call it for every Wikidata topic or keyword destined for a nanopub field. It returns candidates with their descriptions and real P31/P279 types; it deliberately does NOT choose one, because picking the right sense of an ambiguous label is a judgement. What it guarantees is that the QID you publish exists and is what you say it is. Pass `expected_type` as a QID (e.g. `Q16521` taxon, `Q11862829` academic discipline) and each candidate is marked `typeMatches` from its actual statements. Candidates are annotated, never filtered — a near miss is often the informative result. Searching "Bombus" with `Q16521`, for instance, returns the insect genus as a match and the album of the same name as not. A zero-candidate result means leave the field empty or try another label. Never fall back to a QID from memory.

NameTypeReqDescription
expected_typestring
limitinteger
querystringyes

No output schema declared.

No examples provided.

Common questions

What is the FORRT Research MCP server?

FORRT Research is an MCP server listed in the public MCP registry as org.sciencelive4all/forrt-research-mcp. Produce verifiable FORRT nanopublication chains: grounded quote checks and Science Live projections. This page covers its PyPI package (forrt-research-mcp).

Is the FORRT Research MCP server safe to use?

FORRT Research scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the FORRT Research MCP server expose?

FORRT Research exposes 13 tools: constellation, prior_work, verify_quote, constellation_raw, template_fields, and 8 more. Their descriptions and schemas cost roughly 3,252 tokens of context every time the server is loaded.

Is the FORRT Research MCP server still maintained?

FORRT Research is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the FORRT Research MCP server under?

FORRT Research declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.