Koskamo

PhaseFolio MCP

PhaseFolio provides an MCP server that connects AI agents to its biotech rNPV/PoS engine. It allows agents to query public benchmarks, verify signed exports, and access methodology documents. The server supports tools like query_benchmarks, verify_export, and get_methodology, enabling agents to trace drug development evidence to source records without requiring authentication for public data.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

PhaseFolio MCP logo, by PhaseFolioVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by PhaseFolio
MCP endpoint (Streamable HTTP)
https://app.phasefolio.com/api/mcp
Vendor documentation

What its tools do

10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

10 of 10 have a description · 10 of 10 declare behavior hints · 10 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to phasefolio.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query public development-stage and PoS benchmarks
  • Verify the authenticity of signed PhaseFolio exports
  • Retrieve citation-grade methodology documents

Source and maintenance

Vendor evidenceRegistry 0.1.4

Protocol and capabilities

Server
phasefolio 1.0.0
MCP protocol negotiated in check
2024-11-05
Tools
10 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Tools

10 advertised

get_project
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_project input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "project_id"
  ],
  "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."
    }
  },
  "additionalProperties": false
}
get_project output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "id",
        "name",
        "indication",
        "modality",
        "current_stage",
        "created_at",
        "updated_at"
      ],
      "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."
        },
        "modality": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Modality, e.g. 'Antibody', 'Small Molecule'. Null for unset."
        },
        "created_at": {
          "type": "string",
          "description": "ISO 8601 timestamp of project creation."
        },
        "indication": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Indication, e.g. 'NSCLC' or 'Rheumatoid Arthritis'. Null for unset."
        },
        "updated_at": {
          "type": "string",
          "description": "ISO 8601 timestamp of last project metadata update."
        },
        "current_stage": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Current development stage, e.g. 'Phase 2'. Null for unset."
        }
      },
      "additionalProperties": false
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
get_project annotations
{
  "title": "Get Project",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_scenarios
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

list_scenarios input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "project_id",
    "limit"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1,
      "description": "Maximum number of scenarios to return (1–200). Defaults to 50; raise for projects with many what-if branches."
    },
    "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."
    }
  },
  "additionalProperties": false
}
list_scenarios output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "label",
          "project_id",
          "is_base",
          "created_at",
          "updated_at"
        ],
        "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'."
          },
          "is_base": {
            "type": "boolean",
            "description": "True if this is the base case scenario for the project."
          },
          "created_at": {
            "type": "string",
            "description": "ISO 8601 timestamp."
          },
          "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."
          },
          "updated_at": {
            "type": "string",
            "description": "ISO 8601 timestamp of last scenario edit."
          }
        },
        "additionalProperties": false
      },
      "description": "Scenarios in the project, newest first."
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
list_scenarios annotations
{
  "title": "List Scenarios",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_scenario
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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 model output — every signed export ties back to this payload.

get_scenario input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "scenario_id"
  ],
  "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."
    }
  },
  "additionalProperties": false
}
get_scenario output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "id",
        "label",
        "project_id",
        "is_base",
        "created_at",
        "updated_at",
        "inputs",
        "result",
        "model_version",
        "modality",
        "mfp_discount"
      ],
      "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'."
        },
        "inputs": {
          "description": "Full scenario inputs blob (stages, costs, durations, PoS, commercial assumptions, IRA settings). Schema mirrors the wizard input model."
        },
        "result": {
          "description": "Full model output blob: eNPV (USD M), rNPV (USD M), cumulative_pos, per_stage_breakdown[], top sensitivity drivers, optional Monte Carlo percentiles."
        },
        "is_base": {
          "type": "boolean",
          "description": "True if this is the base case scenario for the project."
        },
        "modality": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Modality from inputs_json (echoed for convenience)."
        },
        "created_at": {
          "type": "string",
          "description": "ISO 8601 timestamp."
        },
        "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."
        },
        "updated_at": {
          "type": "string",
          "description": "ISO 8601 timestamp of last scenario edit."
        },
        "mfp_discount": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "IRA Maximum Fair Price discount magnitude (0–1) used in this scenario, if applicable."
        },
        "model_version": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Model version that produced `result` (the result's own engine_version key). Null when the scenario has not been computed."
        }
      },
      "additionalProperties": false
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
get_scenario annotations
{
  "title": "Get Scenario",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_evidence
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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?'

get_evidence input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "scenario_id"
  ],
  "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."
    }
  },
  "additionalProperties": false
}
get_evidence output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "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."
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
get_evidence annotations
{
  "title": "Get Evidence",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_dossier
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_dossier input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "scenario_id"
  ],
  "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."
    }
  },
  "additionalProperties": false
}
get_dossier output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "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."
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
get_dossier annotations
{
  "title": "Get Asset Snapshot",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
query_drug_risk
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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 model 2.6.0 drug-specific multipliers or flags.

query_drug_risk input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "project_id"
  ],
  "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."
    }
  },
  "additionalProperties": false
}
query_drug_risk output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "project_id",
        "drug_name",
        "indication",
        "modality",
        "reviewed_count",
        "pending_count",
        "scoring_gate",
        "scoring_review_decisions",
        "phase1_orr_treatment",
        "signals",
        "extractor_versions"
      ],
      "properties": {
        "signals": {
          "type": "array",
          "items": {},
          "description": "Reviewed signal rows with provenance, extracted values, review state, and OR metadata."
        },
        "modality": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Project modality, if set."
        },
        "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."
        },
        "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."
        },
        "scoring_gate": {
          "type": "string",
          "const": "reviewed_at_not_null",
          "description": "Human-review gate required before a signal can score."
        },
        "pending_count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "Number of matching signal rows still waiting for human review."
        },
        "reviewed_count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "Number of reviewed approved/amended signals returned."
        },
        "extractor_versions": {
          "type": "array",
          "items": {},
          "description": "Recent extractor prompt versions that produced this signal family."
        },
        "phase1_orr_treatment": {
          "type": "string",
          "const": "flag_only_engine_2_6_0",
          "description": "Phase 1 ORR is surfaced but not scored in model 2.6.0."
        },
        "scoring_review_decisions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Review decisions eligible for scoring or surfacing."
        }
      },
      "description": "Drug-specific clinical-risk substrate for a project. Returns reviewed signals only; pending rows are counted but excluded from scoring.",
      "additionalProperties": false
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
query_drug_risk annotations
{
  "title": "Query Drug-Specific Risk",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
query_benchmarks
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

query_benchmarks input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "indication",
    "metric"
  ],
  "properties": {
    "metric": {
      "enum": [
        "pos",
        "cost",
        "duration",
        "all"
      ],
      "type": "string",
      "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."
    },
    "modality": {
      "type": "string",
      "description": "Optional modality filter ('Antibody', 'Small Molecule', 'Cell Therapy', 'Gene Therapy', etc.). Omit to return cross-modality stats."
    },
    "indication": {
      "type": "string",
      "description": "Indication name (e.g. 'NSCLC', 'Rheumatoid Arthritis', 'Atopic Dermatitis'). Free-form; the model fuzz-matches to the canonical indication taxonomy."
    }
  },
  "additionalProperties": false
}
query_benchmarks output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "version",
        "available_metrics",
        "planning_defaults_excluded",
        "note",
        "methodology_url"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "Plain-language benchmark-availability and provenance note."
        },
        "version": {
          "type": "string",
          "description": "Stable version identifier of this benchmark snapshot, e.g. 'preview-2026-04'."
        },
        "headlines": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "metric",
              "value",
              "n",
              "status"
            ],
            "properties": {
              "n": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Sample size behind the value; null when status='coming_soon'."
              },
              "value": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Numeric value; null when status='coming_soon'."
              },
              "metric": {
                "type": "string",
                "description": "Metric name, e.g. 'Phase II RA trial cost (median, USD M)'."
              },
              "status": {
                "type": "string",
                "description": "Status, e.g. 'live' or 'coming_soon'."
              }
            },
            "additionalProperties": false
          },
          "description": "Headline aggregates returned at the public tier."
        },
        "coming_soon": {
          "type": "string",
          "description": "Set when this metric family hasn't published yet; explains when it will."
        },
        "methodology_url": {
          "type": "string",
          "description": "Path to the methodology section that explains how these were computed."
        },
        "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."
        }
      },
      "description": "L1 (no-auth) returns a versioned headline set; L3 (bearer) will return granular slices once enough orgs are on the network.",
      "additionalProperties": false
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
query_benchmarks annotations
{
  "title": "Query Network Benchmarks",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_export
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

verify_export input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "hash"
  ],
  "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)."
    }
  },
  "additionalProperties": false
}
verify_export output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "oneOf": [
        {
          "type": "object",
          "required": [
            "status",
            "content_hash",
            "signed_at",
            "methodology_version",
            "model_version",
            "engine_version",
            "benchmark_dataset_versions",
            "signals_used",
            "format",
            "org",
            "indication",
            "modality",
            "evidence_count"
          ],
          "properties": {
            "org": {
              "type": "string",
              "description": "Anonymized originating-org identifier, or display name if the org opted into public attribution."
            },
            "format": {
              "type": "string",
              "description": "Export format: 'pdf' or 'xlsx'."
            },
            "status": {
              "type": "string",
              "const": "valid"
            },
            "modality": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "signed_at": {
              "type": "string",
              "description": "ISO 8601 timestamp the artifact was signed at."
            },
            "indication": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "content_hash": {
              "type": "string"
            },
            "signals_used": {
              "description": "Reviewed drug-specific signal provenance included in the signed content hash; [] for none or legacy rows."
            },
            "model_version": {
              "type": "string",
              "description": "Model version stamp at signing time. Sentinel 'unknown (pre-2026-05)' for legacy rows."
            },
            "engine_version": {
              "type": "string",
              "description": "Deprecated alias of model_version, kept for existing clients."
            },
            "evidence_count": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "methodology_version": {
              "type": "string",
              "description": "Methodology version stamp at signing time, e.g. 'methodology@2026-04'."
            },
            "benchmark_dataset_versions": {
              "description": "Array of benchmark dataset versions used; '[]' for legacy rows."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "object",
          "required": [
            "status",
            "message"
          ],
          "properties": {
            "status": {
              "type": "string",
              "const": "unknown"
            },
            "message": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      ]
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
verify_export annotations
{
  "title": "Verify Signed Export",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
triage_asset
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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 metrics, and a meta block with model/methodology/synthesis versions. Does NOT compute rNPV. Not an autonomous verdict.

triage_asset input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "text": {
      "type": "string",
      "description": "Unstructured asset text; triggers extraction (inputs_unconfirmed=true)."
    },
    "fields": {
      "type": "object",
      "required": [
        "modality",
        "target",
        "indication",
        "stage",
        "comparators",
        "biomarker_strategy"
      ],
      "properties": {
        "stage": {
          "type": "string"
        },
        "target": {
          "type": "string"
        },
        "modality": {
          "type": "string"
        },
        "indication": {
          "type": "string"
        },
        "comparators": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": []
        },
        "biomarker_strategy": {
          "type": "string",
          "default": "none"
        }
      },
      "description": "Pre-confirmed structured fields.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
triage_asset output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {}
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
triage_asset annotations
{
  "title": "Triage Asset",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_methodology
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch a PhaseFolio methodology section's full content (rNPV model, backtest, PoS calibration, IRA framework, development paths, deal-term modelling, holding valuation, 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.

get_methodology input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "section"
  ],
  "properties": {
    "section": {
      "enum": [
        "rnpv",
        "backtest",
        "pos-calibration",
        "ira-framework",
        "development-paths",
        "deal-term-modelling",
        "holding-valuation",
        "stage-normalization",
        "evidence-standards",
        "network-benchmarks",
        "cogs-benchmark",
        "sga-benchmark",
        "tax-benchmark",
        "sec-deal-terms"
      ],
      "type": "string",
      "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 model 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; 'deal-term-modelling' covers how licensing deal terms map onto a scenario's deal structure (term-model mapping v1): what is modelled, not modelled and refused, the territory restriction and the approximations it names, milestone timing at stage ends, the cost-share rule, and the non-USD conversion-rate refusal; 'holding-valuation' covers how a Workspace holding is valued (scenario, share of asset value, look-through estimate, cost, not valued): each method's inputs, reason codes and completeness, the totals rules (never added across bases or currencies, estimates left out by default) and what the look-through estimate ignores; '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' is the retirement notice for the SEC EDGAR deal-term source (retired 2026-09-27), with its frozen versions."
    }
  },
  "additionalProperties": false
}
get_methodology output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "section_id",
        "title",
        "version",
        "citation_url",
        "summary"
      ],
      "properties": {
        "title": {
          "type": "string"
        },
        "summary": {
          "type": "string",
          "description": "Short summary suitable for inline quoting (≤500 chars)."
        },
        "version": {
          "type": "string",
          "description": "Versioned identifier for this section's content, e.g. 'methodology@2026-04'."
        },
        "section_id": {
          "enum": [
            "rnpv",
            "backtest",
            "pos-calibration",
            "ira-framework",
            "development-paths",
            "deal-term-modelling",
            "holding-valuation",
            "evidence-standards",
            "network-benchmarks",
            "cogs-benchmark",
            "sga-benchmark",
            "tax-benchmark",
            "sec-deal-terms"
          ],
          "type": "string",
          "description": "Stable section identifier — reuse as the citation key."
        },
        "citation_url": {
          "type": "string",
          "description": "Public canonical URL — cite this in analysis output."
        },
        "last_updated": {
          "type": "string",
          "description": "ISO 8601 date of the last meaningful edit."
        }
      },
      "additionalProperties": {}
    }
  },
  "description": "Canonical PhaseFolio envelope. Substantive payload is in `data`.",
  "additionalProperties": false
}
get_methodology annotations
{
  "title": "Get Methodology Section",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
464 ms
95th percentile latency
464 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 464 ms · metadata changed · 10 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http phasefolio-mcp https://app.phasefolio.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add phasefolio-mcp --url https://app.phasefolio.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable phasefolio-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "phasefolio-mcp": {
      "url": "https://app.phasefolio.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "phasefolio-mcp": {
      "type": "streamableHttp",
      "url": "https://app.phasefolio.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start phasefolio-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "phasefolio-mcp": {
      "type": "http",
      "url": "https://app.phasefolio.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http phasefolio-mcp https://app.phasefolio.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://app.phasefolio.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "phasefolio-mcp": {
      "serverUrl": "https://app.phasefolio.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like PhaseFolio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run PhaseFolio MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing