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

PAPI: Persistent Adaptive Project Intelligence

NPM · @PAPI-AI/SERVER · 2 COMPONENTS · SCANNED SEP 20

Adaptive plan/build/review cycles for AI coding assistants, persisted across sessions.

+2 this week 77 Trust /100
Trust breakdown (7 categories)

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

Supply Chain Security88
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known medium-severity CVE affects @anthropic-ai/sdk 0.82.0, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 33 of 105 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: the license (Elastic-2.0) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 4 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability63
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 18191 tokens (~324/item across 56 items; 56 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 56 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the PAPI: Persistent Adaptive Project Intelligence MCP server?

PAPI: Persistent Adaptive Project Intelligence runs locally as an npm package, launched with npx -y @papi-ai/server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @papi-ai/server

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

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

  • 20 Sept 26 +1
    • Stability: 0.97 → pass security
  • 19 Sept 26 −1
    • Stability: pass → 0.97 functional
  • 18 Sept 26 +1
    • Stability: 0.97 → pass security
  • 17 Sept 26 −1
    • Stability: pass → 0.97 functional
  • 16 Sept 26 +1
    • Stability: 0.97 → pass security
  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 −2
    • Stability: pass → 0.87 functional
  • 10 Sept 26 +1
    • Stability: 0.97 → pass security
Diagnostics

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

Captured 20 Sept 2026 · Analysed npm/@papi-ai/server@0.7.85

Provenance No attestation

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

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-p7fg-763f-g4gf CVE-2026-41686 medium yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 105 packages
Packages resolved 105
Stale 33
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 56 exposed · ~18,191 tokens

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

Tool Tokens
ad_hoc ~714

Record work done outside the normal cycle. Creates a Done task with a lightweight build report, or associates work with an existing task if task_id is provided (without changing task status — use build_execute for status transitions). Use for quick fixes, bug patches, or ad-hoc changes. Does not call the Anthropic API.

NameTypeReqDescription
cycletask-2352: promote this ad-hoc work into a cycle so it shows on the hub and is counted as INJECTED work (distinct from planned). Omit for the default behaviour (an immediate Done task with no cycle).…
effortstringActual effort spent (default: S).
epicstringEpic this relates to (default: "Platform").
holdbooleantask-2477: held-adhoc. When true, do NOT force-complete or commit to main — record the task In Review pinned to the NEXT cycle (current + 1) so the planner won't re-plan it, and return a branch/PR di…
modulestringModule this relates to (default: "Core").
notesstringAdditional context about the work.
prioritystringTask priority (default: P2 Medium). Use P1 for important fixes, P0 for critical incidents.
projectstringProject id (UUID) or slug to record this work under, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Use project_switch to change the se…
proposalobjecttask-3273, OPTIONAL: propose a Decision or a Convention you settled while doing this work. PAPI never mints one for you — a proposal passing all four admission tests is QUEUED for the owner behind a…
stagestringtask-2352: where promoted work lands. "done" (default) records it as Done + reviewed. "release" lands it In Review so it is reviewed and released WITH the cycle (fold-in) instead of being force-compl…
task_idstringExisting task ID to associate this work with (e.g. "task-42"). When provided, appends notes and attaches a build report to the existing task without changing its status.
titlestringWhat was done — becomes the task title (required when creating new task, optional when completing existing via task_id).
typestringTask type (default: inferred from description — "fix"/"bug" → bug, "research"/"investigate" → research, otherwise task).

No output schema declared.

No examples provided.

ad_view ~243

View one or all Active Decisions with full bodies. Use when you need to read the complete reasoning and evidence behind a specific AD before running strategy_change.

NameTypeReqDescription
ad_idstringSpecific AD to fetch (e.g. "AD-12"). Omit to list all active decisions with full bodies.
fieldsstringOptional sparse-field projection — comma-separated field names, e.g. "title,confidence". Returns a compact table of ONLY those fields (id is always included) instead of full AD bodies, which is far c…
include_supersededbooleanInclude superseded (retired) ADs. Default false.
limitintegerMax decisions to return. Omit to return all.
metabooleanAppend a {total, filtered, returned, limit, offset} envelope so you can tell a truncated result from a complete one. Default false.
offsetintegerSkip the first N decisions (pagination). Default 0.

No output schema declared.

No examples provided.

agent_list ~91

List the sub-agents discovered in the project's `.claude/agents/*.md` files (read-only). Returns each agent's name and description so you can see which specialised sub-agents are available before dispatching one via the Task/Agent tool. Discovery only — does not invoke or manage agents.

NameTypeReqDescription
include_pathbooleanInclude each agent's project-relative file path in the output. Default false.

No output schema declared.

No examples provided.

backlog_import ~431

Import an existing backlog from another tool into PAPI as Backlog tasks, removing the "start from an empty board" wall. PAPI never connects to the source tool — YOU (the host) read the export and pass it here. Flat-file sources (csv, markdown) take a `raw` string; structured sources (linear) take a `rows` array you read via that tool's MCP. Import is one-way and idempotent: re-running the same import does NOT create duplicates. Shipped sources: csv, markdown, linear. trello/todoist/notion are reserved but not implemented yet. Does not call the Anthropic API.

NameTypeReqDescription
dry_runbooleanWhen true, normalise and dedup-check without writing anything. Use this to preview what would be imported. Default: false.
modulestringModule to file imported tasks under (default "Core").
projectstringProject id (UUID) or slug to import into, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. PASS THIS WHENEVER YOU KNOW WHICH REPO THE SES…
rawstringRaw export text for flat-file sources. CSV: a header row + data rows (title/name column required; optional notes/description, status/state, priority, complexity/estimate, id). Markdown: a checklist (…
rowsarrayPre-read rows for structured sources. For linear: an array of issues you read via the Linear MCP, each like { identifier, title, description, state: { name }, priority (0-4), estimate, url }.
sourcestringyesThe tool the backlog came from. csv/markdown read a `raw` string; linear reads a `rows` array of issues. trello/todoist/notion are reserved extension points (not implemented yet).

No output schema declared.

No examples provided.

board_archive ~119

Archive tasks from the Board to the archive file. When both phase and status are provided, only tasks matching BOTH are archived (AND logic). When only one is provided, all matching tasks are archived. Does not call the Anthropic API.

NameTypeReqDescription
phasestringPhase(s) to archive, comma-separated (e.g. "Phase 5: MCP Server MVP").
statusstringStatus(es) to archive, comma-separated (e.g. "Archived" or "Done,Archived"). Tasks matching any listed status will be archived.

No output schema declared.

No examples provided.

board_deprioritise ~432

Remove a task from the current cycle. Four actions: "backlog" (not now, maybe later — preserves handoff), "defer" (valid but premature — hidden from planner), "block" (waiting on external dependency — visible on board but skipped by planner), "cancel" (don't want this — permanently closed with reason). When a user rejects a task, ALWAYS ask which action they want. Does not call the Anthropic API.

NameTypeReqDescription
actionstring"backlog" = not now, maybe later (preserves handoff). "defer" = valid but premature (hidden from planner). "block" = waiting on external dependency (visible but skipped by planner — reason required).…
blocker_refstringRequired when blocker_type is set. The identifier being waited on: a task display-id (depends-on), an AD/decision id (decision-gate), or an owner_action id (owner-action).
blocker_typestringOptional (action="block" only). Typed blocker so the plan/orient scan can auto-detect when the block clears. "depends-on" = another task must be Done (blocker_ref = task display-id). "decision-gate"…
deferbooleanDEPRECATED — use action instead. If true, equivalent to action="defer".
phasestringOptional new phase (only applies to "backlog" and "defer" actions).
prioritystringOptional new priority (only applies to "backlog" action).
reasonstringWhy this task is being removed. Required for "cancel", recommended for "defer".
task_idstringyesThe task ID to act on.

No output schema declared.

No examples provided.

board_edit ~466

Edit fields on an existing task. Supports title, priority, complexity, module, epic, phase, notes (with notes_mode for append/replace/clear), status, maturity, and cycle (number or null). Pass task_id plus any fields to update. Does not call the Anthropic API.

NameTypeReqDescription
actual_efforttask-2182: correct the actual effort on this task's LATEST build report (fixes a mis-recorded actual).
complexitystringNew complexity/effort estimate.
cyclenumber|nullCycle assignment. Pass a cycle number to assign, or null to remove from any cycle. Validated against existing cycles. Replaces the prior workaround of editing cycle_tasks.cycle directly via SQL.
epicstringNew epic assignment.
estimated_efforttask-2182: correct the estimated effort on this task's LATEST build report (fixes a mis-recorded estimate). Updates the build_reports row, not the task — feeds the next estimation-accuracy recompute.
maturitystringNew maturity level.
modulestringNew module assignment.
notesstringNote content. Default behaviour is append — see notes_mode to control.
notes_modestringHow to apply the notes value. append (default) = add a new dated entry above existing notes; replace = overwrite all existing notes; clear = empty the notes field (notes value ignored).
phasestringNew phase assignment.
prioritystringNew priority level.
projectstringProject id (UUID) or slug whose board this task lives on, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Use project_switch to change t…
statusstringNew status. Must be a valid transition from the current status.
task_idstringyesThe task ID to edit (e.g. "task-42").
titlestringNew task title.

No output schema declared.

No examples provided.

board_reconcile ~144

Holistic board review — backlog + deferred tasks in one pass. Surfaces strategic context (ADs, phases, docs), grouping signals, merge candidates, priority drift, and stale tasks. "prepare" assembles context for you to analyse; "apply" commits your decisions after user confirmation. Does not call the Anthropic API.

NameTypeReqDescription
llm_responsestringYour reconciliation output (mode "apply" only). Must include a JSON block after <!-- PAPI_RECONCILE_OUTPUT --> with a "corrections" array.
modestring"prepare" (default) assembles full board context. "apply" commits your confirmed decisions.

No output schema declared.

No examples provided.

board_view ~529

View the Board. To find a SPECIFIC task or subset, FILTER FIRST — do not dump the whole board: pass task_id for one task (full detail), query="<text>" for a title/notes substring match, or cycle=<n> for one cycle. Combine with status/phase. By default shows active tasks only (excludes Done/Cancelled), sorted by priority, limited to 50; titles are truncated in the table (single-task lookup shows the full title). Use status="all" to see everything, mode="summary" for counts only. Does not call the Anthropic API.

NameTypeReqDescription
assigneestringFilter by who holds the task on a shared project. "me" shows only your own claims; "unclaimed" shows the open pool nobody has taken. Omit to see everything. On a multi-member project the board also g…
cyclenumberFilter to tasks assigned to this cycle number.
fieldsstringOptional sparse-field projection — comma-separated column names, e.g. "title,status". Returns ONLY those columns (id is always included so rows stay addressable) which is far cheaper on session conte…
limitnumberMax tasks to return (default: 50).
metabooleanAppend a {total, filtered, returned, limit, offset} envelope so you can tell a truncated result from a complete one. Default false.
modestringOutput mode: "full" (default) shows task table, "summary" shows counts only.
offsetnumberSkip first N tasks for pagination (default: 0).
phasestringFilter to tasks in this phase (e.g. "Phase 5").
querystringCase-insensitive substring match on task title OR notes. Returns only matching tasks — use this instead of dumping the whole board to find something.
statusstringStatus filter: omit for active tasks only, "all" for everything, or comma-separated statuses (e.g. "In Progress,Backlog").
task_idstringDirect lookup of a single task by its display_id (e.g. "task-2154"). Returns full untruncated detail for just that task — no board scan. Takes precedence over the list filters.

No output schema declared.

No examples provided.

bug ~822

Report a bug OR submit an idea. Routing: a bug about PAPI itself (a PAPI tool/MCP error, the connector, a handoff/cycle problem) auto-submits UPSTREAM to PAPI maintainers with diagnostics — you do NOT need to set report=true for these. A bug in the user's OWN project auto-files as a Backlog task on their board. IMPORTANT: report=true is ONLY for a genuine PAPI-product defect — it is NOT the catch-all for "not about my app". A bug in the user's harness/editor/OS/git/other tooling (e.g. Claude Code, Codex, VS Code, a shell command) is NOT a PAPI bug: file it on the user's own board (report=false / default) or that tool's own tracker, never upstream. Override the routing explicitly: report=true forces upstream (PAPI-product only), report=false forces the user's own board. Set `type` ("bug"/"idea") and optional notify-when-fixed / contact-ok consent for upstream submissions. Does not call the Anthropic API.

NameTypeReqDescription
contact_okbooleanReport mode only: set true if the user consents to the PAPI team reaching out about this submission.
epicstringEpic this relates to (default: "Platform").
introduced_by_taskstringOPTIONAL. Report mode only: the task id (e.g. "task-3101") that SHIPPED this defect, if it has actually been established — a git blame, a bisect, or a change you can point at. This is the ESCAPED axi…
modulestringModule this relates to (default: "Core").
notesstringSteps to reproduce, expected vs actual behaviour, or other context.
notify_when_fixedbooleanReport mode only: set true if the user wants to be notified when this submission is resolved (surfaced in a later orient/MCP call and on their dashboard).
phasestringTarget phase (default: current active phase).
projectstringBOARD MODE ONLY. Project id (UUID) or slug to file this bug under, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. It CANNOT redirect an…
reportbooleanRouting override. Leave UNSET to auto-route: PAPI-product bugs go upstream to maintainers, project-domain bugs go to the user's board. Set true ONLY for a genuine PAPI-product defect (PAPI tool/MCP/c…
severitystringBug severity (default: "major"). Critical = P0, Major = P1, Minor = P2.
textstringyesThe bug description — becomes the task title (default mode) or report description (report mode).
typestringReport mode only: submission kind — "bug" (default) or "idea" (feature request / suggestion). Both route to the same upstream PAPI triage.

No output schema declared.

No examples provided.

bug_list ~147

List the upstream bug/idea reports YOU filed to the PAPI maintainers (via the `bug` tool with report=true or an auto-routed PAPI bug), newest first. Read-only. Shows each report's id, kind (bug/idea), triage status, description, and when it was filed. Scoped to your own submissions only — never another user's. Requires a database adapter (pg or hosted proxy); the local md adapter has no upstream store. Does not call the Anthropic API.

NameTypeReqDescription
limitintegerOptional maximum number of reports to return. Omit to return all. Reserved for future pagination — current behaviour returns all your reports newest-first regardless of value.

No output schema declared.

No examples provided.

build_cancel ~62

Cancel a build task with a reason. Sets the task status to Cancelled and records the closure reason. Does not call the Anthropic API.

NameTypeReqDescription
reasonstringyesReason for cancelling the task.
task_idstringyesThe task ID to cancel.

No output schema declared.

No examples provided.

build_describe ~59

Show the full BUILD HANDOFF for a specific task, including scope, acceptance criteria, and implementation guidance. Does not call the Anthropic API.

NameTypeReqDescription
task_idstringyesThe task ID to describe (e.g. "task-042").

No output schema declared.

No examples provided.

build_execute ~2,238

Build one task with its spec, its branch and its record kept for you. Starting a build hands back that task's BUILD HANDOFF (scope, what is out of scope, acceptance criteria, the decisions that constrain it, and what recent builds in the same area already learned or ruled out), puts the work on the right branch, and marks the task In Progress so a second session can see it is taken. Completing it records what actually happened: effort against estimate, surprises, dead ends, and bugs found outside the scope. That record is what later cycles are sized and planned from, so nothing has to be remembered. Call with just task_id to start (returns BUILD HANDOFF, creates feature branch, marks In Progress). After implementing the task, you MUST call build_execute again with all report fields (completed, effort, estimated_effort, surprises, discovered_issues, architecture_notes) to finish — do not wait for user confirmation between start and complete. Never call on tasks that are already In Review or Done. Does not call the Anthropic API. Set light=true to skip branch/PR creation (commits to current branch). Set PAPI_LIGHT_MODE=true in env to default all builds to light mode.

NameTypeReqDescription
acceptance_confirmedbooleantask-2833: set true to assert every acceptance criterion in the task's BUILD HANDOFF was met. Required to record a completed:"yes" build when the handoff lists acceptance criteria — without it, build…
acceptance_resultsarraytask-3223, OPTIONAL: per-criterion results for the handoff's ACCEPTANCE CRITERIA, matched back to each criterion by `text`. A criterion may declare a typed `check` (command / http / grep) — YOU run i…
architecture_notesstringPatterns established or decisions made during this build that AFFECT FUTURE WORK. Good: "Created shared service layer for cockpit data — all cockpit components should use it." Bad: "Used React hooks.…
brief_implicationsarrayStrategic learnings discovered during this build that the planner and strategy review should know about. Include when a build reveals: (1) something about assumptions that were wrong, (2) competitive…
completedstringWhether the build was completed. Required for complete.
corrections_countintegerNumber of times the user corrected or redirected the build during implementation. Captures informal pushback that bypasses review_submit. Default 0.
dead_endsstringCONTRACT: send this on every complete. List approaches you tried and RULED OUT during this build, with why each failed. Example: "Tried Supabase realtime but Edge Functions can't hold persistent conn…
decisionobjecttask-2933: answer a loop-detection gate. After N failed build attempts (default 3, PAPI_BUILD_LOOP_THRESHOLD) build_execute REFUSES to start and asks for a decision. Re-run with this to answer. Only…
discovered_issuesstringA REAL bug or gap OUTSIDE this task's scope that needs its own task. Include severity (P0-P3). INCLUSION TEST — file it only if BOTH are true: (1) the bug would exist even if this task had never run,…
effortActual effort: XS, S, M, L, or XL. Required for complete.
estimated_effortEstimated effort from the BUILD HANDOFF. Required for complete.
findingsarrayOPTIONAL, and the highest-leverage field here. One entry per DISCRETE thing you found, instead of (or alongside) the prose blobs. The point is `disposition`: PAPI has never had a verb for "found it,…
fixed_issuesarraycycle_learnings UUIDs of discovered issues this build FIXED. SEND THIS whenever your work closed an issue listed under "OPEN DISCOVERED ISSUES" in the BUILD HANDOFF — that block prints the exact UUID…
handoff_accuracyobjectStructured handoff accuracy assessment. Optional — provides granular accuracy data beyond scope_accuracy.
lightbooleanLight-ceremony mode for XS/S tasks. Skips feature branch creation and PR. Work stays on current branch. Build report is still captured. Default false.
modelstringThe model/agent that executed this build, self-reported, e.g. 'claude-opus-4' / 'gpt-5' — optional; powers attributed-intelligence analytics. PAPI never selects a model (AD-58) — report the model YOU…
previewobjectOptional. For a build that touched USER-FACING UI: tell the owner how to SEE the result locally so reviewing it doesn't mean reading code or asking "show me". urls = the localhost route(s) to open (e…
production_verificationobjectRequired when the branch diff touches a trigger surface (install snippets, MCP transport, auth/middleware, OAuth well-known, vercel.json, supabase functions, Dockerfile, Procfile, env declarations).…
proposalobjecttask-3273, OPTIONAL: propose a Decision or a Convention you settled while building this. PAPI never mints one for you — a proposal that passes all four admission tests is QUEUED for the owner behind…
related_decisionsstringComma-separated AD IDs this build validated or challenged (e.g. "AD-5,AD-12"). Optional but high-value: name any Active Decision your work CONFIRMED, CONTRADICTED, or DEPENDED ON — this is the primar…
resolves_learningsarrayIDs of cycle_learnings this build directly resolves or acts on. Use when the BUILD HANDOFF references a prior learning entry (e.g. "addresses learning abc-123"). Links the learning to this task as ac…
scope_accuracystringHow well the BUILD HANDOFF matched actual work. Optional for complete.
surprisesstringWhat was DIFFERENT from what you expected? Scope changes, wrong assumptions, unexpected complexity, or missing infrastructure. NOT implementation details. Good: "Assumed table had status column but i…
task_idstringyesThe task ID to execute.

No output schema declared.

No examples provided.

build_list ~196

List cycle tasks that have BUILD HANDOFFs ready for execution. Shows task ID, title, status, priority, and complexity. In Progress tasks appear first, then Backlog. Does not call the Anthropic API.

NameTypeReqDescription
fieldsstringOptional sparse-field projection — comma-separated column names, e.g. "title,status". Returns a compact table of ONLY those columns (id is always included) instead of the full per-task block, which i…
limitintegerOptional maximum number of tasks to return per section (In Progress / Backlog / Blocked). Omit to return all.
metabooleanAppend a {total, filtered, returned, limit, offset} envelope so you can tell a truncated result from a complete one. Default false.

No output schema declared.

No examples provided.

contributor_add ~225

Add a contributor to a project by email, or change an existing member's role (owner-only). The person must already have a PAPI account. Grants membership on project_contributors. Pass role="editor" for a working teammate who needs to run the full cycle — the default, "viewer", cannot release. Calling it again with a different role promotes or demotes that member.

NameTypeReqDescription
emailstringyesEmail of the PAPI account to add (e.g. "wes@example.com").
projectstringProject id (UUID) or slug to add this contributor to, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Does NOT change your default proje…
rolestringMembership role. "editor" can run the full build/review/release cycle; "viewer" has read-only visibility and is REFUSED by the release gate. Defaults to "viewer" for a new member; omit it when changi…

No output schema declared.

No examples provided.

contributor_list ~61

List the current project's contributors (any project member). Shows each member's email, display name, role, and join date. Does not call the Anthropic API.

NameTypeReqDescription
limitintegerOptional maximum number of contributors to return. Omit to return all.

No output schema declared.

No examples provided.

contributor_remove ~47

Remove a contributor from the current project by email (owner-only). Deletes their project_contributors row — they lose contributors-tier visibility.

NameTypeReqDescription
emailstringyesEmail of the contributor to remove.

No output schema declared.

No examples provided.

convention_declare ~237

Record a settled build rule once so every future task on this project is told about it, instead of re-explaining it each session. Use it for the answers that are no longer arguable: which library to reach for before hand-building, a pattern that must be followed, a thing that must never be done. Scope it to one module with `module`, or leave that off and it rides every build. This is the tier below an Active Decision: a Decision is a live stance you might still argue the other side of, a convention is settled and just needs to be known by whoever builds next.

NameTypeReqDescription
modulestringOptional module to scope the rule to (e.g. "Dashboard"). Omit for a rule that applies to every build on this project.
projectstringProject id (UUID) or slug to target for THIS call only. Must be a project on your account.
rulestringyesThe rule, in plain language, as an instruction to whoever builds next (e.g. "Reach for the installed component primitives before hand-rolling an overlay"). Max 2000 characters.

No output schema declared.

No examples provided.

convention_list ~99

List the build rules this project has declared, with the id needed to remove one. Shows which rules ride every build and which are scoped to a single module.

NameTypeReqDescription
modulestringOptional: show only the rules that would apply to a build in this module (project-wide rules plus that module's own).
projectstringProject id (UUID) or slug to target for THIS call only. Must be a project on your account.

No output schema declared.

No examples provided.

convention_remove ~90

Remove a declared build rule so it stops appearing in future builds. Takes the id from `convention_list`. Existing handoffs already generated are unaffected; the next build no longer carries it.

NameTypeReqDescription
idstringyesThe convention id, from `convention_list`.
projectstringProject id (UUID) or slug to target for THIS call only. Must be a project on your account.

No output schema declared.

No examples provided.

discovered_issue_resolve ~164

Mark a discovered_issue (cycle_learnings row, category="issue") as resolved. Pass the learning_id you saw in orient / learning_action list output. The row stays in the database for history, but default reads exclude it. Use this when the underlying fix has actually landed — NOT when you just created a follow-up task (that is `learning_action mark` with action_taken="task_created"). Optional `note` is recorded as resolved_by.

NameTypeReqDescription
issue_idstringyesThe cycle_learnings id (UUID) to mark resolved. Find it via `learning_action list` or recent orient output.
notestringOptional resolved_by tag — e.g. the task id whose merge resolved this issue, or the agent name. Recorded for audit.

No output schema declared.

No examples provided.

doc_action_promote ~290

Promote a single pending action from a registered doc into a Backlog task. The new task gets a `Reference:` line pointing to the source doc, and the doc action is marked resolved with `linkedTaskId` set. Use to close the research-to-action loop — turn unactioned findings into trackable cycle work. Identify the doc by `doc_path` (preferred) or `doc_id`, and the action by 0-based `action_index` (as listed in `doc_search` output).

NameTypeReqDescription
action_indexnumberyes0-based index of the action in the doc's actions array.
complexitystringTask complexity. Defaults to "Small".
doc_idstringUUID of the source doc. Either this or doc_path is required.
doc_pathstringPath of the source doc (e.g. "docs/research/funding-landscape.md"). Either this or doc_id is required.
epicstringTask epic. Defaults to "Platform".
modulestringTask module. Defaults to "Core".
notesstringAdditional notes. A `Reference:` line pointing at the source doc is always prepended.
prioritystringTask priority. Defaults to "P2 Medium".
titlestringOptional task title override. Defaults to the action description (truncated).

No output schema declared.

No examples provided.

doc_delete ~152

Permanently delete a registered doc. Guarded: ALLOWED only for the doc's creator or the project owner, and only when nothing depends on it — a delete is BLOCKED if another doc supersedes it, or a task references it (doc_ref) or a linked action. The guard never cascade-deletes dependents; resolve the dependency first. Identify the doc by `doc_path` (preferred) or `doc_id`.

NameTypeReqDescription
doc_idstringUUID of the doc to delete. Either this or doc_path is required.
doc_pathstringPath of the doc to delete (e.g. "docs/research/funding-landscape.md"). Either this or doc_id is required.

No output schema declared.

No examples provided.

doc_read ~231

Read a registered document's stored BODY back out of the database, and optionally restore it to disk. This is the recovery path: when a doc is gone from the working tree — a branch switch, a stash, a gitignored docs/private/ folder that never made it into git — doc_read is how the content comes back. Identify the doc by path or UUID via `id_or_path`. Pass `write_to_disk: true` to write the body back to its registered path; an existing file with DIFFERENT content is never overwritten (the conflict is reported and nothing is written). Bodies are stored by doc_register from C356 onward, so a doc registered before that, or one whose body was skipped at a storage ceiling, has metadata but no body — doc_read says so plainly rather than returning an empty document.

NameTypeReqDescription
id_or_pathstringyesRegistered path (e.g. "docs/private/notes.md") or the doc UUID.
write_to_diskbooleanWrite the body back to its registered path (default false — read only). Refuses to overwrite a file whose content differs.

No output schema declared.

No examples provided.

doc_register ~626

Register or update a document in the doc registry. Called after finalising a research/planning doc, or when build_execute detects unregistered docs. Stores metadata, a structured summary, AND the document body (task-3017) so a doc survives a branch switch, an autostash, or a gitignored docs/private/ folder — pass `body`, or omit it and the file is read from disk when a local workspace is available. Bodies are stored per-user against a plan ceiling; at the ceiling the registration still succeeds and only the body is skipped. Only .md paths are accepted. An untracked doc is still committed at registration to make it durable (or you get a loud warning if it cannot be). Re-registering an existing doc updates its summary, tags, actions, type, and status (upsert). Visibility and owner are not changed on re-register.

NameTypeReqDescription
actionsarrayActionable findings from the document.
bodystringOPTIONAL full markdown body. Omit it and the file is read from disk when a local workspace is available; on a hosted-only session with no body supplied, metadata is registered and the tool says the b…
cyclenumberyesCurrent cycle number.
pathstringyesRelative path from project root (e.g. "docs/research/funding-landscape.md").
projectstringProject id (UUID) or slug to register this doc under, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Use project_switch to change the s…
statusstringDocument status. Defaults to "active".
summarystringyesStructured 2-4 sentence summary. Format: "Conclusions: ... Open questions: ... Unactioned: ..."
superseded_by_pathstringPath of the doc that supersedes this one (sets status to superseded).
tagsarrayTags from project vocabulary.
titlestringyesDocument title.
typestringyesDocument type. `landscape` is for competitor-audit-skill outputs under docs/landscape/audits/.
visibilitystringVisibility tier. Defaults to "private" (owner-only). "public" = shipped with PAPI (anyone can read); "contributors" = team-member tier (shared with the project cohort). Choose private unless you have…

No output schema declared.

No examples provided.

doc_reorder ~78

Persist the display order of docs within this project. Pass `doc_ids` as the full desired sequence of doc UUIDs — each doc's position is saved so the dashboard renders them in that order. Ids not in this project are ignored.

NameTypeReqDescription
doc_idsarrayyesOrdered list of doc UUIDs — index 0 renders first.

No output schema declared.

No examples provided.

doc_scan ~66

Scan docs/ and plans directories for unregistered .md files. Returns a list of files not yet in the doc registry. Use this to find docs that need registration.

NameTypeReqDescription
include_plansbooleanAlso scan ~/.claude/plans/ for plan files (default: false).

No output schema declared.

No examples provided.

doc_search ~149

Search the doc registry for documents by type, tags, keyword, or pending actions. Returns summaries, not full content. Use for context gathering in plan, strategy review, and idea dedup.

NameTypeReqDescription
has_pending_actionsbooleanOnly docs with unresolved action items.
keywordstringSearch title and summary text.
limitnumberMax results (default: 10).
since_cyclenumberDocs updated since this cycle.
statusstringFilter by status. Defaults to "active".
tagsarrayFilter by tags (OR match).
typestringFilter by doc type (e.g. "research", "architecture").

No output schema declared.

No examples provided.

get_sibling_ads ~106

Read Active Decisions from sibling PAPI projects that share the same Supabase instance. Requires PAPI_SIBLING_PROJECT_IDS env var (comma-separated project UUIDs). Returns ADs labelled by source project — useful for cross-project architectural alignment. pg adapter only — returns an error if using md or proxy adapter.

NameTypeReqDescription
project_idsarrayOptional explicit list of sibling project UUIDs to query. If omitted, falls back to PAPI_SIBLING_PROJECT_IDS env var.

No output schema declared.

No examples provided.

handoff_generate ~538

Generate BUILD HANDOFFs for cycle tasks that don't have one yet. Run after `plan` (with skip_handoffs=true) or to regenerate stale handoffs. Uses the prepare/apply pattern — first call returns a prompt, second call persists results.

NameTypeReqDescription
cycle_numbernumberThe cycle number returned from prepare phase (mode "apply" only).
forcebooleanRegenerate handoffs for tasks that ALREADY have one, overwriting the stored handoff (default false = only fill in missing handoffs). Use to propagate a changed Active Decision or dependency into an i…
llm_responsestringYour raw output from executing the handoff prompt (mode "apply" only). Must include both Part 1 (markdown) and Part 2 (structured JSON after <!-- PAPI_STRUCTURED_OUTPUT -->, inside a ```json fence).…
llm_response_filestringAbsolute path to a file containing the handoff output (mode "apply" only). LOCAL stdio servers only — on the hosted connection the server cannot read files on your machine; pass llm_response inline i…
modestring"prepare" returns the handoff prompt for you to execute. "apply" accepts your generated output and persists handoffs. Defaults to "prepare" when omitted.
task_idsarraySpecific task IDs to generate handoffs for. If omitted, generates for all cycle tasks missing handoffs.

No output schema declared.

No examples provided.

hierarchy_update ~387

Create or update a horizon, stage, or phase in the project hierarchy (AD-14). For stages and horizons this UPSERTS: if the named entity exists it is updated, otherwise it is CREATED (pass a label). Phases are update-only (they evolve via plan/strategy). For stages you can set exit_criteria (a checklist), or flip a single criterion with set_criterion_met. NEVER auto-advances — progression is human-in-loop via strategy_review. Does not call the Anthropic API.

NameTypeReqDescription
descriptionstringOptional longer description (stage/horizon).
exit_criteriaarrayChecklist defining when a STAGE is done. Each item is a completion condition. REPLACES existing criteria (resets met state — use set_criterion_met to flip one).
horizonstringParent horizon (name/slug/id) when CREATING a stage. Defaults to the sole horizon if only one exists.
labelstringDisplay label. Required to CREATE a new stage/horizon when `name` does not match an existing one (e.g. "S2: Alpha Cohort").
levelstringyesWhich hierarchy level to create/update.
namestringyesThe label, slug, or ID of the entity. On create, becomes the label if `label` is omitted.
set_criterion_metobjectFlip a single stage exit criterion (task-1625). { criterion_id, met, evidence? }.
slugstringExplicit slug for a new entity (stage/horizon). Auto-derived from the label when omitted.
sort_ordernumberDisplay order for a new entity. Auto-computed (max existing + 10) when omitted.
statusstringThe status to set. On create, defaults to "Not Started".

No output schema declared.

No examples provided.

idea ~856

Capture an idea as a Backlog task. The next plan run will triage and scope it. Use anytime to log bugs, feature requests, or improvements without interrupting the current cycle. IMPORTANT: If this idea originates from a research or planning session, you MUST include a Reference: line in notes pointing to the source doc. Without it, the planner has no context and will misinterpret the intent. Does not call the Anthropic API.

NameTypeReqDescription
complexitystringEstimated complexity. XS = config/one-liner. Small = one file. Medium = 2-5 files. Large = cross-module. XL = architectural. Default: "Small".
conflicts_with_adstringThe Active Decision this idea cuts against, e.g. "AD-12". USE THIS INSTEAD OF DROPPING THE IDEA. An AD is *active* — it can be superseded — so a contradiction is a decision for the user, never a reas…
discoverybooleanWhen true, classify the idea and route to Discovery Canvas instead of backlog. Default: false (always creates a backlog task).
doc_refstringPath to a reference document (e.g. "docs/research/foo.md"). Stored as a structured field — replaces the fragile "Reference:" line in notes.
epicstringEpic this relates to (default: "Platform").
forcebooleanForce creation even if a high-overlap duplicate or already-done task is detected. Default: false.
modulestringModule this relates to (default: "Core").
notesstringAdditional context, constraints, or reasoning. MANDATORY: If this idea comes from a research or planning session, include a "Reference: <path>" line pointing to the source doc. Tasks submitted withou…
opportunitystringWhat user problem does this solve? Auto-fill from problem context in notes when submitting ideas that describe a user pain point. The planner uses this to cluster backlog tasks by opportunity.
phasestringTarget phase (default: "Unscoped").
prioritystringPriority level. P0 = broken/blocking. P1 = strategically aligned with current goals. P2 = valuable but not urgent. P3 = nice-to-have/speculative. Default: "P2 Medium". Assess based on strategic align…
projectstringProject id (UUID) or slug to write this idea to, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Use project_switch to change the sessio…
textstringyesThe idea — becomes the task title.
typestringTask type. Defaults to "task". Use "bug" for defects, "research" for investigation tasks, "spike" for time-boxed experiments, "discovery" for issues found during a build that need their own task. The…

No output schema declared.

No examples provided.

init ~189

Write the MCP config file that connects this project to PAPI. Generates .mcp.json, or the equivalent for whichever MCP client you use — Claude Code, Cursor, VS Code, Windsurf, OpenCode, Amazon Q, Kilo Code, Gemini CLI, Codex CLI, or Hermes Agent. Config-only — does not create any project data. Run this first, then run `setup` to create your PAPI project.

NameTypeReqDescription
agentstringMCP client to write config for. Default: claude-code. Options: claude-code, cursor, vscode, windsurf, opencode, amazonq, kilo, gemini, codex, hermes.
forcebooleanOverwrite existing .mcp.json if it already exists. Default: false.
project_namestringHuman-readable project name (used in the config comment). Defaults to the directory name.

No output schema declared.

No examples provided.

inventory_sync ~110

Sync this project's harness inventory — skills, sub-agents, hooks, and MCP tools — to the database so the dashboard can surface it. Gated by a cheap change-fingerprint: a no-op when the harness hasn't changed since the last sync. Set force=true to re-scan and write regardless. Runs automatically at setup and release; use this for an explicit refresh after editing your harness.

NameTypeReqDescription
forcebooleanRe-scan and write even if the change-fingerprint is unchanged. Default false.

No output schema declared.

No examples provided.

join ~127

Join a project that already exists, as a new team member. Run this instead of `setup` when someone else already set the project up — setup is for creating a project, and running it as a joiner writes scaffolding into a repo that already has it. `join` confirms which project you are bound to, shows the Active Decisions and canon docs you are expected to read, and shows the task pool you can claim from. It writes NOTHING to your repo. Does not call the Anthropic API.

NameTypeReqDescription
limitintegerMaximum claimable tasks to list (default 10).

No output schema declared.

No examples provided.

learning_action ~215

Mark a cycle learning as actioned (linking it to a task or idea) or list unactioned learnings. Use "mark" to close out a learning after you've submitted an idea or created a task for it. Use "list" to see which learnings from recent cycles still need follow-up.

NameTypeReqDescription
action_refstringReference to the action artifact — e.g. task-1234 or idea title (mode "mark" only). Optional.
action_takenstringWhat action was taken on this learning (mode "mark" only).
categorystringFilter by category (mode "list" only).
cycle_numbernumberFilter learnings by cycle number (mode "list" only). Omit to show all recent cycles.
learning_idstringThe learning ID to mark (mode "mark" only).
modestringyes"mark" to record action taken on a learning. "list" to show unactioned learnings.

No output schema declared.

No examples provided.

orient ~481

Session orientation — run this FIRST at session start before any other tool. Single call that replaces build_list + health. Returns: cycle number, task counts by status, in-progress/in-review tasks, strategy review cadence, velocity snapshot, recommended next action, and a release reminder when all cycle tasks are Done but release has not run. Read-only, does not modify any files. PAPI detects build capability from the connecting harness (clientInfo); pass `environment` only to override that detection for git-dependent recommendations (build_execute, release, review_submit).

NameTypeReqDescription
deep_housekeepingbooleanRun expensive cross-referencing checks: board-vs-branch reconciliation, unrecorded commit detection, unregistered doc scan. Default false — orient stays fast and noise-light at session start. Pass tr…
environmentstringCaller environment OVERRIDE. By default PAPI branches git-dependent recommendations on the connecting harness's detected capability — a build-capable harness (local CLI like Codex/opencode, or a sand…
fullbooleanRun the heavy enrichment blocks that the lean default path skips: Research Signals (doc search) and npm version-drift. Default false — the lean path keeps the per-session query count down so orient s…
projectstringProject id (UUID) or slug to orient on, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Use project_switch to change the session default…

No output schema declared.

No examples provided.

papi ~447

Say "papi" to check in with Papi — an alias for `orient`. Run this FIRST at session start: it returns your cycle number, task counts, in-progress/in-review work, strategy-review cadence, a velocity snapshot, and the recommended next action. Identical to `orient` (same inputs, same output); use whichever name you prefer. Read-only.

NameTypeReqDescription
deep_housekeepingbooleanRun expensive cross-referencing checks: board-vs-branch reconciliation, unrecorded commit detection, unregistered doc scan. Default false — orient stays fast and noise-light at session start. Pass tr…
environmentstringCaller environment OVERRIDE. By default PAPI branches git-dependent recommendations on the connecting harness's detected capability — a build-capable harness (local CLI like Codex/opencode, or a sand…
fullbooleanRun the heavy enrichment blocks that the lean default path skips: Research Signals (doc search) and npm version-drift. Default false — the lean path keeps the per-session query count down so orient s…
projectstringProject id (UUID) or slug to orient on, overriding the session project for THIS call only. Must be a project on your account — fails closed otherwise. Use project_switch to change the session default…

No output schema declared.

No examples provided.

plan ~1,015

Turn a backlog into one scoped cycle of work, with a written spec for every task in it. plan reads the whole board, the decisions this project has already taken, and how much it actually delivered in recent cycles, then prioritises what to do next and writes a per-task BUILD HANDOFF: scope, what is deliberately out of scope, acceptance criteria, files likely touched, security notes, and the shared branch each task belongs on. It also reports board health, so stale, blocked and drifting work is visible instead of accumulating. This is not the same as planning inside one session: the cycle, the specs and the reasoning are stored, so the next session, the next tool, or the next person picks up where this one stopped. Run once per cycle, after setup the first time, or after completing all builds AND running release for the previous cycle. NEVER call when unbuilt cycle tasks exist: build and release first. First call returns a planning prompt for you to execute (prepare phase). Then call again with mode "apply" and your output to write results. Use skip_handoffs=true for large backlogs, and generate handoffs separately via `handoff_generate`.

NameTypeReqDescription
confirm_cancellationsbooleanApply-mode confirmation guard for planner-initiated cancellations (task-1727). When false (default), any boardCorrection with status="Cancelled" is SKIPPED and listed in the response so the user can…
cycle_numbernumberThe cycle number returned from prepare phase (mode "apply" only).
densitystringTarget cycle density — how many tasks the planner should aim to include. "light" ≈ 2-3 tasks, "standard" ≈ 3-5 (the default when omitted), "deep" ≈ 6-8. A TARGET, not a floor or cap: the planner stil…
dispatchstring"inline" (default) returns the planning prompt for the calling LLM to execute directly. "subagent" returns a Task() invocation prompt the caller can dispatch to a fresh sub-agent — keeps the heavywei…
epicstringFilter board tasks to only this epic (e.g. "Platform"). Other context is unaffected.
focusstringUser direction for this cycle — what to focus on, which phase/tasks to prioritise, or constraints to respect. Overrides the autonomous priority tier system. Example: "Focus on Schema Model phase 9 ta…
forcebooleanBypass planning guards (unreleased cycle block, strategy review hard-block). Only use when explicitly requested by the user.
handoffs_onlybooleanSkip backlog analysis and task selection. Only generate BUILD HANDOFFs for tasks already assigned to the target cycle. Requires pre-assigned tasks (set cycle number on tasks first). ~30% of normal pl…
llm_responsestringYour raw output from executing the plan prompt (mode "apply" only). Must include both Part 1 (markdown) and Part 2 (structured JSON after <!-- PAPI_STRUCTURED_OUTPUT -->).
llm_response_filestringAbsolute path to a file containing the plan output (mode "apply" only). LOCAL stdio servers only — on the hosted connection the server cannot read files on your machine; pass llm_response inline inst…
modestring"prepare" returns the planning prompt for you to execute. "apply" accepts your generated output and persists the results. Defaults to "prepare" when omitted.
modulestringFilter board tasks to only this module (e.g. "Core"). Other context is unaffected.
phasestringFilter board tasks to only this phase (e.g. "Phase 8"). Other context (build reports, ADs) is unaffected.
prioritystringFilter board tasks to only this priority (e.g. "P1 High"). Other context is unaffected.
skip_handoffsbooleanRun full planning (triage, task selection, board management) but skip BUILD HANDOFF generation. Selected tasks are assigned to the cycle without handoffs. Run `handoff_generate` after to create hando…
strategy_review_warningstringThe strategy review warning returned from prepare phase (mode "apply" only). Pass empty string if none.

No output schema declared.

No examples provided.

project_create ~129

Create an EMPTY PAPI project for the current workspace (no plan, no seeded backlog) and return its id. Idempotent: re-running in the same folder (or with the same name) returns the EXISTING project instead of creating a duplicate. Use when "set up papi here" / "create a project" and none matches this folder. No Anthropic API.

NameTypeReqDescription
namestringProject name. Optional on local stdio (defaults to the current folder name); required on the remote transport.
repo_urlstringOptional git remote URL to associate with the project.

No output schema declared.

No examples provided.

project_list ~89

List the PAPI projects on your account (id, name, slug, mapped folder). Use to see which project you are about to write to, or to find the id/slug to pass to project_switch or the per-call `project` arg. No Anthropic API.

NameTypeReqDescription
verbosebooleanWhen true, include the mapped folder (papi_dir) for each project. Default true.

No output schema declared.

No examples provided.

project_switch ~109

Select a project you own by id or slug and map the current folder to it (sets papi_dir on local stdio). Use when "switch to golf" / "point papi at <project>". Fails closed if the project is not on your account. No Anthropic API.

NameTypeReqDescription
projectstringyesThe project id (UUID) or slug to switch to.
remapbooleanWhen true (default) and running locally, stamp the current folder as the project's papi_dir.

No output schema declared.

No examples provided.

release ~350

Cut a versioned release — creates a git tag, generates CHANGELOG.md, and pushes to remote. Pass skipVersion=true to update CHANGELOG and close the cycle without creating a tag or bumping version numbers.

NameTypeReqDescription
branchstringyesThe branch to tag (e.g. "main", "develop").
forcebooleanOverride the release-readiness check and release even if cycle tasks are not Done/Cancelled. Emits a telemetry warning. Use only when you have intentionally moved pending tasks to the next cycle.
gate_resultstringtask-2482 (release quality gate): the result of running the configured gate command (papi.gate / PAPI_GATE). Set this on the SECOND release call AFTER you have run the gate command yourself — "pass"…
observationsarrayOptional dogfood observations from this cycle to persist to the DB. Each entry records friction, methodology signals, or commercial insights.
skipVersionbooleanUpdate CHANGELOG.md and mark the cycle complete, but skip creating a git tag and pushing it. Use when you want cycle closure and changelog tracking without burning a version number. The version param…
versionstringyesThe version tag to create (e.g. "v0.1.0-alpha"). Must start with "v".

No output schema declared.

No examples provided.

review_claim ~92

Claim a Pending Review from the shared cross-user review queue so you are the one reviewing it. Atomic first-claim-wins — two reviewers cannot grab the same build. After claiming, run review_submit to record your verdict. Owner-or-active-member only. Does not call the Anthropic API.

NameTypeReqDescription
task_idstringyesThe In Review task to claim for review, e.g. "task-2072".

No output schema declared.

No examples provided.

review_list ~68

List tasks ready for your sign-off — shows completed builds waiting for approval or feedback. Does not call the Anthropic API.

NameTypeReqDescription
limitintegerOptional maximum number of pending reviews to return. Omit to return all. Reserved for future pagination — current behaviour returns all pending regardless of value.

No output schema declared.

No examples provided.

review_submit ~794

Record a review verdict on a completed build (build-acceptance) or task plan (handoff-review). ALWAYS ask the human for their verdict before calling — never auto-submit without human input. Accept moves the task to Done, request-changes sends it back for rework, reject discards the build. Updates task status based on the verdict. On handoff-review with suggested changes, returns a prompt to revise the BUILD HANDOFF. DO NOT use this tool as a substitute for review_list. If you need to see what is pending review, call review_list first. If review_list is unavailable in your tool set, STOP and tell the human their MCP integration is incomplete rather than guessing at the next pending task. (SUP-2026-010.)

NameTypeReqDescription
auto_reviewobjectOptional automated code review results to attach to this review. Run PR analysis first, then pass findings here.
commentsstringyesYour feedback — what did you think? Every review needs a reason.
dispatchstringtask-1864: set "subagent" (build-acceptance only) to offload code review to a fresh sub-agent. Returns a Task() invocation prompt that feeds the build report + branch diff to the sub-agent, which ret…
handoff_regen_responsestringYour locally-generated BUILD HANDOFF regen output. Pass this to save a handoff that was regenerated in local mode (no API key).
review_presetstringtask-2824 (opt-in): upgrade the sub-agent dispatch to a MULTI-LENS fan-out. Requires dispatch:"subagent" (build-acceptance only). Emits N specialist lens legs (correctness/security/wiring/test-qualit…
reviewed_commit_shastringtask-3225 (OPTIONAL): the commit SHA you actually reviewed — e.g. the output of `git rev-parse HEAD` on the branch whose diff you read. Stored separately from the build report's own SHA, and on a bui…
reviewerstringReviewer name (default: "human").
reviewer_confirmedbooleanSet to true to confirm you have reviewed the build (read the build report or the pending list via review_list) before submitting an accept verdict. Required to accept a build-acceptance review unless…
stagestringyesWhich stage is being reviewed.
task_idstringyesThe task ID to review (e.g. "task-200").
verdictstringyesapprove/reject for handoff-review, accept/request-changes/reject for build-acceptance. "accept" = happy with it, "request-changes" = needs tweaks, "reject" = start over.

No output schema declared.

No examples provided.

scope_brief ~264

Decompose a brief-class task (Large/XL, too large to build directly) into a structured scope document. Two phases, like plan/strategy — PAPI never calls a model itself (AD-58): first call (mode "prepare") returns a scoping prompt for YOU to run in your own AI workspace; then call again (mode "apply") with your markdown output in llm_response to write docs/scopes/<task-id>.md, register it, and mark the source task decomposed. Use before planning a cycle that includes brief-class tasks.

NameTypeReqDescription
llm_responsestringYour markdown scope document from running the prepare prompt (mode "apply" only).
llm_response_filestringAbsolute path to a file holding your markdown scope document (mode "apply" only). LOCAL stdio servers only — the hosted server cannot read your machine. Mutually exclusive with llm_response; must be…
modestring"prepare" (default) returns the scoping prompt for you to run. "apply" persists the scope document you produced.
task_idstringyesID of the brief-class task to decompose (e.g. "task-042").

No output schema declared.

No examples provided.

Common questions

What is the PAPI: Persistent Adaptive Project Intelligence MCP server?

PAPI: Persistent Adaptive Project Intelligence is an MCP server listed in the public MCP registry as io.github.getpapi/papi. Adaptive plan/build/review cycles for AI coding assistants, persisted across sessions. This page covers its npm package (@papi-ai/server).

Is the PAPI: Persistent Adaptive Project Intelligence MCP server safe to use?

PAPI: Persistent Adaptive Project Intelligence scores 77 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the PAPI: Persistent Adaptive Project Intelligence MCP server expose?

PAPI: Persistent Adaptive Project Intelligence exposes 56 tools: plan, strategy_review, strategy_change, strategy_agenda, board_view, and 51 more. Their descriptions and schemas cost roughly 18,191 tokens of context every time the server is loaded.

Is the PAPI: Persistent Adaptive Project Intelligence MCP server still maintained?

PAPI: Persistent Adaptive Project Intelligence is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the PAPI: Persistent Adaptive Project Intelligence MCP server under?

PAPI: Persistent Adaptive Project Intelligence declares the Elastic-2.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.