Slack Notifications MCP Server
This server enables Claude to monitor Xcode Cloud build status and interact with Slack channels for build notifications and general messaging.
Check Build Status – Retrieve the latest Xcode Cloud build notifications from Slack, including status, workflow name, duration, and timestamp, with optional filtering by workflow name and configurable result limits (up to 20)
Get Channel Messages – Read recent messages from any Slack channel the bot has access to, with configurable limits (up to 100 messages); defaults to the configured build channel if no channel ID is provided
Search Messages – Search across Slack for messages containing specific text (e.g., 'build failed', a workflow name) to find specific build information (requires
search:readscope)Send Message – Post a text message to any accessible Slack channel, defaulting to the build notifications channel if no channel ID is specified
List Channels – List all Slack channels the bot has access to, with a configurable limit (up to 50 channels)
Enables interaction with Slack channels including reading messages, searching for specific content, sending messages, listing channels, and monitoring Xcode Cloud build notifications posted to Slack.
Allows checking Xcode Cloud build status by retrieving build notifications from a configured Slack channel where Xcode Cloud posts workflow updates.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Slack Notifications MCP Servercheck the latest Xcode Cloud build status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Slack Notifications MCP Server
MCP server that allows Claude to check Xcode Cloud build status and interact with Slack channels.
Features
check_build_status - Get latest Xcode Cloud build notifications
get_channel_messages - Read recent messages from any channel
search_messages - Search for specific build info (requires
search:readscope)send_message - Post messages to Slack
list_channels - List available channels
Related MCP server: Slack MCP Server
Setup
1. Create Slack App
Click "Create New App" → "From scratch"
Name it (e.g., "Claude MCP") and select your workspace
2. Configure Bot Token Scopes
Go to OAuth & Permissions → Scopes → Bot Token Scopes and add:
channels:history- Read messages in public channelschannels:read- List channelsgroups:history- Read messages in private channels (if needed)groups:read- List private channels (if needed)chat:write- Send messagessearch:read- Search messages (optional)
3. Install App to Workspace
Go to Install App in sidebar
Click "Install to Workspace"
Copy the Bot User OAuth Token (starts with
xoxb-)
4. Get Channel ID
Open Slack in browser
Go to your build notifications channel
The URL will be like:
https://app.slack.com/client/TXXXXX/CXXXXXXXThe
C...part is your channel ID
5. Invite Bot to Channel
In Slack, go to the channel and type:
/invite @Claude MCP(or whatever you named your app)
6. Configure Claude Code
Add to ~/.mcp.json (create if it doesn't exist):
{
"mcpServers": {
"slack-notifications": {
"command": "node",
"args": ["/Users/post/.claude/mcp-servers/slack-notifications/index.js"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token-here",
"SLACK_BUILD_CHANNEL_ID": "C01234567890"
}
}
}
}7. Restart Claude Code
# Exit and restart Claude Code for MCP changes to take effectEnvironment Variables
Variable | Required | Description |
| Yes | Bot User OAuth Token from OAuth & Permissions (starts with |
| Yes | Channel ID for build notifications (starts with |
Both variables must be set — the server will fail to start if either is missing.
Usage
Once configured, Claude can use these tools:
# Check latest builds
mcp__slack-notifications__check_build_status()
# Get channel messages
mcp__slack-notifications__get_channel_messages(channel_id: "C...", limit: 10)
# Search for failed builds
mcp__slack-notifications__search_messages(query: "build failed")
# Send a message
mcp__slack-notifications__send_message(text: "Build complete!")Xcode Cloud Setup
To send build notifications to Slack:
Go to App Store Connect → Xcode Cloud
Select your workflow → Post-Actions
Add Slack notification
Configure to post to your build channel
Troubleshooting
"missing_scope" error
Add the required scope in your Slack App settings under OAuth & Permissions.
"channel_not_found" error
Make sure the bot is invited to the channel (/invite @BotName).
No messages returned
Check that SLACK_BUILD_CHANNEL_ID is correct and the bot has access.
Available Tools
5 toolscheck_build_statusA
Get the latest Xcode Cloud build status from Slack notifications. Returns recent build messages including status, workflow name, duration, and timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent build messages to retrieve (default: 5, max: 20) | |
| workflow | No | Filter by workflow name (e.g., 'Cuti-E-Admin', 'Nutri-E'). Case-insensitive partial match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates a read-like operation ('get') but does not explicitly state it is safe or non-destructive. Missing details on permissions, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the tool's purpose, and efficient with no waste. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage and simple parameters, the description is fairly complete. It lists return fields (status, workflow, duration, timestamp) but could clarify ordering (e.g., 'latest' meaning most recent) or mention that it filters specifically for Xcode Cloud notifications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and parameters are well-described in the schema (limit with default/max, workflow with case-insensitive partial match). The description adds no additional meaning beyond the schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the latest Xcode Cloud build status from Slack notifications and specifies the return fields (status, workflow name, duration, timestamp). It distinguishes from sibling tools like get_channel_messages or search_messages, which are general Slack operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving Xcode Cloud build notifications but does not explicitly state when to use it versus alternatives or provide exclusions (e.g., not for general messages). No guidance on prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_messagesB
Read recent messages from a specific Slack channel
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | Slack channel ID (e.g., C01234567). If not provided, uses the build channel. | |
| limit | No | Number of messages to retrieve (default: 10, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states 'Read recent messages', omitting behavioral traits like rate limits, pagination, or response structure. The read-only nature is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 6 words, directly stating the core purpose with no wasted text. It is optimally concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two parameters and no output schema. The description covers the basic intent but does not hint at return format or explain 'recent' (e.g., time window). It is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters effectively. The description adds no additional semantic context beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action (Read) and resource (recent messages from a specific Slack channel), distinguishing it from sibling tools like search_messages (search) and send_message (send). It is unambiguous and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., search_messages for historical queries). No mention of prerequisites or context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsB
List available Slack channels the bot has access to
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of channels to list (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description only hints at read-only behavior ('the bot has access to') but fails to disclose pagination, rate limits, or error handling, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with clear subject, verb, and scope—concise and front-loaded with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no nested objects), the description is nearly complete, though it omits mention of return format or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters (including default and description for 'limit'), so the description adds no extra semantics beyond what the input schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'Slack channels', and the scope 'the bot has access to', differentiating it from sibling tools like get_channel_messages and search_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there any when-not or context clues for the agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesB
Search for messages in Slack containing specific text
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (e.g., 'build failed', 'Cuti-E-Admin') | |
| limit | No | Maximum number of results (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states 'Search for messages' without mentioning return format, pagination, rate limits, scope (all channels vs. specific ones), or any side effects. This is a significant gap for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (7 words), but it is underspecified. While not verbose, it lacks sufficient detail for an agent to use the tool correctly. The conciseness comes at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema) and no annotations, the description is incomplete. It does not specify the scope of the search (e.g., all channels, user messages), sort order, or pagination behavior. The schema provides some detail for parameters, but the overall context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions (100% coverage). Baseline is 3. The description adds the context that the tool searches for messages containing the query text, but this is already implied by the schema's parameter description (e.g., 'Search query'). No additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action (search), resource (messages in Slack), and scope (containing specific text). It differentiates from siblings like 'get_channel_messages' which retrieves messages from a channel, and 'send_message' which sends messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get_channel_messages' or 'check_build_status'. There is no mention of prerequisites, context, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageB
Send a message to a Slack channel
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | Slack channel ID. If not provided, uses the build channel. | |
| text | Yes | Message text to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits beyond the basic action. Since no annotations are provided, it should mention aspects like authentication requirements, side effects, or default behavior when channel_id is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, effectively conveying the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with only two parameters and no output schema, the description is minimally adequate but does not provide extra context such as message length limitations or formatting options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions, achieving 100% schema description coverage. The tool description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send a message') and the resource ('a Slack channel'), distinguishing it from sibling tools like check_build_status, get_channel_messages, list_channels, and search_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as when to use send_message instead of check_build_status or search_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v1.0.0- First observed
check_build_status - First observed
get_channel_messages - First observed
list_channels - First observed
search_messages - First observed
send_message
TDQS
Each tool serves a distinct purpose: build status retrieval, channel message reading, channel listing, text search, and message sending. No overlapping functionality.
All tool names follow a consistent verb_noun pattern in snake_case (check_build_status, get_channel_messages, list_channels, search_messages, send_message).
Five tools is a reasonable scope for a Slack-focused server. It covers core actions without being overly minimal or bloated.
The set covers essential Slack operations (list, read, search, send) plus build status. Missing features like thread replies or file uploads are minor gaps for a notification server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Enable interaction with Slack workspaces. Supports subscribing to Slack events through Resources.
Catch up on Slack without reading it. Unreads, threads, search. Browser-session or hosted OAuth.
Human-authenticated setup for routing GitHub pull requests into the right Slack channel.
Human-authenticated setup for routing GitHub pull requests into the right Slack channel.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables interaction with Slack workspaces as a user, supporting channel listing, message posting, threading, reactions, and user management via the Slack API.811MIT
- AlicenseBqualityDmaintenanceEnables interaction with Slack workspaces through comprehensive channel management, messaging, user management, file uploads, and Block Kit formatting. Features secure credential storage via macOS Keychain and supports all major Slack operations including reactions and workspace information.263MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Slack workspaces through comprehensive integration capabilities. Supports channel management, messaging, thread replies, reactions, and message history retrieval through natural language commands.54MIT
- AlicenseBqualityDmaintenanceEnables interaction with Slack workspaces to manage channels, post messages, add reactions, view message history and threads, and retrieve user profiles through the Model Context Protocol.818ISC
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Stig-Johnny/slack-notifications-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server