paperclipai/paperclip · error · ToolGatewayHttpError

action_already_consumed

action_already_consumed

Error message

Tool action request was already consumed

What it means

Idempotency guard in executeApprovedAgentInvocation: the compare-and-set from approved to executing matched no rows, meaning another executor already consumed this approval (or it was resolved otherwise) and the wait-for-settlement fallback also found it neither executed nor failed. The request was already consumed and cannot run twice.

Source

Thrown at server/src/services/tool-gateway.ts:4318

        headers: mcpHttpRequestHeaders(requestHeaders),
        signal: controller.signal,
        body: JSON.stringify({
          jsonrpc: "2.0",
          id: requestId,
          method: "tools/call",
          params: {
            name: entry.toolName,
            arguments: parameters,
          },
        }),
      };
      let response = await dispatchRemote(endpoint, requestInit);
      if (response.status === 401 && composioChild) {
        composioSession = await composioSessions.ensureSession(connection.id, {
          tools: [entry.toolName],
          scopeRevision: composioScopeRevision,
          force: true,
        });
        endpoint = composioSession.url;
        credentialHeaders = composioSession.headers;
        builtHeaders = buildRemoteHeaders({ session, connection, credentialHeaders, callerHeaders });
        headers = builtHeaders.headers;
        headerSummary = builtHeaders.summary;
        const retryInit = { ...requestInit, headers: mcpHttpRequestHeaders(headers) };
        response = await dispatchRemote(endpoint, retryInit);
      }
      const oauth = asRecord(asRecord(connection.config)?.oauth);
      if (
        response.status === 401
        && connection.authKind === "oauth"
        && connection.credentialSource === "paperclip_vault"
        && isPaperclipCloudConnectorStrategy(oauth?.strategy)
      ) {
        credentialHeaders = {
          ...projectedConnectionHeaders(connection),
          ...await resolveCredentialHeaders(session, connection, grant, { forceRefresh: true }),

View on GitHub (pinned to 01ad858492)

Solutions

  1. This action request was already consumed by a prior execution. Create a new approval request instead of reusing it.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/services/tool-gateway.ts:4177 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18). Data as JSON: /api/errors/8c7d173f4230f5a3. Report an issue: GitHub.