Installation

No MCP yet? Connect your agent.

Usage

import { Message, MessageAvatar, MessageContent } from "@/components/ui/message";

Basic Message

<Message from="user">
  <MessageAvatar src="/user-avatar.jpg" name="John" />
  <MessageContent>Hello, how can I help you?</MessageContent>
</Message>

<Message from="assistant">
  <MessageAvatar src="/assistant-avatar.jpg" name="AI" />
  <MessageContent>I'm here to assist you with any questions!</MessageContent>
</Message>

Message Variants

The MessageContent component supports two variants:

import { Message, MessageAvatar, MessageContent } from "@/components/ui/message";

export default () => (
  <>
    {/* Contained variant - default, has background and padding */}
    <Message from="user">
      <MessageAvatar src="/user-avatar.jpg" />
      <MessageContent variant="contained">
        This is a contained message with background
      </MessageContent>
    </Message>

    {/* Flat variant - no background for assistant, minimal styling */}
    <Message from="assistant">
      <MessageAvatar src="/assistant-avatar.jpg" />
      <MessageContent variant="flat">This is a flat message with minimal styling</MessageContent>
    </Message>
  </>
);

In a Conversation

import { Conversation, ConversationContent } from "@/components/ui/conversation";
import { Message, MessageAvatar, MessageContent } from "@/components/ui/message";

export default ({ messages }) => (
  <Conversation>
    <ConversationContent>
      {messages.map((message) => (
        <Message key={message.id} from={message.from}>
          <MessageAvatar src={message.avatarUrl} name={message.name} />
          <MessageContent>{message.content}</MessageContent>
        </Message>
      ))}
    </ConversationContent>
  </Conversation>
);