{"id":49726992,"url":"https://github.com/duolingo/slack-mcp","last_synced_at":"2026-05-09T05:03:40.261Z","repository":{"id":325335950,"uuid":"1100775514","full_name":"duolingo/slack-mcp","owner":"duolingo","description":"OAuth-based multi-user Slack MCP server with HTTP transport","archived":false,"fork":false,"pushed_at":"2026-03-19T17:46:59.000Z","size":335,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-20T09:32:20.093Z","etag":null,"topics":["http","mcp","model-context-protocol","oauth","python","slack"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/duolingo.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":"2025-11-20T18:33:58.000Z","updated_at":"2026-03-19T17:47:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/duolingo/slack-mcp","commit_stats":null,"previous_names":["duolingo/slack-mcp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/duolingo/slack-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duolingo%2Fslack-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duolingo%2Fslack-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duolingo%2Fslack-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duolingo%2Fslack-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/duolingo","download_url":"https://codeload.github.com/duolingo/slack-mcp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duolingo%2Fslack-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32807861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["http","mcp","model-context-protocol","oauth","python","slack"],"created_at":"2026-05-09T05:03:39.659Z","updated_at":"2026-05-09T05:03:40.241Z","avatar_url":"https://github.com/duolingo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Slack MCP Server\n\nA read-only MCP (Model Context Protocol) server for Slack with OAuth 2.1 authentication.\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n\n## Demo\n\nhttps://github.com/user-attachments/assets/211bd428-209f-461a-b9a1-9cc85fd7c438\n\n### Available Tools\n\n- `slack_get_channel_messages` - Retrieve messages from channels\n- `slack_get_thread_replies` - Get conversation thread replies\n- `slack_search_messages` - Advanced message search with filters\n- `slack_get_users` - List workspace users or get specific profiles\n- `slack_get_channels` - List channels or get detailed info\n\n## Quick Start\n\n### 1. Create Slack App\n\n1. Visit [Slack API Apps](https://api.slack.com/apps) and create a new app\n2. Under **App Credentials**, copy your `Client ID` and `Client Secret`\n3. Navigate to **OAuth \u0026 Permissions** and add these [**User Token Scopes**](https://docs.slack.dev/reference/scopes/): `channels:history` `groups:history` `im:history` `mpim:history` `channels:read` `groups:read` `im:read` `mpim:read` `users:read` `users:read.email` `search:read`\n4. Add **Redirect URL** under **OAuth \u0026 Permissions**:\n   - For local testing: Use an HTTPS proxy like ngrok (E.g: `https://abc123.ngrok.io/oauth2callback`). See local development setup below.\n   - For production: `https://your-domain.com/oauth2callback`\n\n### 2. Installation\n\n```bash\nuv sync\n```\n\n### 3. Local Development Setup (HTTPS Proxy)\n\nSlack requires HTTPS for OAuth callbacks. For local development, use ngrok or a similar HTTPS proxy:\n\n```bash\n# Visit https://ngrok.com/ to download ngrok and start the proxy\nngrok http 8001\n```\n\nCopy the HTTPS forwarding URL (e.g., `https://abc123.ngrok.io/oauth2callback`) and add it as a Redirect URL in your Slack app settings.\n\n### 4. Configuration\n\nSet required environment variables:\n\n```bash\nexport SLACK_CLIENT_ID=\"your_client_id\"\nexport SLACK_CLIENT_SECRET=\"your_client_secret\"\n# Use https://your-domain.com for production.\nexport SLACK_MCP_BASE_URI=\"http://localhost\"\n# Use https://your-domain.com for production.\nexport SLACK_EXTERNAL_URL=\"https://abc123.ngrok.io\"\n# Optional, if you want to run the MCP server on a different port.\nexport SLACK_MCP_PORT=8001\n```\n\n### 5. Run the Server\n\n```bash\nuv run python main.py\n```\n\nThe server will start on `http://localhost:8001` by default. Make sure your ngrok proxy is running alongside it for OAuth to work.\n\n### 6. Configure Your MCP Client\n\nAdd to your MCP client configuration (e.g. ~/.cursor/mcp.json for Cursor):\n\n```json\n{\n  \"mcpServers\": {\n    \"slack\": { \"url\": \"http://localhost:8001/mcp\", \"transport\": \"http\" }\n  }\n}\n```\n\n### 7. Authenticate\n\nAuthentication happens automatically via OAuth 2.1 when your MCP client first connects. Your client will open a browser window for Slack authorization — approve access and you're ready to go.\n\n## Deployment\n\nFor production deployment, you can run it inside docker:\n\n```bash\ndocker build -t slack-mcp .\ndocker run -p 8001:8001 \\\n  -e SLACK_CLIENT_ID=\"your_client_id\" \\\n  -e SLACK_CLIENT_SECRET=\"your_client_secret\" \\\n  -e SLACK_MCP_BASE_URI=\"https://your-domain.com\" \\\n  -e SLACK_EXTERNAL_URL=\"https://your-domain.com\" \\\n  slack-mcp\n```\n\n## Development\n\nRun tests with `uv run pytest`.\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n\nDuolingo is hiring! Apply at https://www.duolingo.com/careers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fduolingo%2Fslack-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fduolingo%2Fslack-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fduolingo%2Fslack-mcp/lists"}