paperclipai/paperclip · error · ToolGatewayHttpError

mcp_remote_invalid_json

mcp_remote_invalid_json

Error message

Remote MCP server returned invalid JSON

What it means

Remote MCP response body could not be parsed as JSON (or the content-type Negotiation failed in parseMcpHttpResponseBody). The connection is marked unhealthy and a 502 mcp_remote_invalid_json is thrown with the execution context; the upstream server returned a malformed or non-JSON payload such as an HTML error page.

Source

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

    const href = `/${company?.issuePrefix ?? ""}/apps/${connection.id}/setup`;
    const idempotencyKey = `connection-delegation:${connection.id}:${userId}:${session.agentId}`;
    const payload = {
      version: 1 as const,
      prompt: `Allow this agent to use your ${connection.name} account for autonomous runs`,
      acceptLabel: "Review delegation",
      rejectLabel: "Not now",
      detailsMarkdown: "This autonomous run is paused. Paperclip will not use your personal identity until you explicitly delegate it to this named agent.",
      target: {
        type: "custom" as const,
        key: `connection:${connection.uid}:delegation:${userId}:${session.agentId}`,
        revisionId: connection.updatedAt.toISOString(),
        label: `Delegate ${connection.name}`,
        href,
      },
    };
    const [existing] = await db.select({ id: issueThreadInteractions.id }).from(issueThreadInteractions).where(and(
      eq(issueThreadInteractions.companyId, session.companyId),
      eq(issueThreadInteractions.issueId, session.issueId),
      eq(issueThreadInteractions.idempotencyKey, idempotencyKey),
    )).limit(1);
    if (existing) {
      await db.update(issueThreadInteractions).set({
        status: "pending",
        continuationPolicy: "wake_assignee",
        requestedResolverPolicy: "human_only",
        effectiveResolverPolicy: "human_only",
        resolverPolicyProvenance: "explicit",
        effectiveResolverPolicySource: "requested",
        addresseeUserId: userId,
        payload,
        result: null,
        resolvedAt: null,
        updatedAt: new Date(),
      }).where(eq(issueThreadInteractions.id, existing.id));
      return;
    }

View on GitHub (pinned to 5716fe907e)

Solutions

  1. The remote MCP server returned malformed JSON. Verify the endpoint speaks MCP/JSON-RPC and inspect the raw response.
Defensive patterns

Strategy: try-catch

When it happens

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

Common situations: See trigger scenarios.

Understand the failure class


AI-assisted analysis of paperclipai/paperclip@5716fe907e (2026-08-18). Data as JSON: /api/errors/c5e5852025bd03f5. Report an issue: GitHub.