Slamy
Slack MCP server & CLI
Installation
npx slamyAsk AI about Slamy
Powered by Claude Β· Grounded in docs
I know everything about Slamy. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
slamy β Slack MCP server & CLI
A Slack MCP (Model Context Protocol) server that also works as a standalone CLI. Connect AI agents like Claude to your Slack workspace, or use it directly from the terminal.
Features
- MCP Server β expose Slack operations as MCP tools for AI agents (Claude Code, Claude Desktop, etc.)
- CLI β use the same operations directly from the terminal
- Channels β list channels, retrieve message history
- Messages β post messages, reply to threads
- Users β list workspace members, view profiles
- Reactions β add emoji reactions to messages
- Search β search messages across channels with Slack query syntax
- Multiple output formats β human-readable text, JSON, and TSV
Installation
Homebrew
brew install tackeyy/tap/slamy
Go
go install github.com/tackeyy/slamy@latest
Build from source
git clone https://github.com/tackeyy/slamy.git
cd slamy
go build -o slamy .
Quick Start
1. Create a Slack App
- Go to Slack API and click Create New App
- Choose From scratch, name your app (e.g.,
slamy) - Select the workspace to install to
2. Configure User Token Scopes
In OAuth & Permissions > Scopes > User Token Scopes, add:
| Scope | Purpose |
|---|---|
channels:history | View messages in public channels |
channels:read | View basic channel info |
chat:write | Send messages (as yourself) |
files:read | Download files shared in channels |
groups:history | View messages in private channels |
groups:read | View basic private channel info |
reactions:write | Add emoji reactions |
search:read | Search messages |
users:read | View users and their basic info |
users:read.email | View email addresses |
users.profile:read | View user profiles |
3. Install and Set Environment Variables
Install the app to your workspace, then set your token:
export SLACK_USER_TOKEN=xoxp-your-user-token
4. Run
./slamy channels list
User Token vs Bot Token
Slack Apps can issue two types of tokens. Which one to use depends on your use case.
Bot Token (xoxb-) | User Token (xoxp-) | |
|---|---|---|
Message search (search:read) | Not available | Available |
| Token management | Need 2 tokens if search is required | 1 token for everything |
| Message posting | Posts as "app" (bot name) | Posts as the user |
| Private channel access | Must be invited to channel | Access same channels as the user |
Use User Token when: acting on behalf of a user
slamy was built as part of an AI secretary / personal assistant (Claude Code + MCP) that reads, searches, and posts to Slack on behalf of a specific user. In this use case, User Token is the natural choice:
- Search requires it β
search:readis a User Token-only scope. Bot Tokens simply cannot search messages - Single token β no need to manage two tokens and worry about which operation uses which
- User context β messages posted by the agent appear as the user, making it clear who is responsible
- Channel access β the agent can access the same channels as the user without manual invitation
Use Bot Token when: building a bot
Bot Token is the right choice if you are building a Slack bot (not a personal assistant):
- The bot has its own identity and posts as "app name", not as a specific user
- Multiple users interact with the bot β it shouldn't act as any single user
- You want to control access by inviting the bot only to specific channels
- You don't need message search, or can accept the limitation
Commands
channels list β List channels
slamy channels list [--limit <number>] [--include-archived] [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
--limit <number> | No | Maximum number of channels to return |
--include-archived | No | Include archived channels |
--json | No | Output as JSON |
--plain | No | Output as TSV |
channels history β Get channel message history
slamy channels history <channel_id> [--limit <number>] [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
<channel_id> | Yes | Channel ID |
--limit <number> | No | Number of messages (default: 20) |
messages post β Post a message
slamy messages post <channel_id> --text <message> [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
<channel_id> | Yes | Channel ID |
--text <message> | Yes | Message text |
messages reply β Reply to a thread
slamy messages reply <channel_id> <thread_ts> --text <message> [--broadcast] [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
<channel_id> | Yes | Channel ID |
<thread_ts> | Yes | Thread timestamp |
--text <message> | Yes | Reply text |
--broadcast | No | Also post to the channel (reply_broadcast) |
users list β List workspace users
slamy users list [--include-deactivated] [--include-bots] [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
--include-deactivated | No | Include deactivated users |
--include-bots | No | Include bot users |
users profile β Get user profile
slamy users profile <user_id> [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
<user_id> | Yes | User ID |
reactions add β Add emoji reaction
slamy reactions add <channel_id> <timestamp> --name <emoji> [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
<channel_id> | Yes | Channel ID |
<timestamp> | Yes | Message timestamp |
--name <emoji> | Yes | Emoji name (without colons) |
search messages β Search messages
slamy search messages <query> [--count <number>] [--page <number>] [--sort <field>] [--sort-dir <direction>] [--json] [--plain]
| Flag | Required | Description |
|---|---|---|
<query> | Yes | Search query (supports Slack modifiers like in:#channel, from:@user) |
--count <number> | No | Results per page |
--page <number> | No | Page number |
--sort <field> | No | Sort field |
--sort-dir <direction> | No | Sort direction |
auth test β Test authentication
slamy auth test [--json] [--plain]
mcp β Start MCP server
slamy mcp
Starts an MCP server over stdio, exposing all operations as tools for AI agents (e.g., Claude Code).
Configuration
Environment Variables
| Variable | Required | Description |
|---|---|---|
SLACK_USER_TOKEN | Yes | Slack User OAuth Token (xoxp-...) |
SLACK_TEAM_ID | No | Slack Team ID (for workspace-specific operations) |
Output Formats
Text (default)
#general C01234ABCDE [42 members]
#random C01234FGHIJ (private) [15 members]
JSON (--json)
[
{
"id": "C01234ABCDE",
"name": "general",
"num_members": 42,
"is_private": false
}
]
TSV (--plain)
C01234ABCDE general 42 public
C01234FGHIJ random 15 private
MCP Server
Usage with Claude Code
claude mcp add slamy /path/to/slamy mcp
Usage with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"slamy": {
"command": "/path/to/slamy",
"args": ["mcp"],
"env": {
"SLACK_USER_TOKEN": "xoxp-your-user-token"
}
}
}
}
Available Tools
| Tool | Description |
|---|---|
slack_list_channels | List all channels |
slack_get_channel_history | Get channel message history |
slack_get_thread_replies | Get thread replies |
slack_post_message | Post a message to a channel |
slack_reply_to_thread | Reply to a thread |
slack_add_reaction | Add emoji reaction |
slack_get_users | List workspace users |
slack_get_user_profile | Get user profile |
slack_search_messages | Search messages |
Development
# Build
go build -o slamy .
# Run all tests with race detector
go test -race ./...
# Run tests with coverage
go test -cover ./...
See CONTRIBUTING.md for development setup and coding standards. See docs/TESTING.md for the comprehensive testing guide.
Contributing
Contributions are welcome! Please read our Contributing Guide before submitting a Pull Request.
All contributors are expected to follow our Code of Conduct.
License
MIT
