@anyforge/mcp-server 3.6.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +103 -12
  2. package/dist/index.js +122 -8
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -72,8 +72,77 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
72
72
 
73
73
  ## Tools
74
74
 
75
+ Code Studio tools require `@anyforge/mcp-server` **3.8.0 or later** and a
76
+ deployed Studio API. For stdio clients use `npx -y @anyforge/mcp-server@^3.8.0`
77
+ after its npm release, then restart the client to refresh its tool catalogue.
78
+ Hosted HTTP follows the application deployment and does not depend on the
79
+ installed stdio package version.
80
+
81
+ Code Studio tools require explicit `studio:read`, `studio:write`,
82
+ `studio:execute`, or `studio:publish` scopes; ordinary and legacy keys do not
83
+ inherit them. Owners and operators can request these scopes, and editors can
84
+ request them only when their company owner enables developer Studio access.
85
+ External coding runs use audited coding, reads and reviews. Hosted commands and
86
+ orchestration require browser Studio; crew launches and PR ready/merge require
87
+ confirmation there. See the portable `references/code-studio.md` guide for the
88
+ complete capability and local/remote workspace boundary.
89
+
75
90
  | Tool | Scope | Description |
76
91
  |------|-------|-------------|
92
+ | `anyforge_branch_studio_session` | studio:write | Fork a session with explicit conversation/files/both scope. File scope also requires studio:execute and checkpoints; rewind requires exact workspace revisions. Does not undo external GitHub actions. For branch, reuse the same idempotencyKey when retrying; inspect incomplete preparation before retrying. |
93
+ | `anyforge_rewind_studio_session` | studio:write | Rewind a session with explicit conversation/files/both scope. File scope also requires studio:execute and checkpoints; rewind requires exact workspace revisions. Does not undo external GitHub actions. For branch, reuse the same idempotencyKey when retrying; inspect incomplete preparation before retrying. |
94
+ | `anyforge_update_studio_review_finding` | studio:write | Record a finding disposition with rationale and the revision containing a claimed fix. A fixed status does not imply independent verification; request a linked re-review to verify. |
95
+ | `anyforge_get_studio_pr_comments` | studio:read | Read paged inline PR review comments and reviewed file/line/commit provenance. |
96
+ | `anyforge_get_studio_pr_jobs` | studio:read | Read CI job identifiers for the exact PR head and a workflow run from its checks. Follow nextPage before claiming complete evidence. |
97
+ | `anyforge_get_studio_pr_logs` | studio:read | Read a bounded CI log page only for a job belonging to this exact PR head. Preserve nextOffset to continue. |
98
+ | `anyforge_request_studio_review` | studio:execute | Enqueue a durable, budgeted specialist review of an exact checkpoint, branch or PR. Returns a run ID; inspect its events and structured review artifacts. Reviewers cannot publish changes. |
99
+ | `anyforge_list_studio_crew_batches` | studio:read | Read the session crew batches and unexpired proposals, including aggregate progress and limits. |
100
+ | `anyforge_get_studio_crew_batch` | studio:read | Read one owned Studio crew batch. Active crews remain governed by their own gates. |
101
+ | `anyforge_preview_studio_crew_batch` | studio:write | Persist a proposal for existing/new work items, planned or expedited crews, dependencies and aggregate limits. Starts nothing. Also requires studio:publish because orchestration can reach external systems. Open Code Studio to confirm the returned proposal; API/MCP arguments cannot attest human confirmation. |
102
+ | `anyforge_cancel_studio_crew_batch` | studio:execute | Cancel queued starts; already active crews require separate stop actions. Also requires studio:publish. |
103
+ | `anyforge_retry_studio_crew_batch` | studio:execute | Create a new proposal for failed/cancelled work; open Code Studio to confirm execution. This action never starts crews. Also requires studio:publish. |
104
+ | `anyforge_list_studio_sessions` | studio:read | List your owned remote Code Studio sessions and their active/latest run IDs. |
105
+ | `anyforge_create_studio_session` | studio:write | Prepare a direct coding session or attach it to an existing initiative. Does not start execution. Context is a reference; local edits are not uploaded to the remote checkout. additionalRepos needs an explicit repoFullName. |
106
+ | `anyforge_get_studio_usage` | studio:read | Read the owned session recorded billing subtotal from the newest 200 rows, grouped by model/product/run/leg. Preserve `truncated`, `coverage` and `pending`; historical coverage may be incomplete or unavailable, so this is not a complete session bill. Provider cost and platform fee remain separate fields. |
107
+ | `anyforge_get_studio_session` | studio:read | Read one owned Studio session and its reconnect IDs. |
108
+ | `anyforge_update_studio_session` | studio:write | Update a session title, repository, branch, additional repositories or initiative. Does not execute code. additionalRepos replaces the whole list; null or [] clears it. |
109
+ | `anyforge_get_studio_context` | studio:read | Inspect effective context provenance, instructions, skills, graph/document snapshots and MCP availability. Does not expose credentials. |
110
+ | `anyforge_add_studio_context` | studio:write | Attach a bounded context snapshot to a prepared prompt. No code execution; explicitly identify local versus remote provenance. |
111
+ | `anyforge_list_studio_runs` | studio:read | List durable runs for your session. |
112
+ | `anyforge_start_studio_run` | studio:execute | Start a durable coding run in the remote workspace. Can spend tokens and edit files. External runs are limited to audited coding, reads and reviews; hosted shell, browser, outbound connectors, Oracle and crew/workflow/approval actions require the browser Studio surface. Use planned=true for analysis only. Dedicated Git push and draft PR tools need studio:publish; ready/merge require confirmation in Code Studio. |
113
+ | `anyforge_get_studio_run` | studio:read | Read run status, usage and any pending user question. |
114
+ | `anyforge_get_studio_run_events` | studio:read | Read ordered durable run events after a sequence cursor. Persist nextCursor to reconnect without replaying earlier events. |
115
+ | `anyforge_control_studio_run` | studio:execute | Pause, cancel, resume, steer or answer a pending question. Answer requires its current questionId. Resuming may execute code and spend tokens. |
116
+ | `anyforge_get_studio_changes` | studio:read | Read remote workspace revision, Git state and changes. Does not create a workspace or install dependencies. |
117
+ | `anyforge_list_studio_artifacts` | studio:read | Read checkpoint and structured reviewer artifacts for this session. |
118
+ | `anyforge_get_studio_review` | studio:read | Read structured reviewer findings, dispositions and review target provenance. |
119
+ | `anyforge_create_studio_checkpoint` | studio:execute | Capture remote workspace files, including staged and untracked changes, as a persistent checkpoint. |
120
+ | `anyforge_get_studio_checkpoint` | studio:read | Read checkpoint metadata and exact revision. |
121
+ | `anyforge_diff_studio_checkpoint` | studio:read | Read the remote workspace diff for a saved checkpoint. |
122
+ | `anyforge_read_studio_checkpoint_file` | studio:read | Read a bounded file window from a persistent checkpoint. |
123
+ | `anyforge_restore_studio_checkpoint` | studio:execute | Restore a checkpoint into the remote workspace after comparing its current revision. Saves a safety checkpoint first; does not rewind external GitHub actions. |
124
+ | `anyforge_stage_studio_files` | studio:execute | Stage explicitly selected remote files after checking the current revision. |
125
+ | `anyforge_commit_studio_files` | studio:execute | Commit reviewed remote changes. Read changes and confirm file scope before committing; does not push. |
126
+ | `anyforge_push_studio_branch` | studio:publish | Publish the exact remote Git HEAD to its branch. Rejects changed HEAD and default-branch pushes. |
127
+ | `anyforge_get_studio_pull_request` | studio:read | Read a session repository pull request, checks, review decision and merge blockers. |
128
+ | `anyforge_create_studio_pull_request` | studio:publish | Create or reuse a draft PR for the persisted session branch after checking its exact pushed HEAD. Uses your connected GitHub identity. Does not mark ready or merge. |
129
+ | `anyforge_update_studio_pull_request` | studio:publish | Update metadata or mark a session branch PR as draft using its exact expectedHeadSha. Open Code Studio to review and confirm ready/merge; tool arguments cannot authorize those actions. |
130
+ | `anyforge_search_studio_sessions` | studio:read | Search your own Studio sessions by title, repository, branch or folder, newest first. Set conversations=true (q of 2+ characters) to also search message text, five sessions per page. Follow nextCursor; conversationsLimited means a session had more messages than were searched. |
131
+ | `anyforge_archive_studio_sessions` | studio:write | Archive all of your own unarchived Studio sessions (CI auto-fix monitors excluded). Transcripts are kept and each session can be unarchived with update_studio_session. Call again while remaining is true. |
132
+ | `anyforge_list_studio_decisions` | studio:read | List your Studio runs waiting on you: each owned session whose current run asked a question, with the question and its options. Answer with control_studio_run. |
133
+ | `anyforge_list_studio_models` | studio:read | List the models your company and personal credentials can run, grouped by provider, for the model argument of start_studio_run. A provider with ok=false is not configured or not reachable. Cached for 30 minutes unless refresh=true. |
134
+ | `anyforge_get_studio_quota` | studio:read | Read the remaining quota of the Anthropic subscription Studio runs on for you. oauth=false means runs use an API key, which has no subscription window. |
135
+ | `anyforge_get_studio_conversation` | studio:read | Read an owned session's conversation, oldest first: your messages, the agent's replies and, with includeTools=true, each round's tool calls and results. Long text is clipped and flagged truncated. A page can hold fewer than limit messages; follow nextCursor until it is null. |
136
+ | `anyforge_list_studio_tasks` | studio:read | Read the session's task list (the agent's to-do items), newest change first. |
137
+ | `anyforge_compact_studio_session` | studio:execute | Compact the session's stored history: older messages are replaced by one summary so the next run starts lean. Deletes the summarized messages and cannot be undone. Spends a small model call on your credential. Refused while a run is active. |
138
+ | `anyforge_list_studio_verifications` | studio:read | Read the session's verification reports (newest 20): diagnostics, tests, lint, typecheck, build and acceptance checks with their evidence and the exact source they ran against. Running a new verification requires the browser Studio surface. |
139
+ | `anyforge_get_studio_environment` | studio:read | Inspect the existing remote checkout's environment readiness: detected toolchain, dependencies and setup scripts. Never clones, installs or loads secrets; preparing the environment requires the browser Studio surface. |
140
+ | `anyforge_list_studio_outcomes` | studio:read | Read the accepted, needs-rework and abandoned outcomes recorded for the session's runs, with the verification each was bound to. Pass runId for one run's outcome history. Outcomes are recorded by a person in Code Studio. |
141
+ | `anyforge_list_studio_workspace_files` | studio:read | List a directory of the live remote workspace (omit path for the root). Never creates a checkout: a session without one returns workspace_missing. |
142
+ | `anyforge_read_studio_workspace_file` | studio:read | Read a line window of a file in the live remote workspace, including unsaved agent edits. offset is the first line (default 1), limit the line count (default 500, maximum 2000). Never creates a checkout. |
143
+ | `anyforge_inspect_studio_code` | studio:read | Run a language-service query on a live workspace file: diagnostics (default), definition, references, hover, completions, or rename (a preview of the edits; apply with rename_studio_symbol). line and column are 1-based. Pass revision to refuse a changed workspace. |
144
+ | `anyforge_write_studio_workspace_file` | studio:execute | Create an empty file or save a file's complete content in the live remote workspace, without a model run. Name the repository, branch and revision you read, so a changed workspace is refused. Each write saves a checkpoint first. Does not commit or push. |
145
+ | `anyforge_rename_studio_symbol` | studio:execute | Apply a language-service rename of the symbol at a 1-based line and column across the live remote workspace. Preview it first with inspect_studio_code operation=rename. Name the repository, branch and revision you read; a changed workspace is refused. Does not commit. |
77
146
  | `anyforge_list_pending_approvals` | read | List HIL approvals awaiting a decision |
78
147
  | `anyforge_get_approval_detail` | read | Read one approval's plan / ADR / security context |
79
148
  | `anyforge_submit_approval` | approve | Approve or reject a HIL (resumes the crew) |
@@ -86,7 +155,8 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
86
155
  | `anyforge_restore_program_intake_version` | write | Republish an earlier intake definition version as a new version |
87
156
  | `anyforge_get_intake_request_details` | read | Read one program intake request's answers against its program's intake definition: each field's state, answer, who gave it, and whether it can be edited |
88
157
  | `anyforge_edit_intake_request_details` | write | Set, confirm or clear a program intake request's answers by hand (validated against the definition; audited; no re-approval, no follower notice) |
89
- | `anyforge_update_program` | write | Update a program's name / status / owner / target date / coverage goal / tags |
158
+ | `anyforge_update_program` | write | Update a program's name / status / owner / lead / long-lived flag / target date / coverage goal / tags |
159
+ | `anyforge_set_program_request_intake` | write | Turn a program's incoming requests on (creates its Incoming Requests initiative) or off |
90
160
  | `anyforge_delete_program` | write | Delete a program; `deleteChildren: true` also deletes child initiatives + work items (else they're detached) |
91
161
  | `anyforge_set_program_milestones` | write | Set a program's milestones/waves and the initiatives assigned to each (whole-array replace; an initiative sits in at most one wave) |
92
162
  | `anyforge_get_program_rollup` | read | Read a program's rolled-up progress, initiative/work-item counts, token budget/spend, and risks — the console program header numbers |
@@ -101,7 +171,7 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
101
171
  | `anyforge_get_initiative` | read | Initiative + crew and work-item rows + burn-down; long text is excerpted unless `shape: "full"` |
102
172
  | `anyforge_get_initiative_spec` | read | Read the active ICE spec, its readiness, what backlog approval will decide (`approvalGate`), and any submission awaiting human review |
103
173
  | `anyforge_propose_initiative_spec` | write | Submit an ICE spec for human review; it becomes active only when a person reviews and publishes it in the Console |
104
- | `anyforge_update_initiative` | write | Update a (non-system) initiative — only the fields you pass change |
174
+ | `anyforge_update_initiative` | write | Update a (non-system) initiative — only the fields you pass change, including its owning team (`teamId`); an argument the tool does not declare is refused and nothing is changed |
105
175
  | `anyforge_delete_initiative` | write | Delete a DRAFT initiative (archive via update once it's past DRAFT) |
106
176
  | `anyforge_list_initiative_comments` | read | List an initiative's Discussion comments — the same threaded comments the console shows |
107
177
  | `anyforge_post_initiative_comment` | write | Post a Discussion comment on an initiative (reply with `parentId`), into the thread the console renders |
@@ -138,10 +208,10 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
138
208
  | `anyforge_get_cluster_charter` | read | Read one theme's charter and outstanding lines |
139
209
  | `anyforge_approve_backlog` | approve | Approve a proposed backlog (HIL #1), optionally deferring chosen items (`deferItemIds`, `deferReason`) |
140
210
  | `anyforge_approve_task_proposal` | approve | Approve a mid-flight task proposal |
141
- | `anyforge_list_work_items` | read | List backlog items + crew state. Use `itemId` for a full work-item id or queue code, `search` for partial code/title matches, and `includeArchived: true` to include archived items. Also supports status, owner, assignee, program, initiative, priority and type filters. Returns ONE PAGE (50 default, 200 max) — continue with `nextCursor`. Unknown arguments are rejected; the page echoes `appliedFilters` |
142
- | `anyforge_get_work_item` | read | Get one work item by its returned id |
211
+ | `anyforge_list_work_items` | read | List backlog items + crew state. Use `itemId` for a full work-item id or queue code, `search` for partial code/title matches, and `includeArchived: true` to include archived items. Also supports status, owner, assignee, program, initiative, team (a team slug, including the teams beneath it), priority and type filters. Returns ONE PAGE (50 default, 200 max) — continue with `nextCursor`. Unknown arguments are rejected; the page echoes `appliedFilters` |
212
+ | `anyforge_get_work_item` | read | Get one work item by its returned id, with `assigneeName`, `blockerOwnerName` and `createdByName` beside the uids (null when nobody visible is named; list items carry them too) |
143
213
  | `anyforge_create_work_item` | write | Create a work item with routing, migration, incident, intake, estimate, and evidence fields |
144
- | `anyforge_update_work_item` | write | Edit, assign, begin, expedite, dispatch, confirm, drop (with optional `droppedReason`), archive, close, or reopen a work item |
214
+ | `anyforge_update_work_item` | write | Edit, assign, begin, expedite, dispatch, confirm, drop (with optional `droppedReason`), archive, close, or reopen a work item. Each action takes only its own fields: one it does not read is refused (`unsupported_fields`) and nothing is changed. There is no `status` argument |
145
215
  | `anyforge_retry_work_item` | write | Terminate a work item's crew and dispatch a fresh one on the same branch; recovers missing/phantom crew records from work-item + initiative defaults |
146
216
  | `anyforge_list_work_item_comments` | read | List the work item's discussion thread, separate from crew transcripts; every comment carries a boolean `clientVisible` |
147
217
  | `anyforge_post_work_item_comment` | write | Add a discussion comment to a work item; internal unless `clientVisible: true` shares it with the client as it is written |
@@ -155,7 +225,10 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
155
225
  | `anyforge_resume_crew` | approve | Resume a PAUSED/HALTED crew |
156
226
  | `anyforge_halt_crew` | approve | Halt a crew |
157
227
  | `anyforge_amend_crew` | approve | Continue & finish — send a crew at its HIL gate back to the engineer with guidance. Optional `postToPullRequest` also posts the notes on the pull request; left out, the organization setting decides (off by default) |
158
- | `anyforge_create_program` | write | Create a program (cross-initiative grouping) |
228
+ | `anyforge_fix_crew_ci` | approve | Fix CI: send a crew whose pull request has failing checks back to the Engineer to fix them on the same PR. Works from PR review (HIL_SHIP) or a HALTED/PAUSED crew that has a PR; refused when GitHub does not report CI as failing. Requires `approve` scope and spends crew tokens. Only call when the operator asks. |
229
+ | `anyforge_resume_crew_with_pr` | approve | Review & approve: take a HALTED or PAUSED crew's already-open pull request through the specialist reviews to the approve & merge gate, without re-running the Engineer. Omit prUrl to use the PR stored on the crew. A merged PR is refused. Requires `approve` scope. |
230
+ | `anyforge_decide_crew_permission` | approve | Approve or deny the permission a crew in PERMISSION_PENDING is waiting on (see pendingPermissionRequest on anyforge_get_crew). A tool permission applies for the rest of the run; an MCP write approval decides that one call. Pass approvalId to refuse a decision on a newer request. Requires `approve` scope. Only call when the operator decides. |
231
+ | `anyforge_create_program` | write | Create a program (cross-initiative grouping), optionally with a lead and as long-lived |
159
232
  | `anyforge_create_initiative` | write | Create a (DRAFT) initiative, optionally under a program |
160
233
  | `anyforge_dispatch_architect` | write | Decompose an initiative into a backlog (→ HIL #1) |
161
234
  | `anyforge_list_repo_index` | read | List the org repo index (activity, coverage, analyzed) — discover codebases to scope |
@@ -181,14 +254,23 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
181
254
  | `anyforge_run_workflow` | write | Dispatch a run of a workflow (returns the QUEUED run); runs pause at gate steps for an operator decision |
182
255
  | `anyforge_get_workflow_run` | read | Get a workflow run's status and per-step progress; gate decisions are made on the Console run page |
183
256
  | `anyforge_resolve_workflow_gate` | approve | Resolve a run paused at a gate (`approve` / `amend` / `reject`; `amend` carries guidance in `comment`) |
257
+ | `anyforge_retry_workflow_run` | write | Retry a `FAILED` run from the step that failed: finished steps and a map's answered items are kept, spend keeps accumulating; refused for a failed crew step. Runs on the company key |
184
258
  | `anyforge_list_observability_signals` | read | List production-error triage signals (filter by `status`) |
185
259
  | `anyforge_accept_observability_signal` | write | Accept a signal into a governed incident under the KTLO program |
186
260
  | `anyforge_dismiss_observability_signal` | write | Dismiss a production-error signal as noise |
187
261
  | `anyforge_list_audit_events` | audit:read | Read one page of the hash-chained audit trail, oldest first, with each entry's `sequence`, `hash` and `prevHash` (filter by `eventType`, `actor`, `from`, `to`; page with `cursor`). Needs a key minted with the explicit `audit:read` scope by an owner |
262
+ | `anyforge_list_members` | read | List the workspace's approved members with uid, name, email, role and whether they can be assigned work. Assignment takes the uid, not an email; `q` finds a person by name or email |
188
263
  | `anyforge_invite_person` | people:invite | Invite one person, or refresh their pending invitation: `role` is operator, editor, viewer or filer (never owner), `email` on a verified company domain, optional `teamIds` and `notify`. Needs an owner's key with the `people:invite` scope |
189
264
  | `anyforge_list_people_invitations` | people:invite | List the invitations a `people:invite` key could have written, pending and accepted |
190
265
  | `anyforge_withdraw_person_invitation` | people:invite | Withdraw a pending invitation by email address (an accepted or owner invitation cannot be withdrawn this way) |
191
266
  | `anyforge_list_page_spaces` | read | List the Pages spaces you can read, with each space's key and what you may do there |
267
+ | `anyforge_list_pages` | read | Browse a space by id, with its settings/revision and paginated page metadata; follow `nextCursor` while `hasMore` is true |
268
+ | `anyforge_create_page_space` | write | Create a space as a workspace Owner |
269
+ | `anyforge_update_page_space` | write | Change settings, access, main page or archive state as a space admin; requires `ifRevision` |
270
+ | `anyforge_list_page_versions` | read | Paginated history metadata; readers see only published history |
271
+ | `anyforge_restore_page_version` | write | Restore an older version as a new save; requires current `ifVersion` and keeps history |
272
+ | `anyforge_set_page_publishing` | write | Set live or publish-to-update mode and replace reviewers as the page owner or space admin |
273
+ | `anyforge_publish_page` | write | Publish, request publication, or approve a pending request as a named reviewer |
192
274
  | `anyforge_search_pages` | read | Search the pages you can read (by meaning, or by title); each match has its page id, space, section and snippet |
193
275
  | `anyforge_get_page` | read | Read one page: title, space, version, owner and markdown body (`version` for an older one) |
194
276
  | `anyforge_create_page` | write | Create a page in a space you can edit (`space` key, `title`, optional `content` and `parentId`), owned by you |
@@ -196,6 +278,13 @@ Use the equivalent stdio MCP config (`command: npx`, `args: ["tsx",
196
278
  | `anyforge_move_page` | write | Move a page under another page, to the top level, or to a position among its siblings |
197
279
  | `anyforge_archive_page` | write | Archive a page (kept with its history, hidden from the tree and search), or restore it |
198
280
  | `anyforge_propose_page_edit` | write | Propose find/replace edits as suggestions an editor accepts or rejects in the page; nothing changes until they do (live pages only) |
281
+ | `anyforge_list_reports` | read | List the Insights reports, most recently edited first: id, title, description, widget count, updatedAt and Console `url`; one page at a time (follow `meta.nextCursor`) |
282
+ | `anyforge_get_report` | read | Read one report: settings (`datesShown`, `trendDays`, `textSize`), whether a share link is live, and every widget definition with its query |
283
+ | `anyforge_create_report` | write | Create an empty report (`title`, optional `description` and `datesShown`), owned by you; needs a role that edits reports |
284
+ | `anyforge_update_report` | write | Change the title, description or settings, and edit widgets by id (`addWidgets`, `replaceWidgets`, `removeWidgetIds`) or replace the whole list (`widgets`). Every widget is validated as a Console save is; a refusal saves nothing |
285
+ | `anyforge_preview_report_query` | read | Run one report query against live data without saving anything: total, rows and a text summary (program, strategy and cycles snapshots included); needs a role that edits reports |
286
+ | `anyforge_describe_report_catalog` | read | The report data catalog: sources, measures, group-bys, filter fields and widget types; needs a role that edits reports |
287
+ | `anyforge_list_report_filter_values` | read | The values a query filter field may take: an enum's closed set, or real ids with names (`query` looks one up by name); needs a role that edits reports |
199
288
  | `anyforge_triage_ticket` | read | Run or continue a Support Triage interview — classification, readiness scoring, owning-team routing — and get a paste-ready rendering plus the structured draft; pass the same `sessionId` to continue an interview. Never files anything itself |
200
289
  | `anyforge_list_triage_eval_cases` | read | List permitted triage eval cases; historical cases require Owner/Operator |
201
290
  | `anyforge_upsert_triage_eval_cases` | write | Create or update triage eval cases in bulk; pass an existing case's `id` to update it in place |
@@ -265,7 +354,7 @@ Every tool advertises 2025-06-18 MCP metadata so clients can present it well:
265
354
 
266
355
  - **Title + behaviour annotations** — a human-readable `title` plus hints
267
356
  (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) derived
268
- from the tool's verb, matching the read/write/approve column above. Clients use
357
+ from the tool's verb, matching the explicit policies and Scope column above. Clients use
269
358
  these to, e.g., auto-run read-only tools and confirm before a `delete_*`. They
270
359
  are advisory only: the control API still re-checks the key's scopes on every
271
360
  call, so annotations never widen access.
@@ -376,15 +465,17 @@ npm pack --dry-run # verify the tarball: dist/ + README + package.json only
376
465
 
377
466
  Publishing is automated. **Push a `mcp-server-v<version>` tag** and the
378
467
  `.github/workflows/publish-mcp-server.yml` workflow builds and runs
379
- `npm publish` (scoped public). Keep the tag version in sync with
468
+ `npm publish` (scoped public), after a locked install, type check, build and
469
+ tarball inspection. Re-running a tag whose version is already on npm skips
470
+ publication. Keep the tag version in sync with
380
471
  `package.json`:
381
472
 
382
473
  ```bash
383
474
  cd packages/control/mcp-server
384
- npm version patch # bumps package.json, e.g. 2.0.0 → 2.0.1
385
- git commit -am "chore(mcp): release mcp-server vX.Y.Z" # if not committed by npm version
386
- git tag mcp-server-v$(node -p "require('./package.json').version")
387
- git push origin main --tags
475
+ npm version minor --no-git-tag-version # update package.json and package-lock.json
476
+ # Commit and merge the reviewed version change before tagging that merge:
477
+ git tag mcp-server-vX.Y.Z <reviewed-merge-sha>
478
+ git push origin refs/tags/mcp-server-vX.Y.Z
388
479
  ```
389
480
 
390
481
  > The workflow needs an `NPM_TOKEN` repo secret (an npm **automation**