{"id":48277239,"url":"https://github.com/jackchuka/slackcli","last_synced_at":"2026-04-04T22:37:44.323Z","repository":{"id":339197103,"uuid":"1154131367","full_name":"jackchuka/slackcli","owner":"jackchuka","description":"The Slack CLI and MCP server built for LLM-powered agents and programmatic access.","archived":false,"fork":false,"pushed_at":"2026-03-24T02:10:45.000Z","size":68,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-25T01:50:36.980Z","etag":null,"topics":["cli","golang","mcp","mcp-server","slack","slack-api","slack-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jackchuka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T03:34:17.000Z","updated_at":"2026-03-24T01:59:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jackchuka/slackcli","commit_stats":null,"previous_names":["jackchuka/slackcli"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/jackchuka/slackcli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackchuka%2Fslackcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackchuka%2Fslackcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackchuka%2Fslackcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackchuka%2Fslackcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jackchuka","download_url":"https://codeload.github.com/jackchuka/slackcli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackchuka%2Fslackcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31417189,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","golang","mcp","mcp-server","slack","slack-api","slack-bot"],"created_at":"2026-04-04T22:37:44.251Z","updated_at":"2026-04-04T22:37:44.310Z","avatar_url":"https://github.com/jackchuka.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# slackcli\n\n[![Test](https://github.com/jackchuka/slackcli/workflows/Test/badge.svg)](https://github.com/jackchuka/slackcli/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/jackchuka/slackcli)](https://goreportcard.com/report/github.com/jackchuka/slackcli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**For AI, by AI.** The Slack CLI and MCP server built from the ground up for LLM-powered agents and programmatic access.\n\n## Why slackcli?\n\nMost Slack tools are built for humans. slackcli is built for agents. Every design decision — JSON-first output, structured error codes, automatic pagination, rate limit retries — is made so LLMs can interact with Slack reliably without hand-holding. Plug it in as an MCP server and your AI agent gets Slack superpowers. Use `--read-only` mode when you want guardrails.\n\n## Quick Start\n\n1. [Create a Slack app](https://api.slack.com/apps) and install it to your workspace with the scopes you need (e.g. `channels:read`, `chat:write`, `search:read`).\n2. Grab the Bot or User OAuth Token (`xoxb-...`) from **OAuth \u0026 Permissions**.\n3. Run:\n\n```bash\nbrew install jackchuka/tap/slackcli\nexport SLACK_TOKEN=xoxb-your-token\nslackcli channels list\n```\n\n## Features\n\n- **CLI commands** for channels, messages, users, files, reactions, and search\n- **MCP server** (stdio transport) for AI agent integration\n- **JSON-first output** optimized for LLM consumption, with TTY-aware table fallback\n- **Rate limit handling** with automatic retry\n- **Error classification** with structured error codes\n- **Pagination** support across all list operations\n- **Read-only mode** to prevent accidental writes by AI agents\n\n## Installation\n\nHomebrew:\n\n```bash\nbrew install jackchuka/tap/slackcli\n```\n\nOr via Go:\n\n```bash\ngo install github.com/jackchuka/slackcli/cmd/slackcli@latest\n```\n\nOr build from source:\n\n```bash\nmake build\n```\n\n## Authentication\n\nSet your Slack token via environment variable or the CLI:\n\n```bash\n# Environment variable\nexport SLACK_TOKEN=xoxb-your-token\n\n# Or use the auth command\nslackcli auth login --token xoxb-your-token\n\n# With a named workspace\nslackcli auth login --token xoxb-your-token --name my-workspace\n```\n\nToken resolution order: `--token` flag \u003e `SLACK_TOKEN` env \u003e stored config.\n\n## Usage\n\n### CLI\n\n```bash\n# Channels\nslackcli channels list\nslackcli channels info C1234567890\nslackcli channels create new-channel\n\n# Messages\nslackcli messages list --channel C1234567890\nslackcli messages send --channel C1234567890 --text \"Hello\"\nslackcli messages search --query \"important\"\n\n# Users\nslackcli users list\nslackcli users info U1234567890\n\n# Files\nslackcli files list\nslackcli files upload --channel C1234567890 --file ./report.pdf\n\n# Reactions\nslackcli reactions add --channel C1234567890 --timestamp 1234567890.123456 --name thumbsup\nslackcli reactions list --user U1234567890\n```\n\n### MCP Server\n\nStart the MCP server for AI agent integration:\n\n```bash\nslackcli mcp serve\n```\n\nConfigure in your MCP client (e.g., Claude Desktop):\n\n```json\n{\n  \"mcpServers\": {\n    \"slack\": {\n      \"command\": \"slackcli\",\n      \"args\": [\"mcp\", \"serve\"],\n      \"env\": {\n        \"SLACK_TOKEN\": \"xoxb-your-token\"\n      }\n    }\n  }\n}\n```\n\nAvailable MCP tools:\n\n| Category  | Tools                                                                                                                                                          |\n| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Channels  | `list_channels`, `get_channel_info`, `create_channel`, `archive_channel`, `invite_to_channel`, `kick_from_channel`, `set_channel_topic`, `set_channel_purpose` |\n| Messages  | `list_messages`, `send_message`, `edit_message`, `delete_message`, `search_messages`                                                                           |\n| Users     | `list_users`, `get_user_info`, `get_user_presence`                                                                                                             |\n| Reactions | `add_reaction`, `remove_reaction`, `list_reactions`                                                                                                            |\n| Files     | `list_files`, `get_file_info`, `delete_file`                                                                                                                   |\n| Auth      | `auth_test`                                                                                                                                                    |\n\n### Read-Only Mode\n\nUse `--read-only` to restrict to read-only operations. This prevents AI agents from accidentally sending messages, deleting files, or modifying channels.\n\n**CLI** -- write commands are rejected before execution:\n\n```bash\nslackcli --read-only channels list           # works\nslackcli --read-only messages send ...       # blocked\n# Error: command \"slackcli messages send\" is a write operation and cannot be used in read-only mode\n```\n\n**MCP server** -- write tools are hidden entirely (AI agents never see them):\n\n```json\n{\n  \"mcpServers\": {\n    \"slack-readonly\": {\n      \"command\": \"slackcli\",\n      \"args\": [\"--read-only\", \"mcp\", \"serve\"],\n      \"env\": {\n        \"SLACK_TOKEN\": \"xoxb-your-token\"\n      }\n    }\n  }\n}\n```\n\nRead-only tools (always available): `auth_test`, `list_channels`, `get_channel_info`, `list_messages`, `list_users`, `get_user_info`, `get_user_presence`, `list_reactions`, `list_files`, `get_file_info`, `search_messages`.\n\nWrite tools (hidden in read-only mode): `create_channel`, `archive_channel`, `invite_to_channel`, `kick_from_channel`, `set_channel_topic`, `set_channel_purpose`, `send_message`, `edit_message`, `delete_message`, `add_reaction`, `remove_reaction`, `delete_file`.\n\n## Output Formats\n\n```bash\n# Force JSON output\nslackcli channels list -o json\n\n# Force table output\nslackcli channels list -o table\n```\n\nDefault: table for TTY, JSON for piped output.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackchuka%2Fslackcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjackchuka%2Fslackcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackchuka%2Fslackcli/lists"}