mastra-ai/mastra · error · Error

Received input message with wrong resourceId. Input ${messag

Error message

Received input message with wrong resourceId. Input ${message.resourceId}, expected ${context.memoryInfo.resourceId}

What it means

Error thrown by inputToMastraDBMessage when an input message's resourceId does not match the resourceId of the active memory context. This guards against attaching messages owned by one user/resource to another resource's thread. Memory-sourced messages are exempt (e.g. observational-memory continuation messages may carry a system resourceId).

Source

Thrown at packages/core/src/agent/message-list/conversion/input-converter.ts:58

    message.threadId &&
    context.memoryInfo &&
    message.threadId !== context.memoryInfo.threadId
  ) {
    throw new Error(
      `Received input message with wrong threadId. Input ${message.threadId}, expected ${context.memoryInfo.threadId}`,
    );
  }

  // Validate resourceId matches (except for memory messages, which can carry a
  // system resourceId — e.g. observational-memory continuation messages)
  if (
    messageSource !== `memory` &&
    `resourceId` in message &&
    message.resourceId &&
    context.memoryInfo?.resourceId &&
    message.resourceId !== context.memoryInfo.resourceId
  ) {
    throw new Error(
      `Received input message with wrong resourceId. Input ${message.resourceId}, expected ${context.memoryInfo.resourceId}`,
    );
  }

  if (TypeDetector.isMastraMessageV1(message)) {
    return stampMessageParts(mastraMessageV1ToMastraDBMessage(message, messageSource, context), messageSource);
  }
  if (TypeDetector.isMastraDBMessage(message)) {
    return stampMessageParts(hydrateMastraDBMessageFields(message, context, messageSource), messageSource);
  }
  if (TypeDetector.isAIV4CoreMessage(message)) {
    return stampMessageParts(AIV4Adapter.fromCoreMessage(message, context, messageSource), messageSource);
  }
  if (TypeDetector.isAIV4UIMessage(message)) {
    return stampMessageParts(
      AIV4Adapter.fromUIMessage(message as UIMessageV4 | UIMessageWithMetadata, context, messageSource),
      messageSource,
    );

View on GitHub (pinned to 75dd419e61)

Solutions

  1. Strip resourceId from input messages and let the agent stamp the current resource's id.
  2. Ensure the messages you pass were fetched for the same resourceId the agent call uses in memory options.
  3. Migrate stored messages if you changed your resourceId convention (update their resourceId field to the new key).
  4. Verify per-user data fetching so one tenant's messages never reach another tenant's agent call.

Example fix

// before
await agent.generate(otherUsersMessages, { memory: { thread, resource: 'user-123' } });

// after
const mine = await memory.getMessages({ threadId, resourceId: 'user-123' });
await agent.generate(mine, { memory: { thread, resource: 'user-123' } });
Defensive patterns

Strategy: validation

Validate before calling

function assertResourceMatches(messages: Array<{ resourceId?: string }>, expectedResourceId: string): void {
  for (const m of messages) {
    if (m.resourceId && m.resourceId !== expectedResourceId) {
      throw new Error(`Message resourceId ${m.resourceId} != expected ${expectedResourceId}`);
    }
  }
}

Try / catch

try {
  await agent.generate(messages, { memory: { thread, resource: resourceId } });
} catch (e) {
  if (e instanceof Error && e.message.includes('wrong resourceId')) {
    const scoped = messages.map(({ resourceId: _rid, ...m }) => m);
    return agent.generate(scoped, { memory: { thread, resource: resourceId } });
  }
  throw e;
}

Prevention

When it happens

Trigger: Passing messages whose resourceId differs from context.memoryInfo.resourceId — e.g. injecting another user's stored messages into a new user's thread, or sending messages saved under an old resourceId after the resource was renamed/re-keyed.

Common situations: Multi-tenant apps where messages are fetched for the wrong user; changing resourceId scheme (e.g. from email to user ID) without migrating stored messages; shared/cached message arrays reused across users; copy-pasted test fixtures containing a different resourceId.

Related errors


AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30). Data as JSON: /api/errors/4a6cdbe8c7e593f0. Report an issue: GitHub.