slack_list_channels
Retrieve a list of public and private Slack channels accessible to the bot, with pagination support for large workspaces.
Instructions
List public and private channels that the bot is a member of, or pre-defined channels in the workspace with pagination
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of channels to return (default 100, max 200) | |
| cursor | No | Pagination cursor for next page of results |
Implementation Reference
- index.ts:63-109 (handler)Core handler logic for listing Slack channels. Supports fetching via Slack API conversations.list with pagination or using predefined channel IDs from environment variable by calling conversations.info for each.async getChannels(limit: number = 100, cursor?: string): Promise<any> { const predefinedChannelIds = process.env.SLACK_CHANNEL_IDS; if (!predefinedChannelIds) { const params = new URLSearchParams({ types: "public_channel,private_channel", exclude_archived: "true", limit: Math.min(limit, 200).toString(), team_id: process.env.SLACK_TEAM_ID!, }); if (cursor) { params.append("cursor", cursor); } const response = await fetch( `https://slack.com/api/conversations.list?${params}`, { headers: this.botHeaders }, ); return response.json(); } const predefinedChannelIdsArray = predefinedChannelIds.split(",").map((id: string) => id.trim()); const channels = []; for (const channelId of predefinedChannelIdsArray) { const params = new URLSearchParams({ channel: channelId, }); const response = await fetch( `https://slack.com/api/conversations.info?${params}`, { headers: this.botHeaders } ); const data = await response.json(); if (data.ok && data.channel && !data.channel.is_archived) { channels.push(data.channel); } } return { ok: true, channels: channels, response_metadata: { next_cursor: "" }, }; }
- index.ts:235-238 (schema)Zod-based input schema defining optional 'limit' and 'cursor' parameters for the tool.inputSchema: { limit: z.number().optional().default(100).describe("Maximum number of channels to return (default 100, max 200)"), cursor: z.string().optional().describe("Pagination cursor for next page of results"), },
- index.ts:230-246 (registration)Registration of the 'slack_list_channels' tool in the MCP server using registerTool, including title, description, input schema, and thin wrapper handler that delegates to SlackClient.getChannels.server.registerTool( "slack_list_channels", { title: "List Slack Channels", description: "List public and private channels that the bot is a member of, or pre-defined channels in the workspace with pagination", inputSchema: { limit: z.number().optional().default(100).describe("Maximum number of channels to return (default 100, max 200)"), cursor: z.string().optional().describe("Pagination cursor for next page of results"), }, }, async ({ limit, cursor }) => { const response = await slackClient.getChannels(limit, cursor); return { content: [{ type: "text", text: JSON.stringify(response) }], }; } );