Skip to main content
Glama
oregpt

Slack MCP Server

by oregpt

conversations_add_message

Post messages to Slack channels, threads, or direct messages using markdown or plain text formatting. Requires OAuth authentication and channel targeting.

Instructions

Posts a message to a channel, thread, or DM. Supports markdown and plain text. NOTE: Disabled by default for safety - set SLACK_MCP_ADD_MESSAGE_TOOL environment variable to enable.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
accessTokenYesSlack OAuth token (xoxp-... or xoxb-...) with chat:write scope
channel_idYesTarget channel ID, name (#general), or DM (@username)
thread_tsNoThread timestamp; omit to post to channel directly
payloadYesMessage content to post
content_typeNoContent format (default: text/markdown)

Implementation Reference

  • Main execution logic for conversations_add_message tool: validates args with schema, resolves channel ID, checks env-enabled channels, posts message via Slack chat.postMessage, handles errors.
    export async function conversationsAddMessage(args: any): Promise<ToolResponse> {
      try {
        // Safety check - require explicit enable
        const enabledChannels = process.env.SLACK_MCP_ADD_MESSAGE_TOOL;
        if (!enabledChannels) {
          return {
            success: false,
            error: 'Message posting is disabled by default for safety. Set SLACK_MCP_ADD_MESSAGE_TOOL environment variable to enable.'
          };
        }
    
        const validated = ConversationsAddMessageSchema.parse(args);
        const client = new WebClient(validated.accessToken);
    
        console.log('Posting message to channel:', validated.channel_id);
    
        // Resolve channel name/username to ID if needed
        const channelId = await resolveChannelId(client, validated.channel_id);
    
        // Check if channel is in enabled list (if not '*')
        if (enabledChannels !== '*') {
          const allowedChannels = enabledChannels.split(',').map(c => c.trim());
          if (!allowedChannels.includes(channelId) && !allowedChannels.includes(validated.channel_id)) {
            return {
              success: false,
              error: `Message posting not enabled for channel: ${validated.channel_id}`
            };
          }
        }
    
        // Post message
        const result = await client.chat.postMessage({
          channel: channelId,
          text: validated.payload,
          thread_ts: validated.thread_ts,
          mrkdwn: validated.content_type === 'text/markdown'
        });
    
        return {
          success: true,
          data: {
            ok: result.ok,
            channel: result.channel,
            ts: result.ts,
            message: result.message
          }
        };
      } catch (error: any) {
        if (error.name === 'ZodError') {
          return { success: false, error: `Validation error: ${error.errors.map((e: any) => e.message).join(', ')}` };
        }
        return handleSlackError(error);
      }
    }
  • Zod input schema for conversations_add_message tool, defining parameters: accessToken, channel_id, optional thread_ts, payload, content_type.
     * Schema for conversations_add_message tool
     * Posts messages to channels, threads, or DMs
     * Note: Disabled by default for safety - requires configuration to enable
     */
    export const ConversationsAddMessageSchema = z.object({
      accessToken: z.string().describe("Slack OAuth token (xoxp-... or xoxb-...) with chat:write scope"),
      channel_id: z.string().describe("Target channel ID, name (#general), or DM (@username)"),
      thread_ts: z.string().optional().describe("Thread timestamp; omit to post to channel directly"),
      payload: z.string().describe("Message content to post"),
      content_type: z.enum(['text/markdown', 'text/plain']).optional().describe("Content format (default: text/markdown)")
    });
  • src/index.ts:106-108 (registration)
    Tool registration in MCP server's listTools response: specifies name, description, and converts Zod schema to MCP inputSchema.
    name: 'conversations_add_message',
    description: 'Posts a message to a channel, thread, or DM. Supports markdown and plain text. NOTE: Disabled by default for safety - set SLACK_MCP_ADD_MESSAGE_TOOL environment variable to enable.',
    inputSchema: zodToMCPSchema(ConversationsAddMessageSchema)
  • src/index.ts:137-139 (registration)
    Dispatch logic in MCP callTool handler: routes 'conversations_add_message' calls to the conversationsAddMessage function.
    case 'conversations_add_message':
      result = await conversationsAddMessage(args);
      break;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oregpt/Agenticledger_MCP_Slack'

If you have feedback or need assistance with the MCP directory API, please join our Discord server