Skip to content

Reports ​

A report is a PDF built from opportunities that are already scored. run_analyses only scores. get_assessment only explains one verdict. Do not call create_report because the user said analyse.

You must be an editor or owner. Both tools need projects:write.

Create a Report ​

create_report

ArgumentNotes
project_idUUID
presetOptional lens. Omit for an unscoped report.
focusOptional extra sentence. Not a substitute for preset.
stagesOptional. Narrow to these stages. Omit for every scored stage.
namesOptional opportunity names. Replaces stage coverage. Do not pass row ids.

Presets:

PresetWhat It Emphasises
competitive_landscapeCompetitors, positioning, and whitespace
opportunity_synthesisA prioritized thesis
translational_focusEvidence from genetics and models through to the clinic
mechanism_focusPathways and open scientific questions
pipeline_overviewAssets, stages, and near-term catalysts
investment_briefThesis, risks, and decision points

stages: themes, targets, diseases, modalities.

A named lens sets preset and keeps full coverage. Named opportunities go in names. A stage ("targets only") goes in stages. "Full report" or "generate it" with no lens and no subset calls with no preset and no narrower set. Extra words go in focus. Do not ask again when one of those is already named.

Only "write a report", with no lens, stage, names, or full: ask once, then stop. Offer the six presets, plus the full scored set with no preset. Do not call create_report in that turn.

json
{
  "started": true,
  "id": "a1b2c3d4-e5f6-4789-8abc-def012345678",
  "title": "Kinase landscape",
  "status": "generating",
  "preset": "competitive_landscape",
  "coverage": "full",
  "opportunity_count": 12
}

coverage is full, stages, or named. status is generating. Say the report is generating. Do not invent a link or say the PDF is ready.

If a name is ambiguous or missing, the tool does not start a report:

json
{
  "started": false,
  "ok": false,
  "reason": "names",
  "problems": [{ "query": "kinase", "reason": "ambiguous", "names": ["Kinase A", "Kinase B"] }]
}

reason on a problem is ambiguous or none. Show names and ask which one. Do not guess. reason: "empty" means nothing scored matched the request.

If the opportunity payload cannot be loaded, the error status is 502.

List Reports ​

list_reports

ArgumentNotes
project_idUUID
limitOptional. Default 10, maximum 20. Must be a positive number.
json
{
  "total": 1,
  "reports": [
    {
      "id": "a1b2c3d4-e5f6-4789-8abc-def012345678",
      "title": "Kinase landscape",
      "status": "generating",
      "created_at": "2026-10-13T12:00:00.000Z"
    }
  ]
}

This is status, not the PDF. generating means not ready. "Is it done?" or "show my reports" is this tool. total is the full count, before limit.

Actionable insights for better R&D and strategy decisions.