Skip to main content
Glama

slack_post_message

Send a Slack message to a channel or DM. The response says who wrote (_author) and where it landed (_channel: name, DM, shared externally).

⚠️ Long text is SPLIT, never truncated. Above ~4,000 characters the text goes out as SEVERAL messages: the first one where you asked, each later part threaded under it. Nothing is lost. The response then carries ts_all (every ts, in order) and split_into next to ts — and ts is always the FIRST part, the one to reuse to reply in the same thread. A response with ts alone means one single message went out.

From a hosted agent's run, a message posted as the app (author="app") outside a thread is filed under that agent: a member's reply in its thread starts the agent again, with your message and their reply. Post as the app what people may answer.

Read that before re-posting: a message can be deleted but NOT edited, so a caller who wrongly concludes it was truncated posts a duplicate instead of fixing one. split_into is what tells you, without reading the channel back — which some procedures forbid as a source.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "channel": "<channel>",
      "text": "<text>"
    },
    "name": "slack_post_message"
  }
}

Input Schema

NameRequiredDescriptionDefault
_orgNoOrg (id) de CET APPEL. `oto_list_orgs()`.
textYesMessage text (Slack mrkdwn supported).
_groupNoÉquipe (id) de CET APPEL, sous son org parente.
authorNoWho writes — `"me"` (as you, user token) or `"app"` (as the Slack app, bot token). Required when the workspace holds both tokens; with a single one, it is used and may be omitted.
unfurlNo`false` = Slack shows NO preview under this message, no link card and no media (every part, when it is split). Default `true` = Slack's usual previews. A procedure that says "no link previews" passes `false`.
_run_idNoOBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas.
channelYesChannel ID (e.g. C0123456789), DM channel ID (D…), or an already-opened conversation. To DM a user by email, call `slack_find_user_by_email` + `slack_open_dm` first to get the channel ID.
_projectNoProjet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`.
_instanceNoInstance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`.
thread_tsNoParent message ts to reply into a thread.

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden and does it well: it discloses that long text is split rather than truncated, that messages can be deleted but NOT edited (a real hazard that causes duplicate posts), and how app-authored messages behave inside a hosted agent's run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical action and the split-behavior warning are front-loaded, and each paragraph addresses a distinct failure mode. It is long and typographically heavy (emoji warning, all-caps), which costs some economy, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with no annotations and no output schema, the description covers the return fields it needs to (_author, _channel, ts, ts_all, split_into) and the threading model. It says nothing about permission/scope requirements or error conditions, which is the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining the consequence of author="app" (filed under the agent, replies restart it) and by clarifying that the returned ts is always the first part to reuse for threading.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ("Send a Slack message to a channel or DM") and the rest of the text makes clear this is a write operation with thread-splitting behavior, distinct from read/delete siblings like slack_read_history or slack_delete_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real use-time guidance: post as the app when a member reply should re-trigger the agent, use a thread_ts to reply in-thread, and post as the app only "what people may answer." It never names an explicit alternative tool to use instead, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources