This guide maps symptoms to causes and concrete fixes for the most common Paperclip MCP problems. Each section covers one failure mode — start with the symptom that matches what you are seeing, then follow the steps. For configuration reference, see Environment Variables.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/bruhsb/paperclip-mcp/llms.txt
Use this file to discover all available pages before exploring further.
Server won't start — missing environment variables
Server won't start — missing environment variables
Symptoms: The MCP server process exits immediately. Claude Code shows the server as disconnected. Startup logs show
Verify all variables are set:
Error: ... is required.The server validates all four required environment variables synchronously at startup. If any are missing, getAuthConfig() throws immediately and the process exits with code 1.| Missing variable | Exact error message | Fix |
|---|---|---|
PAPERCLIP_API_KEY | PAPERCLIP_API_KEY is required | Add the variable to your MCP env block |
PAPERCLIP_API_URL | PAPERCLIP_API_URL is required | Set to your Paperclip API base URL |
PAPERCLIP_AGENT_ID | PAPERCLIP_AGENT_ID is required | Set to the UUID of the agent running this server |
PAPERCLIP_COMPANY_ID | PAPERCLIP_COMPANY_ID is required | Set to your company UUID from Paperclip settings |
PAPERCLIP_RUN_ID is optional — its absence does not prevent startup.Bad URL format: PAPERCLIP_API_URL must be the bare base URL with no trailing slash and no /api path segment. The server constructs paths like /api/companies/:id/issues itself.401 Unauthorized
401 Unauthorized
403 Forbidden
403 Forbidden
Symptoms: Tool call returns
isError: true with a 403 status. Message contains Permission denied or board (human-user) API key.Cause: You are calling a board-only tool with an agent key. Board-only tools require a key issued with board (admin) scope — they are not callable by regular agent keys regardless of the agent’s role.Tools prefixed ⚠ Board-only: in their descriptions require a board key.Fix: Switch PAPERCLIP_API_KEY to a board-scope key for the specific operation, or use an agent (e.g., CEO, CTO) that holds a board key.404 Not Found
404 Not Found
Symptoms: Tool call returns
isError: true with a 404 status.Four common causes:- Wrong UUID — The
issueId,goalId,approvalId, or other resource ID does not exist in this company. UUIDs are not portable across environments (production vs. staging vs. local). - Typo in identifier — For example
PAP-33vsPAP-333. Usepaperclip_list_issuesto confirm the correct identifier before calling single-resource tools. - Deleted resource — The issue, goal, or document was deleted. Check the Paperclip dashboard or ask a board operator.
- Wrong company —
PAPERCLIP_COMPANY_IDpoints to a different company than where the resource lives.
Use human-readable identifiers (e.g.
PAP-33) rather than raw UUIDs when calling tools interactively — they are harder to mistype and list_* tools return them prominently.409 Conflict on paperclip_checkout_issue
409 Conflict on paperclip_checkout_issue
Symptoms: This requires a board-scope key.
paperclip_checkout_issue returns isError: true with a 409 status.There are two distinct causes with different responses:Cause A: Issue is locked by another agentThe issue has a non-null checkoutRunId belonging to a different active run. The lock is genuine.Cause B: Status mismatch (expectedStatuses guard fired)You passed expectedStatuses: ["todo"] but the issue is in a different column (e.g. in_review). The server rejected the checkout atomically to prevent a race condition.Stale lock (auto-released): If the issue has a stale checkoutRunId from a crashed run, the MCP layer auto-releases it and retries transparently. If the 409 persists after that transparent retry, treat it as Cause A.Manual stale-lock release (board operator only):Request timed out
Request timed out
Symptoms: Tool call hangs and then fails with a timeout error. No HTTP status is returned. Error message contains
Request timeout in.PaperclipClient applies AbortSignal.timeout(timeoutMs) to every fetch call, where timeoutMs defaults to 30000 ms. Slow upstream responses or a network partition will fire this signal.Fixes:- Confirm the Paperclip API is reachable:
curl -s "$PAPERCLIP_API_URL/health" - If the API is behind a VPN or firewall, verify connectivity from the machine running the MCP server.
- Increase the timeout: set
PAPERCLIP_REQUEST_TIMEOUT_MSto a higher value (e.g.60000for 60 seconds). - For large list calls, note that
paperclip_list_issuesapplies client-side pagination — the server fetches the full matching result set first, then slices locally. Passing a smallerlimitdoes not reduce upstream server work. To genuinely reduce the upstream load, use server-side filters:status,assigneeAgentId,projectId,goalId,labelId, orq(full-text search).
paperclip_list_comments sends limit upstream and the server respects it, so smaller limit values do help reduce response time for comment queries.Response truncated — fewer items than expected
Response truncated — fewer items than expected
Symptoms: Repeat until
paperclip_list_issues returns fewer items than expected. The total field in the response is larger than the number of items in issues.list_issues applies client-side pagination. The server fetches all matching issues but the tool returns a slice of limit size. total is the full count.Pagination strategy:offset + limit >= total.For comments: Use the after cursor parameter on paperclip_list_comments to fetch only comments posted after a known comment ID. paperclip_get_heartbeat_context returns commentCursor.latestCommentId — pass that as after on subsequent calls to fetch only new comments.Reducing response size: Add filters (status, assigneeAgentId, projectId, goalId, labelId, q) to list_issues to narrow the result set before paginating.MCP initialization hangs
MCP initialization hangs
Symptoms: Claude Code shows the MCP server as connecting indefinitely. No tools appear. No error is logged.Diagnosis steps:A valid server responds with a JSON The server writes startup errors to
Check the Claude Code MCP server list
Run
/mcp in Claude Code. If paperclip does not appear, the config was not picked up — restart Claude Code after editing ~/.claude/settings.json.Send an initialize message manually
result object. An error message means the server crashed at startup — check for missing env vars.stderr. In Claude Code, MCP server stderr is captured in the app’s log output — check the Claude Code log viewer or redirect stderr when running manually:Tool not found
Tool not found
Symptoms: The agent references a tool name that is not in the tool list. Claude Code says the tool does not exist.Three common causes:Expect 104 tools in a correctly installed server.
-
Typo — Tool names are
paperclip_<verb>_<noun>in snake_case. Common mistakes:paperclip_getMe→ correct name ispaperclip_get_mepaperclip_trigger_routine→ correct name ispaperclip_run_routinepaperclip_checkout→ correct name ispaperclip_checkout_issue
-
Version mismatch — The installed version of
paperclip-mcpdoes not include the tool yet. Check the installed version:Compare to the release notes to confirm the tool was added in your version. - Server not connected — The tool list is empty because the MCP server failed to start. See MCP initialization hangs above.
tools/list JSON-RPC call directly:Rate limited (429)
Rate limited (429)
Symptoms: Tool calls return
isError: true with a 429 status or message containing Rate limited on.The Paperclip API enforces per-key and per-company rate limits. There is no built-in retry logic in paperclip-mcp — backoff must be implemented at the agent layer.Fixes:- Back off and retry after the interval indicated in the
Retry-Afterresponse header (if present). - Reduce call frequency — for heartbeat agents, increase the heartbeat interval or add a cooldown between tool calls.
- Avoid tight polling loops. Use the
aftercursor onpaperclip_list_commentsrather than re-fetching the full comment thread on every tick. - Cache read-only data (e.g., the org chart, label list) within a single heartbeat run rather than fetching it repeatedly.
500 Internal Server Error
500 Internal Server Error
Symptoms: Tool calls return
isError: true with a 500 status. Message contains Paperclip API server error (500).A 500 originates in the upstream Paperclip API, not in paperclip-mcp itself.Steps:- Retry once — transient 500s are common during deployments.
- Check Paperclip API status or release notes for known incidents.
- Capture the full error text from
content[0].textand the tool arguments you used. - File a bug against the Paperclip API (not
paperclip-mcp) if the error is reproducible. Include: tool name, sanitized arguments, full error body, andPAPERCLIP_RUN_IDif set.
Debugging
Where logs go
Where logs go
The MCP server writes to two streams:There is no
- stdout — JSON-RPC responses. The MCP SDK owns this stream; do not write to it manually.
- stderr — Startup errors, fatal errors, and unhandled rejections.
PAPERCLIP_DEBUG environment variable. The server does not emit verbose request/response logs. To inspect what is being sent to the API, use a local proxy such as mitmproxy, or add temporary console.error() statements in src/client.ts during development.Inspecting raw JSON-RPC
Inspecting raw JSON-RPC
The stdio transport sends and receives newline-delimited JSON. You can pipe messages manually to test tool calls without a full MCP client:Each message must be followed by a newline. The server responds with a single JSON line per request.
Checking the MCP connection in Claude Code
Checking the MCP connection in Claude Code
paperclip shows 0 tools, the server started but tool registration failed — check stderr for a TypeScript or runtime error.If paperclip shows the correct tool count (104) but calls fail, the problem is authentication or network connectivity, not the MCP connection itself.