Files
PaperClipAI/packages/paperclip-runner/spec/capability/mcp-tool-map.yaml
T
DottaandClaude Opus 5.5 5eac099fbb fix(agents): batch independent follow-up questions into one card (#19634)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Agents ask users for input with the `request_human_input` tool or
the `ask_user_questions` interaction. Paperclip shows each call as one
question card.
> - In an onboarding walk, a Codex execution agent asked five
independent questions (name, menu and prices, contact, style, output).
It posted five cards, one after the other. Each card came 20-60 s after
the previous answer.
> - The tool description said: "For one question at a time, ask only the
next unanswered question and wait for its real answer." Agents read this
as a rule. The paperclip skill showed only a one-question example and
did not tell agents to batch.
> - No server cap exists. A question set accepts up to 64 questions.
> - This pull request changes the guidance. Agents now ask independent
inputs together in one card. They use a follow-up card only when a
question depends on an earlier answer. One-at-a-time stays available
when the user asks for it.
> - The benefit is fewer waits for the user: one card and one agent turn
instead of five.

## Linked Issues or Issue Description

**What happened?**
An execution agent asked a user five independent follow-up questions in
five separate question cards. Each card appeared only after the user
answered the previous card and the agent finished another turn (20-60 s
each).

**Expected behavior**
When an agent needs several independent inputs, it asks them together in
one multi-question card. The onboarding interview already does this ("1
of 4" pager).

**Steps to reproduce**
1. Complete onboarding on the Codex API path and hand off a task such as
"Create printable cake menu and logo".
2. Watch the execution agent's first turns.
3. See five sequential single-question cards.

**Paperclip version or commit**
master at 4938a930d6 (local dev server).

**Agent adapter(s) involved**
Codex (gpt-5.6-sol). The guidance is shared by all adapters that use the
Runner `request_human_input` tool or the `paperclip` skill.

## What Changed

-
`packages/paperclip-runner/src/protocol-actions/request-human-input.ts`:
replace the ambiguous "For one question at a time…" sentence. The new
text tells agents to ask independent inputs together in one questions
card. They use a follow-up card only when it depends on an earlier
answer. It keeps one-at-a-time for when the user asks for it.
- `skills/paperclip/SKILL.md` and
`skills/paperclip/references/api-reference.md`: add the same batching
rule to the human-input sections.
- `packages/mcp-server/src/tools.ts`: add the batching hint to the
`paperclipAskUserQuestions` tool description.
- Regenerated runner contracts (`semantic-tool-contracts.json`,
`protocol/manifest.json`, `native-execution-seeded.json`) and updated
the legacy MCP alias semantics in `spec/capability/mcp-tool-map.yaml`.
- New tests: `core-contracts.test.ts` (tool description) and
`paperclip-skill-utils.test.ts` (skill and API reference).

## Verification

Red on master (tests added, source unchanged):

```
packages/paperclip-runner: npx vitest run src/protocol-actions/core-contracts.test.ts -t batch
 × tells agents to batch independent questions into one card instead of asking them one by one
AssertionError: expected 'Create a durable human question or ap…' not to contain 'For one question at a time'
 Tests  1 failed | 20 skipped (21)

npx vitest run server/src/__tests__/paperclip-skill-utils.test.ts -t batch
 × tells agents to batch independent human-input questions into one card
AssertionError: expected ' For an open answer, use a text field…' to contain 'ask them together in one card'
 Tests  1 failed | 21 skipped (22)
```

Green after the fix:

```
packages/paperclip-runner: npx vitest run src/protocol-actions src/drivers/runner-tool-bridge.claude-schema.test.ts
 Test Files  4 passed (4)   Tests  46 passed (46)
npx vitest run server/src/__tests__/paperclip-skill-utils.test.ts            Tests 22 passed (22)
npx vitest run server/src/services/native-runtime/paperclip-runner-tool-authority.test.ts   Tests 41 passed (41)
node scripts/generate-semantic-contracts.mjs --check / generate-capability-contract --check / generate-semantic-action-catalog --check / generate-replay-goldens --check: current
```

`packages/mcp-server` has one failure ("allows create issue requests to
omit status…"). It also fails on master without this change, so it is
not related.

This is a guidance change. The automated check proves that the guidance
the agent receives tells it to batch. I did not run a live-model eval.

## Risks

- Low risk. The change is text only: tool descriptions and skill docs.
No schema, API, or storage change.
- An agent could put a dependent question into the same card. The text
tells agents to use a follow-up card for dependent questions.

## Model Used

- Claude Opus 5.5 (`claude-opus-5-5`) in Claude Code, with tool use and
code execution.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [ ] All Paperclip CI gates are green
- [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 07:48:28 -06:00

433 lines
19 KiB
YAML

# GENERATED FILE — DO NOT EDIT. Run pnpm generate:capability-inventory.
{
"schemaVersion": 2,
"inventoryRole": "legacy_alias_index",
"generatedFrom": "packages/mcp-server/src/tools.ts",
"normativeSources": [
"capabilities",
"evaluations"
],
"rows": [
{
"id": "mcp:paperclipMe",
"name": "paperclipMe",
"description": "Get the current authenticated Paperclip actor details",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:290",
"expectedSemantics": "Get the current authenticated Paperclip actor details",
"foldedInto": "eval:hb-inbox-lite-01",
"evidenceId": "mcp:paperclipMe"
},
{
"id": "mcp:paperclipInboxLite",
"name": "paperclipInboxLite",
"description": "Get the current authenticated agent inbox-lite assignment list",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:296",
"expectedSemantics": "Get the current authenticated agent inbox-lite assignment list",
"foldedInto": "eval:hb-inbox-lite-01",
"evidenceId": "mcp:paperclipInboxLite"
},
{
"id": "mcp:paperclipListAgents",
"name": "paperclipListAgents",
"description": "List agents in a company",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:302",
"expectedSemantics": "List agents in a company",
"foldedInto": "eval:rf-api-mgr-heartbeat-01",
"evidenceId": "mcp:paperclipListAgents"
},
{
"id": "mcp:paperclipListSkills",
"name": "paperclipListSkills",
"description": "List the company skill library (all installed skills, independent of which agents have them enabled)",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:308",
"expectedSemantics": "List the company skill library (all installed skills, independent of which agents have them enabled)",
"foldedInto": "eval:rf-cskill-audit-01",
"evidenceId": "mcp:paperclipListSkills"
},
{
"id": "mcp:paperclipGetAgent",
"name": "paperclipGetAgent",
"description": "Get a single agent by id",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:314",
"expectedSemantics": "Get a single agent by id",
"foldedInto": "eval:rf-api-mgr-heartbeat-01",
"evidenceId": "mcp:paperclipGetAgent"
},
{
"id": "mcp:paperclipListIssues",
"name": "paperclipListIssues",
"description": "List issues for a company with optional filters",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:323",
"expectedSemantics": "List issues for a company with optional filters",
"foldedInto": "eval:se-q-filters-01",
"evidenceId": "mcp:paperclipListIssues"
},
{
"id": "mcp:paperclipGetIssue",
"name": "paperclipGetIssue",
"description": "Get a single issue by UUID or identifier",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:338",
"expectedSemantics": "Get a single issue by UUID or identifier",
"foldedInto": "eval:se-get-issue-01",
"evidenceId": "mcp:paperclipGetIssue"
},
{
"id": "mcp:paperclipGetHeartbeatContext",
"name": "paperclipGetHeartbeatContext",
"description": "Get compact heartbeat context for an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:344",
"expectedSemantics": "Get compact heartbeat context for an issue",
"foldedInto": "eval:hb-context-01",
"evidenceId": "mcp:paperclipGetHeartbeatContext"
},
{
"id": "mcp:paperclipListComments",
"name": "paperclipListComments",
"description": "List issue comments with incremental options",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:353",
"expectedSemantics": "List issue comments with incremental options",
"foldedInto": "eval:se-get-issue-01",
"evidenceId": "mcp:paperclipListComments"
},
{
"id": "mcp:paperclipGetComment",
"name": "paperclipGetComment",
"description": "Get a specific issue comment by id",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:366",
"expectedSemantics": "Get a specific issue comment by id",
"foldedInto": "eval:hb-wake-comment-01",
"evidenceId": "mcp:paperclipGetComment"
},
{
"id": "mcp:paperclipListIssueApprovals",
"name": "paperclipListIssueApprovals",
"description": "List approvals linked to an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:373",
"expectedSemantics": "List approvals linked to an issue",
"foldedInto": "eval:ap-board-approval-01",
"evidenceId": "mcp:paperclipListIssueApprovals"
},
{
"id": "mcp:paperclipListDocuments",
"name": "paperclipListDocuments",
"description": "List issue documents",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:379",
"expectedSemantics": "List issue documents",
"foldedInto": "eval:dp-base-revision-01",
"evidenceId": "mcp:paperclipListDocuments"
},
{
"id": "mcp:paperclipGetDocument",
"name": "paperclipGetDocument",
"description": "Get one issue document by key",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:385",
"expectedSemantics": "Get one issue document by key",
"foldedInto": "eval:dp-base-revision-01",
"evidenceId": "mcp:paperclipGetDocument"
},
{
"id": "mcp:paperclipListDocumentRevisions",
"name": "paperclipListDocumentRevisions",
"description": "List revisions for an issue document",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:392",
"expectedSemantics": "List revisions for an issue document",
"foldedInto": "eval:dp-base-revision-01",
"evidenceId": "mcp:paperclipListDocumentRevisions"
},
{
"id": "mcp:paperclipListProjects",
"name": "paperclipListProjects",
"description": "List projects in a company",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:402",
"expectedSemantics": "List projects in a company",
"foldedInto": "eval:rf-wf-project-setup-01",
"evidenceId": "mcp:paperclipListProjects"
},
{
"id": "mcp:paperclipGetProject",
"name": "paperclipGetProject",
"description": "Get a project by id or company-scoped short reference",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:408",
"expectedSemantics": "Get a project by id or company-scoped short reference",
"foldedInto": "eval:rf-wf-project-setup-01",
"evidenceId": "mcp:paperclipGetProject"
},
{
"id": "mcp:paperclipGetIssueWorkspaceRuntime",
"name": "paperclipGetIssueWorkspaceRuntime",
"description": "Get the current execution workspace and runtime services for an issue, including service URLs",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:417",
"expectedSemantics": "Get the current execution workspace and runtime services for an issue, including service URLs",
"foldedInto": "eval:rf-iws-start-url-01",
"evidenceId": "mcp:paperclipGetIssueWorkspaceRuntime"
},
{
"id": "mcp:paperclipControlIssueWorkspaceServices",
"name": "paperclipControlIssueWorkspaceServices",
"description": "Start, stop, or restart the current issue execution workspace runtime services",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:423",
"expectedSemantics": "Start, stop, or restart the current issue execution workspace runtime services",
"foldedInto": "eval:rf-iws-start-url-01",
"evidenceId": "mcp:paperclipControlIssueWorkspaceServices"
},
{
"id": "mcp:paperclipWaitForIssueWorkspaceService",
"name": "paperclipWaitForIssueWorkspaceService",
"description": "Wait until an issue execution workspace runtime service is running and has a URL when one is exposed",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:440",
"expectedSemantics": "Wait until an issue execution workspace runtime service is running and has a URL when one is exposed",
"foldedInto": "eval:rf-iws-target-restart-01",
"evidenceId": "mcp:paperclipWaitForIssueWorkspaceService"
},
{
"id": "mcp:paperclipListGoals",
"name": "paperclipListGoals",
"description": "List goals in a company",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:466",
"expectedSemantics": "List goals in a company",
"foldedInto": "eval:su-parent-goal-01",
"evidenceId": "mcp:paperclipListGoals"
},
{
"id": "mcp:paperclipGetGoal",
"name": "paperclipGetGoal",
"description": "Get a goal by id",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:472",
"expectedSemantics": "Get a goal by id",
"foldedInto": "eval:su-parent-goal-01",
"evidenceId": "mcp:paperclipGetGoal"
},
{
"id": "mcp:paperclipListApprovals",
"name": "paperclipListApprovals",
"description": "List approvals in a company",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:478",
"expectedSemantics": "List approvals in a company",
"foldedInto": "eval:ap-approval-wake-01",
"evidenceId": "mcp:paperclipListApprovals"
},
{
"id": "mcp:paperclipCreateApproval",
"name": "paperclipCreateApproval",
"description": "Create a board approval request, optionally linked to one or more issues",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:487",
"expectedSemantics": "Create a board approval request, optionally linked to one or more issues",
"foldedInto": "eval:ap-board-approval-01",
"evidenceId": "mcp:paperclipCreateApproval"
},
{
"id": "mcp:paperclipGetApproval",
"name": "paperclipGetApproval",
"description": "Get an approval by id",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:496",
"expectedSemantics": "Get an approval by id",
"foldedInto": "eval:ap-approval-wake-01",
"evidenceId": "mcp:paperclipGetApproval"
},
{
"id": "mcp:paperclipGetApprovalIssues",
"name": "paperclipGetApprovalIssues",
"description": "List issues linked to an approval",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:502",
"expectedSemantics": "List issues linked to an approval",
"foldedInto": "eval:ap-approval-wake-01",
"evidenceId": "mcp:paperclipGetApprovalIssues"
},
{
"id": "mcp:paperclipListApprovalComments",
"name": "paperclipListApprovalComments",
"description": "List comments for an approval",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:508",
"expectedSemantics": "List comments for an approval",
"foldedInto": "eval:ap-approval-deny-01",
"evidenceId": "mcp:paperclipListApprovalComments"
},
{
"id": "mcp:paperclipCreateIssue",
"name": "paperclipCreateIssue",
"description": "Create a new issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:514",
"expectedSemantics": "Create a new issue",
"foldedInto": "eval:su-parent-goal-01",
"evidenceId": "mcp:paperclipCreateIssue"
},
{
"id": "mcp:paperclipUpdateIssue",
"name": "paperclipUpdateIssue",
"description": "Patch an issue, optionally including a comment; include resume=true when intentionally requesting follow-up on resumable closed work",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:521",
"expectedSemantics": "Patch an issue, optionally including a comment; include resume=true when intentionally requesting follow-up on resumable closed work",
"foldedInto": "eval:st-done-comment-01",
"evidenceId": "mcp:paperclipUpdateIssue"
},
{
"id": "mcp:paperclipCheckoutIssue",
"name": "paperclipCheckoutIssue",
"description": "Checkout an issue for an agent",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:528",
"expectedSemantics": "Checkout an issue for an agent",
"foldedInto": "eval:co-body-contract-01",
"evidenceId": "mcp:paperclipCheckoutIssue"
},
{
"id": "mcp:paperclipReleaseIssue",
"name": "paperclipReleaseIssue",
"description": "Release an issue checkout",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:540",
"expectedSemantics": "Release an issue checkout",
"foldedInto": "eval:er-release-01",
"evidenceId": "mcp:paperclipReleaseIssue"
},
{
"id": "mcp:paperclipAddComment",
"name": "paperclipAddComment",
"description": "Add a comment to an issue; include resume=true when intentionally requesting follow-up on resumable closed work",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:546",
"expectedSemantics": "Add a comment to an issue; include resume=true when intentionally requesting follow-up on resumable closed work",
"foldedInto": "eval:cm-multiline-01",
"evidenceId": "mcp:paperclipAddComment"
},
{
"id": "mcp:paperclipSuggestTasks",
"name": "paperclipSuggestTasks",
"description": "Create a suggest_tasks interaction on an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:553",
"expectedSemantics": "Create a suggest_tasks interaction on an issue",
"foldedInto": "eval:ix-suggest-tasks-01",
"evidenceId": "mcp:paperclipSuggestTasks"
},
{
"id": "mcp:paperclipAskUserQuestions",
"name": "paperclipAskUserQuestions",
"description": "Create an ask_user_questions interaction on an issue. Ask independent questions together in one interaction instead of one per card.",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:565",
"expectedSemantics": "Create an ask_user_questions interaction on an issue. Ask independent questions together in one interaction instead of one per card.",
"foldedInto": "eval:ix-questions-01",
"evidenceId": "mcp:paperclipAskUserQuestions"
},
{
"id": "mcp:paperclipRequestConfirmation",
"name": "paperclipRequestConfirmation",
"description": "Create a request_confirmation interaction on an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:577",
"expectedSemantics": "Create a request_confirmation interaction on an issue",
"foldedInto": "eval:ix-confirmation-plan-01",
"evidenceId": "mcp:paperclipRequestConfirmation"
},
{
"id": "mcp:paperclipRequestCheckboxConfirmation",
"name": "paperclipRequestCheckboxConfirmation",
"description": "Create a request_checkbox_confirmation interaction on an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:589",
"expectedSemantics": "Create a request_checkbox_confirmation interaction on an issue",
"foldedInto": "eval:ix-checkbox-01",
"evidenceId": "mcp:paperclipRequestCheckboxConfirmation"
},
{
"id": "mcp:paperclipUpsertIssueDocument",
"name": "paperclipUpsertIssueDocument",
"description": "Create or update an issue document",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:601",
"expectedSemantics": "Create or update an issue document",
"foldedInto": "eval:dp-plan-doc-01",
"evidenceId": "mcp:paperclipUpsertIssueDocument"
},
{
"id": "mcp:paperclipRestoreIssueDocumentRevision",
"name": "paperclipRestoreIssueDocumentRevision",
"description": "Restore a prior revision of an issue document",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:612",
"expectedSemantics": "Restore a prior revision of an issue document",
"foldedInto": "eval:dp-base-revision-01",
"evidenceId": "mcp:paperclipRestoreIssueDocumentRevision"
},
{
"id": "mcp:paperclipLinkIssueApproval",
"name": "paperclipLinkIssueApproval",
"description": "Link an approval to an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:627",
"expectedSemantics": "Link an approval to an issue",
"foldedInto": "eval:ap-board-approval-01",
"evidenceId": "mcp:paperclipLinkIssueApproval"
},
{
"id": "mcp:paperclipUnlinkIssueApproval",
"name": "paperclipUnlinkIssueApproval",
"description": "Unlink an approval from an issue",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:636",
"expectedSemantics": "Unlink an approval from an issue",
"foldedInto": "eval:ap-board-approval-01",
"evidenceId": "mcp:paperclipUnlinkIssueApproval"
},
{
"id": "mcp:paperclipApprovalDecision",
"name": "paperclipApprovalDecision",
"description": "Approve, reject, request revision, or resubmit an approval",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:646",
"expectedSemantics": "Approve, reject, request revision, or resubmit an approval",
"foldedInto": "eval:ap-approval-wake-01",
"evidenceId": "mcp:paperclipApprovalDecision"
},
{
"id": "mcp:paperclipAddApprovalComment",
"name": "paperclipAddApprovalComment",
"description": "Add a comment to an approval",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:668",
"expectedSemantics": "Add a comment to an approval",
"foldedInto": "eval:ap-approval-deny-01",
"evidenceId": "mcp:paperclipAddApprovalComment"
},
{
"id": "mcp:paperclipApiRequest",
"name": "paperclipApiRequest",
"description": "Make a JSON request to an existing Paperclip /api endpoint for unsupported operations",
"sourceKind": "legacy_mcp_alias",
"sourceAnchor": "packages/mcp-server/src/tools.ts:677",
"expectedSemantics": "Make a JSON request to an existing Paperclip /api endpoint for unsupported operations",
"foldedInto": "eval:rf-api-404-report-01",
"evidenceId": "mcp:paperclipApiRequest"
}
]
}