phasefolio

Biotech rNPV/PoS engine for AI agents. Signed exports, evidence register, asset landscape.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
99%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~7,844Tokens (tool definitions)
~5.6 KBTypical response size
Significant attention impact (6.13% of 128k context)

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

npm@phasefolio/mcp0.1.4stdio

Remote endpoints

https://app.phasefolio.com/api/mcpstreamable-http

What it can do

Tool inventory

Tools (13)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools
verifiedversion not recorded13 tools