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.
Available components
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
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
claude mcp add getpapi-papi -- npx -y @papi-ai/server
{
"mcpServers": {
"getpapi-papi": {
"command": "npx",
"args": [
"-y",
"@papi-ai/server"
]
}
}
} {
"servers": {
"getpapi-papi": {
"command": "npx",
"args": [
"-y",
"@papi-ai/server"
]
}
}
} codex mcp add getpapi-papi -- npx -y @papi-ai/server
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"getpapi-papi": {
"type": "local",
"command": [
"npx",
"-y",
"@papi-ai/server"
],
"enabled": true
}
}
} openclaw mcp add getpapi-papi --command npx --arg -y --arg @papi-ai/server
mcp_servers:
getpapi-papi:
command: "npx"
args: ["-y", "@papi-ai/server"] {
"McpServers": {
"getpapi-papi": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@papi-ai/server"
]
}
}
} assistant mcp add getpapi-papi -t stdio -c npx -a -y @papi-ai/server
{
"mcpServers": {
"getpapi-papi": {
"command": "npx",
"args": [
"-y",
"@papi-ai/server"
]
}
}
} 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
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 →
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cycle | – | – | task-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).… |
| effort | string | – | Actual effort spent (default: S). |
| epic | string | – | Epic this relates to (default: "Platform"). |
| hold | boolean | – | task-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… |
| module | string | – | Module this relates to (default: "Core"). |
| notes | string | – | Additional context about the work. |
| priority | string | – | Task priority (default: P2 Medium). Use P1 for important fixes, P0 for critical incidents. |
| project | string | – | Project 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… |
| proposal | object | – | task-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… |
| stage | string | – | task-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_id | string | – | Existing 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. |
| title | string | – | What was done — becomes the task title (required when creating new task, optional when completing existing via task_id). |
| type | string | – | Task 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.
| Name | Type | Req | Description |
|---|---|---|---|
| ad_id | string | – | Specific AD to fetch (e.g. "AD-12"). Omit to list all active decisions with full bodies. |
| fields | string | – | Optional 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_superseded | boolean | – | Include superseded (retired) ADs. Default false. |
| limit | integer | – | Max decisions to return. Omit to return all. |
| meta | boolean | – | Append a {total, filtered, returned, limit, offset} envelope so you can tell a truncated result from a complete one. Default false. |
| offset | integer | – | Skip 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.
| Name | Type | Req | Description |
|---|---|---|---|
| include_path | boolean | – | Include 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.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | When true, normalise and dedup-check without writing anything. Use this to preview what would be imported. Default: false. |
| module | string | – | Module to file imported tasks under (default "Core"). |
| project | string | – | Project 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… |
| raw | string | – | Raw 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 (… |
| rows | array | – | Pre-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 }. |
| source | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| phase | string | – | Phase(s) to archive, comma-separated (e.g. "Phase 5: MCP Server MVP"). |
| status | string | – | Status(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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | "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_ref | string | – | Required 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_type | string | – | Optional (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"… |
| defer | boolean | – | DEPRECATED — use action instead. If true, equivalent to action="defer". |
| phase | string | – | Optional new phase (only applies to "backlog" and "defer" actions). |
| priority | string | – | Optional new priority (only applies to "backlog" action). |
| reason | string | – | Why this task is being removed. Required for "cancel", recommended for "defer". |
| task_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| actual_effort | – | – | task-2182: correct the actual effort on this task's LATEST build report (fixes a mis-recorded actual). |
| complexity | string | – | New complexity/effort estimate. |
| cycle | number|null | – | Cycle 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. |
| epic | string | – | New epic assignment. |
| estimated_effort | – | – | task-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. |
| maturity | string | – | New maturity level. |
| module | string | – | New module assignment. |
| notes | string | – | Note content. Default behaviour is append — see notes_mode to control. |
| notes_mode | string | – | How 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). |
| phase | string | – | New phase assignment. |
| priority | string | – | New priority level. |
| project | string | – | Project 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… |
| status | string | – | New status. Must be a valid transition from the current status. |
| task_id | string | yes | The task ID to edit (e.g. "task-42"). |
| title | string | – | New 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.
| Name | Type | Req | Description |
|---|---|---|---|
| llm_response | string | – | Your reconciliation output (mode "apply" only). Must include a JSON block after <!-- PAPI_RECONCILE_OUTPUT --> with a "corrections" array. |
| mode | string | – | "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.
| Name | Type | Req | Description |
|---|---|---|---|
| assignee | string | – | Filter 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… |
| cycle | number | – | Filter to tasks assigned to this cycle number. |
| fields | string | – | Optional 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… |
| limit | number | – | Max tasks to return (default: 50). |
| meta | boolean | – | Append a {total, filtered, returned, limit, offset} envelope so you can tell a truncated result from a complete one. Default false. |
| mode | string | – | Output mode: "full" (default) shows task table, "summary" shows counts only. |
| offset | number | – | Skip first N tasks for pagination (default: 0). |
| phase | string | – | Filter to tasks in this phase (e.g. "Phase 5"). |
| query | string | – | Case-insensitive substring match on task title OR notes. Returns only matching tasks — use this instead of dumping the whole board to find something. |
| status | string | – | Status filter: omit for active tasks only, "all" for everything, or comma-separated statuses (e.g. "In Progress,Backlog"). |
| task_id | string | – | Direct 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.
| Name | Type | Req | Description |
|---|---|---|---|
| contact_ok | boolean | – | Report mode only: set true if the user consents to the PAPI team reaching out about this submission. |
| epic | string | – | Epic this relates to (default: "Platform"). |
| introduced_by_task | string | – | OPTIONAL. 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… |
| module | string | – | Module this relates to (default: "Core"). |
| notes | string | – | Steps to reproduce, expected vs actual behaviour, or other context. |
| notify_when_fixed | boolean | – | Report 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). |
| phase | string | – | Target phase (default: current active phase). |
| project | string | – | BOARD 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… |
| report | boolean | – | Routing 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… |
| severity | string | – | Bug severity (default: "major"). Critical = P0, Major = P1, Minor = P2. |
| text | string | yes | The bug description — becomes the task title (default mode) or report description (report mode). |
| type | string | – | Report 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Optional 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.
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | yes | Reason for cancelling the task. |
| task_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptance_confirmed | boolean | – | task-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_results | array | – | task-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_notes | string | – | Patterns 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_implications | array | – | Strategic 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… |
| completed | string | – | Whether the build was completed. Required for complete. |
| corrections_count | integer | – | Number of times the user corrected or redirected the build during implementation. Captures informal pushback that bypasses review_submit. Default 0. |
| dead_ends | string | – | CONTRACT: 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… |
| decision | object | – | task-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_issues | string | – | A 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,… |
| effort | – | – | Actual effort: XS, S, M, L, or XL. Required for complete. |
| estimated_effort | – | – | Estimated effort from the BUILD HANDOFF. Required for complete. |
| findings | array | – | OPTIONAL, 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_issues | array | – | cycle_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_accuracy | object | – | Structured handoff accuracy assessment. Optional — provides granular accuracy data beyond scope_accuracy. |
| light | boolean | – | Light-ceremony mode for XS/S tasks. Skips feature branch creation and PR. Work stays on current branch. Build report is still captured. Default false. |
| model | string | – | The 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… |
| preview | object | – | Optional. 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_verification | object | – | Required 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).… |
| proposal | object | – | task-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_decisions | string | – | Comma-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_learnings | array | – | IDs 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_accuracy | string | – | How well the BUILD HANDOFF matched actual work. Optional for complete. |
| surprises | string | – | What 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_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | string | – | Optional 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… |
| limit | integer | – | Optional maximum number of tasks to return per section (In Progress / Backlog / Blocked). Omit to return all. |
| meta | boolean | – | Append 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.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email of the PAPI account to add (e.g. "wes@example.com"). | |
| project | string | – | Project 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… |
| role | string | – | Membership 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Optional 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.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email 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.
| Name | Type | Req | Description |
|---|---|---|---|
| module | string | – | Optional module to scope the rule to (e.g. "Dashboard"). Omit for a rule that applies to every build on this project. |
| project | string | – | Project id (UUID) or slug to target for THIS call only. Must be a project on your account. |
| rule | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| module | string | – | Optional: show only the rules that would apply to a build in this module (project-wide rules plus that module's own). |
| project | string | – | Project 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The convention id, from `convention_list`. |
| project | string | – | Project 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.
| Name | Type | Req | Description |
|---|---|---|---|
| issue_id | string | yes | The cycle_learnings id (UUID) to mark resolved. Find it via `learning_action list` or recent orient output. |
| note | string | – | Optional 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).
| Name | Type | Req | Description |
|---|---|---|---|
| action_index | number | yes | 0-based index of the action in the doc's actions array. |
| complexity | string | – | Task complexity. Defaults to "Small". |
| doc_id | string | – | UUID of the source doc. Either this or doc_path is required. |
| doc_path | string | – | Path of the source doc (e.g. "docs/research/funding-landscape.md"). Either this or doc_id is required. |
| epic | string | – | Task epic. Defaults to "Platform". |
| module | string | – | Task module. Defaults to "Core". |
| notes | string | – | Additional notes. A `Reference:` line pointing at the source doc is always prepended. |
| priority | string | – | Task priority. Defaults to "P2 Medium". |
| title | string | – | Optional 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| doc_id | string | – | UUID of the doc to delete. Either this or doc_path is required. |
| doc_path | string | – | Path 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id_or_path | string | yes | Registered path (e.g. "docs/private/notes.md") or the doc UUID. |
| write_to_disk | boolean | – | Write 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.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Actionable findings from the document. |
| body | string | – | OPTIONAL 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… |
| cycle | number | yes | Current cycle number. |
| path | string | yes | Relative path from project root (e.g. "docs/research/funding-landscape.md"). |
| project | string | – | Project 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… |
| status | string | – | Document status. Defaults to "active". |
| summary | string | yes | Structured 2-4 sentence summary. Format: "Conclusions: ... Open questions: ... Unactioned: ..." |
| superseded_by_path | string | – | Path of the doc that supersedes this one (sets status to superseded). |
| tags | array | – | Tags from project vocabulary. |
| title | string | yes | Document title. |
| type | string | yes | Document type. `landscape` is for competitor-audit-skill outputs under docs/landscape/audits/. |
| visibility | string | – | Visibility 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.
| Name | Type | Req | Description |
|---|---|---|---|
| doc_ids | array | yes | Ordered 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.
| Name | Type | Req | Description |
|---|---|---|---|
| include_plans | boolean | – | Also 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.
| Name | Type | Req | Description |
|---|---|---|---|
| has_pending_actions | boolean | – | Only docs with unresolved action items. |
| keyword | string | – | Search title and summary text. |
| limit | number | – | Max results (default: 10). |
| since_cycle | number | – | Docs updated since this cycle. |
| status | string | – | Filter by status. Defaults to "active". |
| tags | array | – | Filter by tags (OR match). |
| type | string | – | Filter 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.
| Name | Type | Req | Description |
|---|---|---|---|
| project_ids | array | – | Optional 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cycle_number | number | – | The cycle number returned from prepare phase (mode "apply" only). |
| force | boolean | – | Regenerate 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_response | string | – | Your 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_file | string | – | Absolute 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… |
| mode | string | – | "prepare" returns the handoff prompt for you to execute. "apply" accepts your generated output and persists handoffs. Defaults to "prepare" when omitted. |
| task_ids | array | – | Specific 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.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional longer description (stage/horizon). |
| exit_criteria | array | – | Checklist 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). |
| horizon | string | – | Parent horizon (name/slug/id) when CREATING a stage. Defaults to the sole horizon if only one exists. |
| label | string | – | Display label. Required to CREATE a new stage/horizon when `name` does not match an existing one (e.g. "S2: Alpha Cohort"). |
| level | string | yes | Which hierarchy level to create/update. |
| name | string | yes | The label, slug, or ID of the entity. On create, becomes the label if `label` is omitted. |
| set_criterion_met | object | – | Flip a single stage exit criterion (task-1625). { criterion_id, met, evidence? }. |
| slug | string | – | Explicit slug for a new entity (stage/horizon). Auto-derived from the label when omitted. |
| sort_order | number | – | Display order for a new entity. Auto-computed (max existing + 10) when omitted. |
| status | string | – | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| complexity | string | – | Estimated complexity. XS = config/one-liner. Small = one file. Medium = 2-5 files. Large = cross-module. XL = architectural. Default: "Small". |
| conflicts_with_ad | string | – | The 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… |
| discovery | boolean | – | When true, classify the idea and route to Discovery Canvas instead of backlog. Default: false (always creates a backlog task). |
| doc_ref | string | – | Path to a reference document (e.g. "docs/research/foo.md"). Stored as a structured field — replaces the fragile "Reference:" line in notes. |
| epic | string | – | Epic this relates to (default: "Platform"). |
| force | boolean | – | Force creation even if a high-overlap duplicate or already-done task is detected. Default: false. |
| module | string | – | Module this relates to (default: "Core"). |
| notes | string | – | Additional 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… |
| opportunity | string | – | What 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. |
| phase | string | – | Target phase (default: "Unscoped"). |
| priority | string | – | Priority 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… |
| project | string | – | Project 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… |
| text | string | yes | The idea — becomes the task title. |
| type | string | – | Task 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | MCP client to write config for. Default: claude-code. Options: claude-code, cursor, vscode, windsurf, opencode, amazonq, kilo, gemini, codex, hermes. |
| force | boolean | – | Overwrite existing .mcp.json if it already exists. Default: false. |
| project_name | string | – | Human-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.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Re-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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action_ref | string | – | Reference to the action artifact — e.g. task-1234 or idea title (mode "mark" only). Optional. |
| action_taken | string | – | What action was taken on this learning (mode "mark" only). |
| category | string | – | Filter by category (mode "list" only). |
| cycle_number | number | – | Filter learnings by cycle number (mode "list" only). Omit to show all recent cycles. |
| learning_id | string | – | The learning ID to mark (mode "mark" only). |
| mode | string | yes | "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).
| Name | Type | Req | Description |
|---|---|---|---|
| deep_housekeeping | boolean | – | Run 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… |
| environment | string | – | Caller 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… |
| full | boolean | – | Run 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… |
| project | string | – | Project 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deep_housekeeping | boolean | – | Run 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… |
| environment | string | – | Caller 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… |
| full | boolean | – | Run 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… |
| project | string | – | Project 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_cancellations | boolean | – | Apply-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_number | number | – | The cycle number returned from prepare phase (mode "apply" only). |
| density | string | – | Target 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… |
| dispatch | string | – | "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… |
| epic | string | – | Filter board tasks to only this epic (e.g. "Platform"). Other context is unaffected. |
| focus | string | – | User 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… |
| force | boolean | – | Bypass planning guards (unreleased cycle block, strategy review hard-block). Only use when explicitly requested by the user. |
| handoffs_only | boolean | – | Skip 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_response | string | – | Your 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_file | string | – | Absolute 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… |
| mode | string | – | "prepare" returns the planning prompt for you to execute. "apply" accepts your generated output and persists the results. Defaults to "prepare" when omitted. |
| module | string | – | Filter board tasks to only this module (e.g. "Core"). Other context is unaffected. |
| phase | string | – | Filter board tasks to only this phase (e.g. "Phase 8"). Other context (build reports, ADs) is unaffected. |
| priority | string | – | Filter board tasks to only this priority (e.g. "P1 High"). Other context is unaffected. |
| skip_handoffs | boolean | – | Run 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_warning | string | – | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Project name. Optional on local stdio (defaults to the current folder name); required on the remote transport. |
| repo_url | string | – | Optional 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.
| Name | Type | Req | Description |
|---|---|---|---|
| verbose | boolean | – | When 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.
| Name | Type | Req | Description |
|---|---|---|---|
| project | string | yes | The project id (UUID) or slug to switch to. |
| remap | boolean | – | When 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.
| Name | Type | Req | Description |
|---|---|---|---|
| branch | string | yes | The branch to tag (e.g. "main", "develop"). |
| force | boolean | – | Override 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_result | string | – | task-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"… |
| observations | array | – | Optional dogfood observations from this cycle to persist to the DB. Each entry records friction, methodology signals, or commercial insights. |
| skipVersion | boolean | – | Update 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… |
| version | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Optional 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.)
| Name | Type | Req | Description |
|---|---|---|---|
| auto_review | object | – | Optional automated code review results to attach to this review. Run PR analysis first, then pass findings here. |
| comments | string | yes | Your feedback — what did you think? Every review needs a reason. |
| dispatch | string | – | task-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_response | string | – | Your locally-generated BUILD HANDOFF regen output. Pass this to save a handoff that was regenerated in local mode (no API key). |
| review_preset | string | – | task-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_sha | string | – | task-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… |
| reviewer | string | – | Reviewer name (default: "human"). |
| reviewer_confirmed | boolean | – | Set 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… |
| stage | string | yes | Which stage is being reviewed. |
| task_id | string | yes | The task ID to review (e.g. "task-200"). |
| verdict | string | yes | approve/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.
| Name | Type | Req | Description |
|---|---|---|---|
| llm_response | string | – | Your markdown scope document from running the prepare prompt (mode "apply" only). |
| llm_response_file | string | – | Absolute 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… |
| mode | string | – | "prepare" (default) returns the scoping prompt for you to run. "apply" persists the scope document you produced. |
| task_id | string | yes | ID of the brief-class task to decompose (e.g. "task-042"). |
No output schema declared.
No examples provided.
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.