Skip to main content
Glama
larrygmaguire-hash

Slack Note Capture MCP Server

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 install

Slack App Setup

Detailed instructions: See QUICKSTART.md for step-by-step guidance with explanations.

  1. Go to api.slack.com/appsCreate New AppFrom scratch

  2. Name your app (e.g., Claude Assistant) and select your workspace

  3. Go to OAuth & Permissions and add these Bot Token Scopes:

Scope

Purpose

channels:history

Read messages from public channels

channels:read

List channels

chat:write

Post messages

files:read

Access shared files

groups:history

Read messages from private channels (optional)

groups:read

List private channels (optional)

  1. Click Install to Workspace and authorise

  2. Copy the Bot User OAuth Token (starts with xoxb-)

  3. Create a channel for Claude and get its Channel ID (right-click channel → View details → scroll to bottom)

  4. Invite the bot: /invite @YourAppName in 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

SLACK_BOT_TOKEN

Yes

Bot User OAuth Token from your Slack app

SLACK_CHANNEL_ID

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:

  1. Use the slack_list_channels tool, or

  2. In 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

  1. Check ~/.claude.json syntax is valid JSON

  2. Restart Claude Code / VS Code

  3. Verify the path to index.js is correct

Testing Your Setup

After configuration, restart Claude Code and test:

List my Slack channels

If successful, you'll see your workspace channels. Then test posting:

Post "Hello from Claude!" to my Slack inbox

Check your Slack channel for the message. For full testing steps including the reply feature, see QUICKSTART.md.

Security Notes

  • Never commit your SLACK_BOT_TOKEN to git

  • The token is stored in ~/.claude.json which is machine-specific

  • Each machine needs its own configuration

Version History

  • 2.0.0 — Added two-way communication: slack_read_thread, slack_post_to_thread, slack_wait_for_reply

  • 1.0.0 — Initial release: basic read/post/file operations

Licence

MIT

Available Tools

9 tools
slack_download_fileB

Download a file from Slack and save it to the specified path.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe Slack file ID to download.
save_pathYesLocal file path where the file should be saved.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe Slack file ID.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typesNoChannel types to include: public_channel, private_channel. Default: public_channel,private_channel

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNoThe Slack channel ID. Defaults to configured inbox channel.
textYesThe message text to post.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNoThe Slack channel ID. Defaults to configured inbox channel.
thread_tsYesThe timestamp of the parent message to reply to.
textYesThe message text to post.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNoThe Slack channel ID. Defaults to configured inbox channel.
days_backNoNumber of days of history to fetch. Default is 7.
oldestNoUnix timestamp. If provided, only messages after this time are returned.
limitNoMaximum number of messages to return. Default 100.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNoThe Slack channel ID. Defaults to configured inbox channel.
thread_tsYesThe timestamp of the parent message.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (e.g., '#GenAI' or 'workshop idea').
channel_idNoLimit search to specific channel.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNoThe Slack channel ID. Defaults to configured inbox channel.
thread_tsNoThe timestamp of an existing thread to monitor. If not provided, message must be provided to start a new thread.
messageNoMessage to post (starts a new thread if thread_ts not provided, or posts to existing thread).
poll_interval_secondsNoSeconds between poll attempts. Default: 30
timeout_minutesNoMaximum minutes to wait for a reply. Default: 15

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updatesv2.0.0
    • First observedslack_download_file
    • First observedslack_get_file
    • First observedslack_list_channels
    • First observedslack_post_message
    • First observedslack_post_to_thread
    • First observedslack_read_messages
    • First observedslack_read_thread
    • First observedslack_search_messages
    • First observedslack_wait_for_reply

TDQS

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

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/larrygmaguire-hash/slack-note-capture'

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