Messaging contracts preserve conversation and reply relationships across workspace providers.

Canonical tools

ActionPurpose
list_channelsDiscover visible conversations
list_membersDiscover visible participants
list_messagesPage recent messages
get_messageRetrieve one known message
send_messageSend a top-level message
reply_to_messagePreserve a thread or reply
add_reactionAdd an emoji reaction
create_channelCreate shared workspace state

Provider matrix

ToolkitDiscovery/readSendReplyReact/create
SlackFullYesYesBoth
DiscordFullYesYesBoth
TelegramMessages onlyYesYesNo
WhatsApp BusinessGet oneYesNoNo

Worked example

ts
import { Eyeball } from "@eyeball/sdk";

const eyeball = new Eyeball({
  apiKey: process.env.EYEBALL_API_KEY!,
  baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});

const message = await eyeball.tools.run(
  "slack.send_message",
  {
    conversationId: "C_RESTAURANT_TEAM",
    text: "Reservation res_42 is confirmed for Friday at 7 PM.",
  },
  {
    userId: "demo_user",
    idempotencyKey: "reservation:res_42:slack",
  },
);
console.log(message);

Use mocks to test the visible side effect and thread behavior before connecting a workspace.

See the generated Slack reference.