Slack Note Capture MCP Server
Enables two-way communication with Slack, allowing users to post messages, interact with message threads, search channel history, and poll for replies within specific threads.
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 Note Capture MCP ServerPost 'Deployment ready?' to Slack and wait for my reply"
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 Note Capture MCP Server
A Model Context Protocol (MCP) server that enables two-way communication between Claude Code and Slack. Post messages, read threads, and wait for user replies — enabling remote conversations when you're away from your machine.
New to MCP servers? See QUICKSTART.md for step-by-step setup instructions with screenshots-style guidance.
Prerequisites
Node.js 18+ — nodejs.org
Claude Code — Anthropic's CLI tool (claude.ai/claude-code)
Slack workspace — Free plan works; you need permission to install apps
Features
Two-way conversations — Claude asks questions via Slack, you reply from your phone
Thread support — Post to threads and read thread replies
Wait for replies — Poll threads until you respond (configurable timeout)
Channel operations — Read history, search messages, list channels
File handling — Get file info and download shared files
Use Cases
Remote Conversations
Claude asks a question via Slack, you reply from your phone, Claude continues working.
Task Notifications
Claude posts completion updates to a Slack channel so you know when work is done.
Note Capture
Send ideas, links, and voice notes to Slack for Claude to process later.
Async Workflows
Start a task, go about your day, get notified when input is needed.
Installation
git clone https://github.com/larrygmaguire-hash/slack-note-capture.git
cd slack-note-capture
npm installSlack App Setup
Detailed instructions: See QUICKSTART.md for step-by-step guidance with explanations.
Go to api.slack.com/apps → Create New App → From scratch
Name your app (e.g.,
Claude Assistant) and select your workspaceGo to OAuth & Permissions and add these Bot Token Scopes:
Scope | Purpose |
| Read messages from public channels |
| List channels |
| Post messages |
| Access shared files |
| Read messages from private channels (optional) |
| List private channels (optional) |
Click Install to Workspace and authorise
Copy the Bot User OAuth Token (starts with
xoxb-)Create a channel for Claude and get its Channel ID (right-click channel → View details → scroll to bottom)
Invite the bot:
/invite @YourAppNamein the channel
Configuration
Tool Permissions (Required)
By default, Claude Code prompts for approval each time an MCP tool is used. For Slack tools to work without interruption (especially slack_wait_for_reply which blocks execution), you must pre-approve them.
Add to ~/.claude/settings.local.json:
{
"permissions": {
"allow": [
"mcp__slack-note-capture__slack_read_messages",
"mcp__slack-note-capture__slack_post_message",
"mcp__slack-note-capture__slack_post_to_thread",
"mcp__slack-note-capture__slack_read_thread",
"mcp__slack-note-capture__slack_wait_for_reply",
"mcp__slack-note-capture__slack_get_file",
"mcp__slack-note-capture__slack_download_file",
"mcp__slack-note-capture__slack_list_channels",
"mcp__slack-note-capture__slack_search_messages"
]
}
}Alternative (VSCode): When prompted for tool approval, select "Yes, allow for this project (just you)" — this persists the permission in ~/.claude.json.
Important: Restart Claude Code after changing permissions.
Environment Variables
Variable | Required | Description |
| Yes | Bot User OAuth Token from your Slack app |
| No | Default channel ID for operations |
Claude Code Configuration
Add to your ~/.claude.json:
{
"mcpServers": {
"slack-note-capture": {
"type": "stdio",
"command": "node",
"args": ["/path/to/slack-note-capture/src/index.js"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-token-here",
"SLACK_CHANNEL_ID": "C0123456789"
}
}
}
}Available Tools
slack_post_message
Post a message to a channel. Returns the message timestamp (ts) for thread operations.
{
channel_id: "C0123456789", // optional, uses default if not provided
text: "Hello from Claude!"
}slack_post_to_thread
Reply to an existing message thread.
{
channel_id: "C0123456789", // optional
thread_ts: "1234567890.123456", // required - parent message timestamp
text: "This is a thread reply"
}slack_read_thread
Read all replies in a thread. Useful for checking responses to your messages.
{
channel_id: "C0123456789", // optional
thread_ts: "1234567890.123456" // required
}slack_wait_for_reply
The key tool for remote conversations. Posts a message and polls for a user reply.
{
channel_id: "C0123456789", // optional
message: "I need your input on X. Please reply in this thread.",
poll_interval_seconds: 30, // default: 30
timeout_minutes: 15 // default: 15
}Or monitor an existing thread:
{
thread_ts: "1234567890.123456",
poll_interval_seconds: 30,
timeout_minutes: 15
}Returns either:
Success with the user's reply text
Timeout with a hint to check manually later
slack_read_messages
Read recent messages from a channel.
{
channel_id: "C0123456789", // optional
days_back: 7, // default: 7
limit: 100 // default: 100
}slack_list_channels
List available channels to find channel IDs.
{
types: "public_channel,private_channel" // default
}slack_search_messages
Search for messages containing specific text.
{
query: "workshop idea",
channel_id: "C0123456789" // optional but recommended
}slack_get_file
Get information about a shared file.
{
file_id: "F0123456789"
}slack_download_file
Download a file to local storage.
{
file_id: "F0123456789",
save_path: "/path/to/save/file.pdf"
}Example: Remote Question/Answer
Claude: I'm working on the report but need to know which format you prefer.
Let me ask you via Slack so you can respond from your phone.
[Claude calls slack_wait_for_reply with question about format]
[User receives Slack notification on phone]
[User replies in thread: "PDF please"]
[Claude receives reply and continues work]Example: Task Completion Notification
When Claude finishes a task, it posts a summary to Slack:
Claude: [completes grading 15 assignments]
Let me notify you that the task is complete.
[Claude calls slack_post_message: "✓ Grading complete — 15 assignments processed, feedback docs saved to Google Drive"]
[User receives notification on phone]This is useful for long-running tasks where you've stepped away from your machine.
Finding Channel IDs
Channel IDs are not the same as channel names. To find a channel ID:
Use the
slack_list_channelstool, orIn Slack: right-click a channel → "View channel details" → scroll to bottom
Channel IDs look like: C0A9WLH9KH9 (public) or G0A9WLH9KH9 (private)
Troubleshooting
"not_in_channel" error
The bot needs to be added to the channel. In Slack, type /invite @YourBotName in the channel.
Thread replies not appearing
Make sure you're replying in the thread, not as a new message in the channel. In Slack mobile, tap the message first, then reply.
Timeout on wait_for_reply
The default timeout is 15 minutes. Increase with timeout_minutes, or call slack_read_thread later to check manually.
MCP not loading
Check
~/.claude.jsonsyntax is valid JSONRestart Claude Code / VS Code
Verify the path to
index.jsis correct
Testing Your Setup
After configuration, restart Claude Code and test:
List my Slack channelsIf successful, you'll see your workspace channels. Then test posting:
Post "Hello from Claude!" to my Slack inboxCheck your Slack channel for the message. For full testing steps including the reply feature, see QUICKSTART.md.
Security Notes
Never commit your
SLACK_BOT_TOKENto gitThe token is stored in
~/.claude.jsonwhich is machine-specificEach machine needs its own configuration
Version History
2.0.0 — Added two-way communication:
slack_read_thread,slack_post_to_thread,slack_wait_for_reply1.0.0 — Initial release: basic read/post/file operations
Licence
MIT
Available Tools
9 toolsslack_download_fileB
Download a file from Slack and save it to the specified path.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The Slack file ID to download. | |
| save_path | Yes | Local file path where the file should be saved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. While it mentions saving to a path, it omits critical behavioral details: what happens if the path is invalid, whether directories are auto-created, authentication requirements, rate limits, and crucially—what the tool returns (success indicator, file metadata, etc.) since no output schema exists.
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?
Single efficient sentence with zero waste. Action verb front-loaded. Appropriate length for the tool's complexity.
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?
Adequate for basic invocation given the simple 2-parameter schema with full coverage, but insufficient for a filesystem-mutating tool with no output schema. Should specify return value format and error conditions (e.g., path not found, permission denied) to be complete.
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 has 100% description coverage ('The Slack file ID to download', 'Local file path where the file should be saved'). The description does not add semantic nuance beyond the schema (format examples, path constraints, or file_id sources), warranting the baseline score.
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 (download), resource (file from Slack), and destination (specified path). However, it fails to distinguish from sibling tool 'slack_get_file', which likely retrieves metadata rather than saving binary content to disk—a critical distinction for tool selection.
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 provided on when to use this versus 'slack_get_file' or prerequisites like obtaining the file_id. Missing information about path requirements (e.g., directory must exist) or permissions needed to write to the local filesystem.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_fileA
Get information about a file shared in Slack, including download URL. Use this to retrieve voice notes and documents.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The Slack file ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden. It successfully discloses that the tool returns a 'download URL' (distinguishing from content retrieval), but omits authentication requirements, rate limits, privacy constraints, or what happens if the file is private/deleted.
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?
Two efficient sentences with zero waste: first defines the operation and return value, second states applicable file types. Information is front-loaded and appropriately sized for a single-parameter tool.
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 read operation with one well-documented parameter, the description is reasonably complete. It compensates for the missing output schema by specifying the key return value (download URL), though it could mention other metadata fields returned (e.g., file name, size, creator).
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?
Input schema has 100% description coverage for the single 'file_id' parameter, establishing a baseline of 3. The description adds no specific parameter guidance (format, where to obtain ID, examples), but doesn't need to given the complete schema self-documentation.
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 retrieves 'information about a file... including download URL' and mentions specific use cases (voice notes, documents). However, it lacks explicit differentiation from sibling tool 'slack_download_file', leaving ambiguity about whether this returns metadata/URLs versus actual binary content.
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?
Provides implied usage guidance by referencing specific file types ('voice notes and documents'), but fails to specify when to use this versus 'slack_download_file' or state that this returns metadata/URLs rather than downloaded content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_channelsA
List available Slack channels. Use this to find channel IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| types | No | Channel types to include: public_channel, private_channel. Default: public_channel,private_channel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so full burden falls on description. Fails to disclose behavioral traits: does not clarify what 'available' means (joined vs all public), omits pagination behavior (critical for Slack APIs), rate limits, or response structure. Only states action without side-effect or resource boundary details.
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?
Two sentences, zero waste. First sentence establishes purpose, second provides usage context. Every word earns its place; appropriately front-loaded with no boilerplate.
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?
Matches the tool's low complexity (1 optional parameter, simple action) but leaves gaps given no output schema and no annotations. The ID-finding hint partially compensates for missing return value documentation, but lacks pagination or scope boundaries typical for Slack APIs.
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%, so baseline 3 applies. The description does not mention the 'types' parameter or add syntax guidance beyond the schema, but the schema adequately documents this single optional parameter.
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?
States clear verb ('List') and resource ('Slack channels'). The second sentence ('Use this to find channel IDs') effectively distinguishes this from sibling message-oriented tools (slack_read_messages, slack_post_message) by clarifying its role in the workflow. Slightly vague on 'available' scope.
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?
Provides explicit usage context in the second sentence ('Use this to find channel IDs'), clearly indicating when to invoke the tool (as a prerequisite for ID-dependent operations). Lacks explicit 'when not to use' exclusions or named alternatives, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_post_messageA
Post a message to a Slack channel. Returns the message timestamp (ts) which can be used to read thread replies later.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | The Slack channel ID. Defaults to configured inbox channel. | |
| text | Yes | The message text to post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It successfully discloses the return value (message timestamp/ts) and its utility for future thread operations, compensating for missing output schema. Does not mention auth requirements or rate limits, but covers the critical output behavior.
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?
Two well-structured sentences. First sentence front-loads the core action; second sentence explains the return value utility. No redundancy or filler—every sentence earns its place.
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 simple 2-parameter schema and lack of output schema, the description adequately explains the inputs and compensates by describing the return value. Complete enough for invocation, though could briefly mention relationship to slack_post_to_thread for full contextual clarity.
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% (both channel_id and text have descriptions). The description mentions 'Slack channel' and 'message' which maps to parameters, but adds no syntax details, validation rules, or semantic relationships beyond what the schema already provides. Baseline 3 appropriate for high-coverage schemas.
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?
Clear specific verb 'Post' with resource 'message to a Slack channel'. Implicitly distinguishes from sibling slack_post_to_thread by specifying 'channel' (implying top-level post vs reply), establishing distinct scope.
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?
Implies workflow by mentioning the returned ts can be used to read thread replies later, hinting at integration with slack_read_thread. However, lacks explicit guidance on when to use this versus slack_post_to_thread for replies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_post_to_threadB
Post a reply to an existing message thread. Use this to continue a conversation in a thread.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | The Slack channel ID. Defaults to configured inbox channel. | |
| thread_ts | Yes | The timestamp of the parent message to reply to. | |
| text | Yes | The message text to post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Verb 'Post' implies write operation, but lacks disclosure of side effects (visibility, notification triggers), error conditions (invalid thread_ts), rate limits, or return value behavior.
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?
Two sentences, front-loaded with the core action. Slightly redundant ('thread' concept repeated in both sentences), but no major waste. Appropriate length for the tool's complexity.
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?
Adequate for a 3-parameter messaging tool with complete schema coverage, but gaps remain: no mention of message visibility (public vs private), error handling for invalid timestamps, or required auth scopes. No output schema exists, yet description doesn't clarify what indicates success.
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 has 100% description coverage with clear field definitions. Description adds semantic framing ('reply to an existing message thread') that reinforces thread_ts relationship, but doesn't add syntax details, format requirements, or validation rules 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?
States specific action (Post a reply) and resource (existing message thread) clearly. Mentions 'thread' twice, implicitly distinguishing from sibling slack_post_message, but doesn't explicitly reference the sibling or clarify when to use each tool.
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?
Provides implied usage guidance ('Use this to continue a conversation in a thread'), suggesting conversational context. However, lacks explicit when/when-not guidance or explicit comparison to slack_post_message for top-level vs threaded messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_read_messagesA
Read messages from a Slack channel. Returns messages from the last N days or since a specific timestamp. Use this to pull captured content from the inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | The Slack channel ID. Defaults to configured inbox channel. | |
| days_back | No | Number of days of history to fetch. Default is 7. | |
| oldest | No | Unix timestamp. If provided, only messages after this time are returned. | |
| limit | No | Maximum number of messages to return. Default 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explains temporal filtering behavior ('last N days or since a specific timestamp') and default values (7 days, 100 messages). However, lacks disclosure of read-only safety, rate limits, pagination cursors, or the structure/format of returned message objects.
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?
Three sentences with zero waste: first establishes purpose, second explains filtering behavior, third provides use-case context. Every sentence earns its place with no redundancy.
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?
No output schema exists, yet description only states 'Returns messages' without detailing structure, fields, or format. With 4 optional parameters and numerous sibling tools, the description adequately covers inputs but leaves significant gaps on output expectations and behavioral edge cases (e.g., conflict resolution if both days_back and oldest are provided).
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% (baseline 3). Description adds valuable semantic context by grouping 'days_back' and 'oldest' as alternative time filters ('or'), and explains 'channel_id' defaults to 'configured inbox channel'—context not present in the schema 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?
Clear verb ('Read') and resource ('messages from a Slack channel'). Effectively distinguishes from sibling 'slack_read_thread' by specifying 'channel' versus 'thread', and from 'slack_search_messages' by describing a direct retrieval pattern rather than query-based search.
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?
Provides specific usage context ('Use this to pull captured content from the inbox'), but lacks explicit guidance on when to prefer this over 'slack_search_messages' or 'slack_read_thread', and does not mention exclusion criteria or prerequisites like channel membership.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_read_threadA
Read all replies in a message thread. Use this to check for user responses to a message you posted.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | The Slack channel ID. Defaults to configured inbox channel. | |
| thread_ts | Yes | The timestamp of the parent message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. 'Read' implies safe/non-destructive operation, and 'all replies' suggests completeness, but lacks specifics on error handling (non-existent thread?), pagination, or whether this marks messages as seen.
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?
Two sentences with zero waste. First defines action, second provides use case. No redundant phrases or filler.
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?
Appropriate for a simple read tool with 2 parameters and complete schema coverage. No output schema exists, so description isn't obligated to explain return values, though mentioning the return format (message list) would have been helpful.
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 baseline applies. Description adds semantic context that thread_ts should reference 'a message you posted' (establishing ownership), which helps interpret the parameter purpose beyond the schema's technical definition.
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?
States specific action ('Read all replies') and resource ('message thread'). Implies differentiation from slack_read_messages (channels vs threads) and slack_post_to_thread (read vs write), though doesn't explicitly name siblings.
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?
Provides positive use case ('Use this to check for user responses'), establishing when to use it. Lacks explicit guidance on when NOT to use it (e.g., initial channel reads) and doesn't clarify relationship to slack_wait_for_reply sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_search_messagesC
Search for messages containing specific text or hashtags.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (e.g., '#GenAI' or 'workshop idea'). | |
| channel_id | No | Limit search to specific channel. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions hashtag support but fails to disclose result limits, pagination behavior, search scope (public channels vs DMs), or return format. Missing safety/authorization context.
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?
Single sentence, front-loaded, no wasted words. However, extreme brevity leaves critical behavioral gaps, preventing a perfect score.
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?
No output schema exists, yet description omits what the tool returns (message metadata? content? timestamps?). No annotations cover read-only status or rate limits. For a search tool with undocumented returns, this is inadequate.
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% with clear examples in the schema itself (e.g., '#GenAI'). Description mentions 'hashtags' which aligns with the query parameter but adds minimal semantic value beyond what the schema already provides. Baseline 3 appropriate for high-coverage schemas.
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?
Clear verb ('Search') + resource ('messages') with scope ('containing specific text or hashtags'). However, it does not explicitly distinguish from sibling 'slack_read_messages' or clarify that this searches across channels vs. reading recent messages from one channel.
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 explicit guidance on when to use this versus 'slack_read_messages' or 'slack_read_thread'. No mention of prerequisites (e.g., necessary scopes) or when search is preferable to direct reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_wait_for_replyA
Poll a thread waiting for a user reply. Posts an initial message if provided, then polls until a non-bot reply appears or timeout is reached. Use this when you need to ask the user a question and wait for their response via Slack.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | The Slack channel ID. Defaults to configured inbox channel. | |
| thread_ts | No | The timestamp of an existing thread to monitor. If not provided, message must be provided to start a new thread. | |
| message | No | Message to post (starts a new thread if thread_ts not provided, or posts to existing thread). | |
| poll_interval_seconds | No | Seconds between poll attempts. Default: 30 | |
| timeout_minutes | No | Maximum minutes to wait for a reply. Default: 15 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and discloses key behaviors: it 'Posts an initial message' (mutation), 'polls until a non-bot reply appears' (filtering logic), and 'timeout is reached' (termination condition). Missing explicit disclosure of what the tool returns (reply content, message object, or null) and that it blocks execution during polling.
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?
Two efficient sentences with zero waste. First sentence front-loads the action and mechanism; second sentence provides usage context. Every clause earns its place with no redundant repetition of schema details.
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 complexity (blocking polling operation) and lack of output schema, the description lacks critical details about the return value (what constitutes the 'reply' data returned) and could more explicitly warn about the blocking/long-running nature of the operation. Adequate but incomplete for full operational context.
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 has 100% coverage (baseline 3). Description adds value by explaining parameter interactions: 'Posts an initial message if provided' clarifies the conditional requirement between message and thread_ts, and explains the polling loop encompassing poll_interval_seconds and timeout_minutes.
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?
Description uses specific verbs 'Poll' and 'waiting' with clear resource 'thread' and 'user reply'. Clearly distinguishes from sibling tools like slack_post_message (one-way) and slack_read_thread (passive read) by emphasizing the active waiting/polling behavior for interactive responses.
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?
Explicitly states 'Use this when you need to ask the user a question and wait for their response via Slack', providing clear context for when to select this over alternatives. Could be improved by explicitly naming alternatives (e.g., slack_post_message) for cases when waiting isn't needed.
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.
9 tool updates
v2.0.0- First observed
slack_download_file - First observed
slack_get_file - First observed
slack_list_channels - First observed
slack_post_message - First observed
slack_post_to_thread - First observed
slack_read_messages - First observed
slack_read_thread - First observed
slack_search_messages - First observed
slack_wait_for_reply
TDQS
Each tool has a clearly distinct purpose with no overlap: downloading files, getting file info, listing channels, posting messages, replying in threads, reading messages, reading threads, searching messages, and waiting for replies. The descriptions reinforce these distinctions, making misselection unlikely.
All tools follow a consistent 'slack_verb_noun' pattern (e.g., slack_download_file, slack_post_message). This predictability helps agents easily understand and navigate the toolset without confusion from mixed conventions.
With 9 tools, this server is well-scoped for Slack note capture, covering essential operations like reading, posting, searching, and file handling. Each tool serves a clear purpose without bloat or redundancy.
The toolset provides complete coverage for the Slack note capture domain, including CRUD-like operations (post/read messages), file management, channel listing, search, and interactive features like waiting for replies. No obvious gaps exist for the stated purpose.
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.
Messaging tools for AI agents: send messages, manage chats, groups and channels.
- BleepOAuthcom.usebleep
Create Tasks and run Workflows in Bleep from Claude, ChatGPT, and other AI assistants.
Carbon Voice MCP serves as a bridge that connects AI assistants like ChatGPT, Claude, and Cursor to a user's Carbon Voice account, turning voice messages and conversations into a private, on-demand knowledge base. It provides 28 specialized tools for comprehensive voice messaging management, including creating and sending messages, accessing conversation history with instant transcription, running AI actions (summarization, TLDR generation, meeting notes), and managing workspace collaboration through folders, contacts, and team communications.
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/larrygmaguire-hash/slack-note-capture'
If you have feedback or need assistance with the MCP directory API, please join our Discord server