phasefolio
Biotech rNPV/PoS engine for AI agents. Signed exports, evidence register, asset landscape.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"phasefolio": {
"command": "npx",
"args": [
"@phasefolio/mcp"
]
}
}
}Runnable packages
0.1.4stdioRemote endpoints
https://app.phasefolio.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢get_project(project_id)
Fetch a PhaseFolio project's metadata: indication, sub-indication, modality, biomarker, asset name, and stage at entry. Use this when you need to ground an analysis question in the project's clinical context before fetching scenarios.
Input Schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the PhaseFolio project. Get from the project URL in the dashboard or from a prior list_scenarios call."
}
},
"required": [
"project_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Stable PhaseFolio project UUID."
},
"name": {
"type": "string",
"description": "Display name of the project."
},
"indication": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Indication, e.g. 'NSCLC' or 'Rheumatoid Arthritis'. Null for unset."
},
"modality": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Modality, e.g. 'Antibody', 'Small Molecule'. Null for unset."
},
"current_stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Current development stage, e.g. 'Phase 2'. Null for unset."
},
"created_at": {
"type": "string",
"description": "ISO 8601 timestamp of project creation."
},
"updated_at": {
"type": "string",
"description": "ISO 8601 timestamp of last project metadata update."
}
},
"required": [
"id",
"name",
"indication",
"modality",
"current_stage",
"created_at",
"updated_at"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢list_scenarios(project_id, limit)
List all scenarios in a PhaseFolio project. Returns scenario IDs, names, created/updated timestamps, and top-line eNPV/rNPV. Use this to discover what scenarios exist before fetching one in detail.
Input Schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the parent project whose scenarios to list."
},
"limit": {
"default": 50,
"description": "Maximum number of scenarios to return (1–200). Defaults to 50; raise for projects with many what-if branches.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"project_id",
"limit"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Scenario UUID. Pass to get_scenario, get_evidence, or get_dossier."
},
"label": {
"type": "string",
"description": "Human-friendly scenario name, e.g. 'Base Case' or 'Bear Case'."
},
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the parent project."
},
"is_base": {
"type": "boolean",
"description": "True if this is the base case scenario for the project."
},
"created_at": {
"type": "string",
"description": "ISO 8601 timestamp."
},
"updated_at": {
"type": "string",
"description": "ISO 8601 timestamp of last scenario edit."
}
},
"required": [
"id",
"label",
"project_id",
"is_base",
"created_at",
"updated_at"
],
"additionalProperties": false
},
"description": "Scenarios in the project, newest first."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢get_scenario(scenario_id)
Fetch a PhaseFolio scenario's complete inputs (stage costs, durations, PoS, commercial assumptions, IRA settings) and computed outputs (eNPV, rNPV, cumulative PoS, per-stage breakdown, top sensitivity drivers). This is the authoritative engine output — every signed export ties back to this payload.
Input Schema
{
"type": "object",
"properties": {
"scenario_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the scenario. Get from list_scenarios or the scenario URL in the dashboard."
}
},
"required": [
"scenario_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Scenario UUID. Pass to get_scenario, get_evidence, or get_dossier."
},
"label": {
"type": "string",
"description": "Human-friendly scenario name, e.g. 'Base Case' or 'Bear Case'."
},
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the parent project."
},
"is_base": {
"type": "boolean",
"description": "True if this is the base case scenario for the project."
},
"created_at": {
"type": "string",
"description": "ISO 8601 timestamp."
},
"updated_at": {
"type": "string",
"description": "ISO 8601 timestamp of last scenario edit."
},
"inputs": {
"description": "Full scenario inputs blob (stages, costs, durations, PoS, commercial assumptions, IRA settings). Schema mirrors the wizard input model."
},
"result": {
"description": "Full engine output blob: eNPV (USD M), rNPV (USD M), cumulative_pos, per_stage_breakdown[], top sensitivity drivers, optional Monte Carlo percentiles."
},
"modality": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Modality from inputs_json (echoed for convenience)."
},
"mfp_discount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "IRA Maximum Fair Price discount magnitude (0–1) used in this scenario, if applicable."
}
},
"required": [
"id",
"label",
"project_id",
"is_base",
"created_at",
"updated_at",
"inputs",
"result",
"modality",
"mfp_discount"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢get_evidence(scenario_id)
Fetch the evidence register entries for a scenario — the citations, sources, and supporting documents the analyst attached to back the assumptions. Use this when an analysis question references 'what's the evidence for X?'
Input Schema
{
"type": "object",
"properties": {
"scenario_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the scenario whose evidence register entries to fetch."
}
},
"required": [
"scenario_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {},
"description": "Array of evidence-register entries. Each entry has fields like assumption_path, source_url, source_date, excerpt, freshness, confidence — see /methodology/evidence-standards for the canonical schema."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢get_dossier(scenario_id)
Fetch the structured asset snapshot JSON for a scenario — the same content rendered in the PDF/Excel exports, in machine-readable form. Includes verdict, drivers, assumptions, evidence summary, and (if available) signed-export hashes pointing to the latest signed artifacts.
Input Schema
{
"type": "object",
"properties": {
"scenario_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the scenario to fetch the asset snapshot payload for."
}
},
"required": [
"scenario_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"description": "Structured asset snapshot payload mirroring the PDF/Excel exports. Top-level keys include verdict, drivers, assumptions, evidence, and (when available) signed_export hashes. See get_methodology('evidence-standards') for the full structure."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢query_landscape(project_id, phase_filter, recency_years)
Fetch the asset-anchored competitive landscape for a project — comparable trials, competing programs, sponsor activity, and biomarker overlap. Sourced from CT.gov + FDA + PhaseFolio's curated enrichment. Use when an analysis question asks 'who else is working on this?' or 'what's the competitive context?'
Input Schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the project to anchor the landscape on. Indication × modality × biomarker filters derive from the project."
},
"phase_filter": {
"default": [],
"description": "Optional list of clinical phases to include (e.g. ['PHASE2','PHASE3']). Empty array means all phases.",
"type": "array",
"items": {
"type": "string"
}
},
"recency_years": {
"default": 10,
"description": "How many years back to look (1–50). Defaults to 10 — broad enough to catch development-stage peers without polluting with stale failures.",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"required": [
"project_id",
"phase_filter",
"recency_years"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"description": "Asset-anchored landscape payload: kpis (sponsor counts, trial counts, etc.), comparable_trials[] (NCT-keyed), competing_programs[], biomarker_overlap. Filtered by the project's indication × modality × biomarker."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢query_evidence_atlas(sub_indication, include_unverified, limit)
Fetch the published Evidence Atlas program universe for a sub-indication. Defaults to source-verified rows from public CT.gov + FDA; agent-labeled rows require include_unverified=true and remain explicitly labeled. Pending AI-serviced event_links are human_verified=false and review_status=pending_human_review until reviewed. Trial summaries and financial_links are source-derived facts; interpreted efficacy, PoS, and verdicts are not returned.
Input Schema
{
"type": "object",
"properties": {
"sub_indication": {
"type": "string",
"pattern": "^[a-z0-9_-]{1,64}$",
"description": "Evidence Atlas sub-indication slug, e.g. 'ipf'."
},
"include_unverified": {
"default": false,
"description": "When true, include agent-labeled-not-verified rows in addition to source_verified rows. Rejected rows are never returned.",
"type": "boolean"
},
"limit": {
"default": 100,
"description": "Maximum number of programs to return, 1-328. Defaults to 100.",
"type": "integer",
"minimum": 1,
"maximum": 328
}
},
"required": [
"sub_indication",
"include_unverified",
"limit"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"coverage": {
"description": "Published Evidence Atlas coverage row with dated public CT.gov + FDA provenance."
},
"programs": {
"type": "array",
"items": {},
"description": "Program universe rows with CT.gov/FDA source links, registry-derived trial summary fields, source-linked financial_links facts, and explicit event_links when requested. Pending AI-serviced event rows remain agent_labeled, human_verified=false, review_status=pending_human_review, and require include_unverified=true."
},
"default_label_scope": {
"type": "string",
"const": "source_verified"
},
"unverified_rows_included": {
"type": "boolean"
}
},
"required": [
"coverage",
"programs",
"default_label_scope",
"unverified_rows_included"
],
"additionalProperties": false,
"description": "Evidence Atlas payload for one published sub-indication."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢query_drug_risk(project_id)
Fetch human-reviewed drug-specific clinical-risk signals for a project, including biomarker quality, Phase 1 ORR flag-only data, provenance, extractor versions, and pending-review counts. Use this before interpreting engine 2.6.0 drug-specific multipliers or flags.
Input Schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID of the project whose reviewed drug-specific clinical-risk signals should be queried."
}
},
"required": [
"project_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project UUID used to anchor the lookup."
},
"drug_name": {
"type": "string",
"description": "Project asset name used to match reviewed drug-specific signal rows."
},
"indication": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Project indication, if set."
},
"modality": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Project modality, if set."
},
"reviewed_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Number of reviewed approved/amended signals returned."
},
"pending_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Number of matching signal rows still waiting for human review."
},
"scoring_gate": {
"type": "string",
"const": "reviewed_at_not_null",
"description": "Human-review gate required before a signal can score."
},
"scoring_review_decisions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Review decisions eligible for scoring or surfacing."
},
"phase1_orr_treatment": {
"type": "string",
"const": "flag_only_engine_2_6_0",
"description": "Phase 1 ORR is surfaced but not scored in engine 2.6.0."
},
"signals": {
"type": "array",
"items": {},
"description": "Reviewed signal rows with provenance, extracted values, review state, and OR metadata."
},
"extractor_versions": {
"type": "array",
"items": {},
"description": "Recent extractor prompt versions that produced this signal family."
}
},
"required": [
"project_id",
"drug_name",
"indication",
"modality",
"reviewed_count",
"pending_count",
"scoring_gate",
"scoring_review_decisions",
"phase1_orr_treatment",
"signals",
"extractor_versions"
],
"additionalProperties": false,
"description": "Drug-specific clinical-risk substrate for a project. Returns reviewed signals only; pending rows are counted but excluded from scoring."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢query_benchmarks(indication, modality, metric)
Query PhaseFolio benchmark availability. Source-backed PoS benchmarks are available separately; network cost distributions and duration percentiles are planned but currently return coming_soon with null estimates rather than PhaseFolio's manual planning defaults.
Input Schema
{
"type": "object",
"properties": {
"indication": {
"type": "string",
"description": "Indication name (e.g. 'NSCLC', 'Rheumatoid Arthritis', 'Atopic Dermatitis'). Free-form; the engine fuzz-matches to the canonical indication taxonomy."
},
"modality": {
"description": "Optional modality filter ('Antibody', 'Small Molecule', 'Cell Therapy', 'Gene Therapy', etc.). Omit to return cross-modality stats.",
"type": "string"
},
"metric": {
"type": "string",
"enum": [
"pos",
"cost",
"duration",
"all"
],
"description": "Which benchmark family to request. Cost and duration network benchmarks are currently coming_soon and return no estimate; manual wizard defaults are not returned as benchmarks."
}
},
"required": [
"indication",
"metric"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "Stable version identifier of this benchmark snapshot, e.g. 'preview-2026-04'."
},
"coming_soon": {
"description": "Set when this metric family hasn't published yet; explains when it will.",
"type": "string"
},
"available_metrics": {
"type": "array",
"items": {
"type": "string"
},
"description": "Network benchmark metric families with published numeric estimates."
},
"planning_defaults_excluded": {
"type": "boolean",
"description": "True when manual PhaseFolio planning defaults are intentionally excluded."
},
"note": {
"type": "string",
"description": "Plain-language benchmark-availability and provenance note."
},
"headlines": {
"description": "Headline aggregates returned at the public tier.",
"type": "array",
"items": {
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "Metric name, e.g. 'Phase II RA trial cost (median, USD M)'."
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Numeric value; null when status='coming_soon'."
},
"n": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Sample size behind the value; null when status='coming_soon'."
},
"status": {
"type": "string",
"description": "Status, e.g. 'live' or 'coming_soon'."
}
},
"required": [
"metric",
"value",
"n",
"status"
],
"additionalProperties": false
}
},
"methodology_url": {
"type": "string",
"description": "Path to the methodology section that explains how these were computed."
}
},
"required": [
"version",
"available_metrics",
"planning_defaults_excluded",
"note",
"methodology_url"
],
"additionalProperties": false,
"description": "L1 (no-auth) returns a versioned headline set; L3 (bearer) will return granular slices once enough orgs are on the network."
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢verify_export(hash)
Verify a signed PhaseFolio export by content hash. Returns verification status (valid/tampered/unknown), issued timestamp, methodology version, and an anonymized originating-org identifier. Use this when a user shares a PhaseFolio asset snapshot and you want to confirm it's authentic before citing the analysis.
Input Schema
{
"type": "object",
"properties": {
"hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64-character hex SHA-256 of the signed artifact's content. Embedded in every signed PhaseFolio PDF (footer) and Excel (cover tab)."
}
},
"required": [
"hash"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"oneOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "valid"
},
"content_hash": {
"type": "string"
},
"signed_at": {
"type": "string",
"description": "ISO 8601 timestamp the artifact was signed by the engine."
},
"methodology_version": {
"type": "string",
"description": "Methodology version stamp at signing time, e.g. 'methodology@2026-04'."
},
"engine_version": {
"type": "string",
"description": "Engine version stamp at signing time. Sentinel 'unknown (pre-2026-05)' for legacy rows."
},
"benchmark_dataset_versions": {
"description": "Array of benchmark dataset versions used; '[]' for legacy rows."
},
"signals_used": {
"description": "Reviewed drug-specific signal provenance included in the signed content hash; [] for none or legacy rows."
},
"format": {
"type": "string",
"description": "Export format: 'pdf' or 'xlsx'."
},
"org": {
"type": "string",
"description": "Anonymized originating-org identifier, or display name if the org opted into public attribution."
},
"indication": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"modality": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"evidence_count": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"content_hash",
"signed_at",
"methodology_version",
"engine_version",
"benchmark_dataset_versions",
"signals_used",
"format",
"org",
"indication",
"modality",
"evidence_count"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "unknown"
},
"message": {
"type": "string"
}
},
"required": [
"status",
"message"
],
"additionalProperties": false
}
]
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢query_sec_deal_terms(indication, deal_type, since, until, min_confidence, ...)
Query SEC EDGAR deal-term extractions by indication, deal type, date range, confidence, and review state. Returns per-deal rows with source quotes and accession URLs for verification; aggregate engine medians use the separate backend aggregate function.
Input Schema
{
"type": "object",
"properties": {
"indication": {
"description": "Optional indication filter, e.g. 'antimicrobial'.",
"type": "string"
},
"deal_type": {
"description": "Optional deal type filter.",
"type": "string",
"enum": [
"license_in",
"license_out",
"collaboration",
"asset_acquisition"
]
},
"since": {
"description": "Optional inclusive effective_date lower bound in YYYY-MM-DD format.",
"type": "string"
},
"until": {
"description": "Optional inclusive effective_date upper bound in YYYY-MM-DD format.",
"type": "string"
},
"min_confidence": {
"default": 0.5,
"description": "Minimum extraction confidence threshold. Defaults to 0.5.",
"type": "number",
"minimum": 0,
"maximum": 1
},
"include_needs_review": {
"default": true,
"description": "Whether to include rows flagged needs_review. Defaults to true so admin users can see flags.",
"type": "boolean"
},
"limit": {
"default": 100,
"description": "Maximum rows to return, 1-500. Defaults to 100.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"min_confidence",
"include_needs_review",
"limit"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"deals": {
"type": "array",
"items": {},
"description": "SEC EDGAR deal-term rows with accession_number, source_quote, extractor_version, and needs_review."
},
"count": {
"type": "number",
"description": "Number of rows returned."
},
"filters": {
"description": "Filters applied by the backend query.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"deals",
"count"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢triage_asset(text, fields)
Produce a transparent, provenance-linked CONDITIONAL READ on a drug asset for deal triage. Pass either `text` (a teaser/abstract — fields are machine-extracted and the result is marked inputs_unconfirmed) or pre-confirmed `fields`. Returns a reasoning chain (each claim grounded or marked insufficient_evidence), mechanism-plausibility flags, PoS + landscape metrics, and a meta block with engine/methodology/synthesis versions. Does NOT compute rNPV. Not an autonomous verdict.
Input Schema
{
"type": "object",
"properties": {
"text": {
"description": "Unstructured asset text; triggers extraction (inputs_unconfirmed=true).",
"type": "string"
},
"fields": {
"description": "Pre-confirmed structured fields.",
"type": "object",
"properties": {
"modality": {
"type": "string"
},
"target": {
"type": "string"
},
"indication": {
"type": "string"
},
"stage": {
"type": "string"
},
"comparators": {
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"biomarker_strategy": {
"default": "none",
"type": "string"
}
},
"required": [
"modality",
"target",
"indication",
"stage",
"comparators",
"biomarker_strategy"
],
"additionalProperties": false
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}🟢get_methodology(section)
Fetch a PhaseFolio methodology section's full content (rNPV engine, backtest, PoS calibration, IRA framework, development paths, clinical stage normalization, evidence standards, network benchmarks, COGS benchmark, SG&A benchmark, tax benchmark, SEC EDGAR deal-term extraction). Designed for citation: each section has a stable URL and a methodology version identifier you can reference in analysis output.
Input Schema
{
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"rnpv",
"backtest",
"pos-calibration",
"ira-framework",
"development-paths",
"stage-normalization",
"evidence-standards",
"network-benchmarks",
"cogs-benchmark",
"sga-benchmark",
"tax-benchmark",
"sec-deal-terms"
],
"description": "Which methodology section to fetch. 'rnpv' covers the core risk-adjusted NPV calculation: cumulative PoS, midpoint-discounted risk-adjusted development costs, the S-curve ramp/plateau/LOE revenue lifecycle net of COGS/SG&A/tax, WACC discounting, the rNPV and Unadjusted-NPV equations, Monte Carlo / expected NPV, and one-at-a-time sensitivity; 'backtest' covers the validation methodology and AUC/CI numbers; 'pos-calibration' covers the indication × modality × biomarker matrix, expanded modality normalization into the eight benchmark baselines, the scored multipliers including the engine 2.6.0 biomarker_quality drug-specific multiplier (oncology solid tumor, Phase II/III), the Phase 1 ORR extracted-but-not-scored signal with its Phase 0 governance disclosure, and the non-scored drug-specific risk flags; 'ira-framework' covers the Year-9/Year-13 MFP cliff modeling and the separate IRA classification for expanded modalities such as RNA Therapeutics, Protein Degrader, Radioligand, Oncolytic Virus, and Cancer Vaccine; 'development-paths' covers development-path tiers, automatic-effect policy, and the no path-based PoS/default-multiplier rule; 'stage-normalization' covers exact clinical labels, work packages, canonical PoS gates, and the no label-only PoS modifier rule for Phase 1b/2a/2b, adaptive, pivotal, expansion, platform, bridging, and related labels; 'evidence-standards' covers source tiers and freshness rules; 'network-benchmarks' covers anonymization and cohort cuts; 'cogs-benchmark' covers the per-modality COGS% default bands and price-sensitivity methodology; 'sga-benchmark' covers the per-commercial-model SG&A% default bands (orphan/specialty/primary-care); 'tax-benchmark' covers the US-statutory-21% default tax rate, effective-rate reality, and the NOL cap; 'sec-deal-terms' covers the SEC EDGAR 8-K Item 1.01 deal-term extraction pipeline (cohort, extractor + classifier versions, fields extracted, v0 vs v1 scope)."
}
},
"required": [
"section"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"section_id": {
"type": "string",
"enum": [
"rnpv",
"backtest",
"pos-calibration",
"ira-framework",
"development-paths",
"evidence-standards",
"network-benchmarks",
"cogs-benchmark",
"sga-benchmark",
"tax-benchmark",
"sec-deal-terms"
],
"description": "Stable section identifier — reuse as the citation key."
},
"title": {
"type": "string"
},
"version": {
"type": "string",
"description": "Versioned identifier for this section's content, e.g. 'methodology@2026-04'."
},
"last_updated": {
"description": "ISO 8601 date of the last meaningful edit.",
"type": "string"
},
"citation_url": {
"type": "string",
"description": "Public canonical URL — cite this in analysis output."
},
"summary": {
"type": "string",
"description": "Short summary suitable for inline quoting (≤500 chars)."
}
},
"required": [
"section_id",
"title",
"version",
"citation_url",
"summary"
],
"additionalProperties": {}
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Canonical PhaseFolio envelope. Substantive payload is in `data`."
}Community
Evidence