slack-read-mcp
A read-only Slack MCP server for reading messages from channels the bot has been invited to, with no writes, no storage, and no channel discovery.
List configured target channels (
list_channels) without querying Slack; listing does not imply access.Fetch channel history newest-first (
get_channel_history), with optionallimit(1–200) and incrementaloldest; thread replies are not included.See reactions on messages if the bot has
reactions:read; otherwise reactions are omitted.Find active threads since a given time (
list_active_threads), returning new posts and threads with new replies; reply bodies are not included and post bodies are truncated to one line.Fetch thread replies (
get_thread_replies), optionally incremental witholdest; withoutoldest, includes the parent and up to 2000 replies.Resolve Slack user IDs to display/real names (
resolve_user) for mentions like<@U…>.Cannot write, cannot archive/store messages, cannot list channels the bot is not invited to, and cannot read uninvited channels even with an ID.
Note: README mentions
download_file, but the provided server schema does not expose it.
Provides read-only access to Slack channels the bot is invited to, allowing listing configured channels, fetching channel history and thread replies, and resolving user IDs to display names.
Click on "Deploy 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-read-mcp what's the latest in #team-general?"
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-read-mcp
Slack を読むだけの MCP サーバー。
Bot が招待されたチャンネルのメッセージを読みます。招待されていないチャンネルは、 チャンネル ID を正確に指定しても読めません。書き込みは一切できません。
サーバーもデータベースも使いません。利用者の PC 上で動き、Slack Web API を直接呼びます。 このサーバー自体は状態を持たず、メッセージを保存しません(取得のたびに Slack へ 問い合わせます)。
読んだ内容からタスク台帳や要約を手元に作るのは利用側の想定された使い方ですが、 全文アーカイブは作らない・転記物は元と同じ機密度で扱う、という線引きがあります。 詳細は GUIDE.md を参照してください。
設計
権限の実体は「Bot がどのチャンネルに招待されているか」だけです。
インストールしただけでは一件も読めない
招待を外すと、トークンを変更せずに即座に読めなくなる
パブリック/プライベートの別は関係ない。効いているのは招待の有無だけ
書き込みは Slack が API レベルで拒否する(スコープを付与していないため)
チャンネル一覧を取得する権限(channels:read)も付与しません。したがって、
Bot は自分が招待されていないチャンネルの存在を知ることができません。
読み取り対象は設定ファイルで指定します。
設定ファイルはアクセス制御ではありません。 そこに何を書いても、 招待されていないチャンネルは読めません。編集しても危険はありません。
Related MCP server: Slack MCP Server
セットアップ
導入作業を AI に任せる場合は、INSTALL.md を読ませてください。 環境(Node のバージョン、Slack アプリの有無)を確認したうえで、利用者にしかできない操作だけを 依頼するよう書かれています。以下は人間が自分で作業する場合の手順です。
1. Slack アプリを作る
api.slack.com/apps → Create New App → From a manifest を選び、
slack-app-manifest.json の内容を貼り付けます。
付与されるスコープは次のとおりです。すべて読み取り専用です。
channels:history 参加しているパブリックチャンネルのメッセージ
groups:history 参加しているプライベートチャンネルのメッセージ
users:read ユーザー ID から表示名への解決
reactions:read メッセージに付いたリアクション
files:read 添付ファイル(画像・Excel・PDF)の取得。download_file にだけ必要reactions:read と files:read は無くても動きます(該当の情報が省略される/missing_scope が返る)。
本文だけで足りるなら Manifest から外して構いません。逆に後から足す場合は、Manifest を更新して
再インストールしないと既存トークンには反映されません。
作成後、ワークスペースへインストールして Bot User OAuth Token(xoxb- で始まる)を取得します。
2. Bot をチャンネルへ招待する
読みたいチャンネルで次を実行します。招待していないチャンネルは読めません。
/invite @slack-read-mcp3. トークンと読み取り対象を配置する
設定はホームディレクトリの ~/.config/slack-read-mcp/ に置きます。MCP の設定ファイルや
環境変数にトークンを書く必要はありません。
~/.config/slack-read-mcp/
├── token Bot User OAuth Token(xoxb-…)を1行だけ
└── channels.json 読み取り対象のチャンネル一覧トークンは、クリップボード経由にすると画面やコマンド履歴に出さずに配置できます。 順序に注意してください: ①下のコマンドを先にターミナルへ貼る(実行はまだ)→ ②Slack のページでトークンを Copy → ③ターミナルに戻って Enter。 トークンをコピーした後にコマンドをコピーすると、クリップボードが上書きされて消えます。
# Windows
New-Item -ItemType Directory -Force "$env:USERPROFILE\.config\slack-read-mcp" | Out-Null
Set-Content "$env:USERPROFILE\.config\slack-read-mcp\token" (Get-Clipboard).Trim() -NoNewline
Set-Clipboard "done" # 本物のトークンをクリップボードに残さない# macOS / Linux
mkdir -p ~/.config/slack-read-mcp && pbpaste > ~/.config/slack-read-mcp/token && echo done | pbcopyAI に導入を任せる場合は、この配置は AI がクリップボードから直接行います (INSTALL.md 参照。利用者はコピーだけ)。
channels.json は channels.example.json を参考に作ります。チャンネル ID は、
Slack でチャンネル名を右クリック →「リンクをコピー」で取得できます。
[
{ "id": "C0123456789", "name": "team-general" }
]4. MCP クライアントに登録する
Claude Code の場合:
claude mcp add slack-read --scope local -- npx -y github:zio3/slack-read-mcp推奨はローカルスコープ(この Slack に関わる作業フォルダにだけ登録)です。ユーザー
スコープは全プロジェクトに常駐するため、複数の顧客・業務を扱う PC では情報の混線経路に
なります。プロジェクトスコープはリポジトリ内に .mcp.json を作って共有してしまうため
不適切です。
設定の探索順
設定 | 優先1(環境変数) | 優先2(ファイル) |
トークン |
|
|
読み取り対象 |
|
|
通常はファイルだけで動きます。環境変数は CI などで上書きしたい場合に使ってください。 なお環境変数を使う場合、変更は起動中のプロセスへ伝播しないため、ターミナルごと 再起動が必要になります。ファイル方式ならこの問題はありません(MCP クライアントの 再起動・再接続だけで反映されます)。
ツール
ツール | 内容 |
| 設定ファイルに書かれた対象の一覧。Slack へは問い合わせない |
| チャンネルのメッセージ取得。 |
| 巡回用。 |
| スレッド返信の取得。 |
| 添付ファイルを Bot トークンで取得してローカルに保存し、パスを返す。 |
| ユーザー ID を表示名・実名に解決 |
添付ファイルのメタデータ(files: id / 名前 / 種類 / サイズ)はメッセージに含まれます。中身は download_file で明示的に取ります。
使う AI に読ませるもの
GUIDE.md を最初に読み込ませてください。
Slack のデータ構造には、知らないと取りこぼしに気づけない箇所があります。
特に get_channel_history はスレッド返信を返しません。これを知らずに使うと、
返信のやり取りを丸ごと見落とし、しかも見落としたことに気づけません。
開発
npm install
npm run build
pwsh ./test-mcp.ps1 -Tool list_channelstest-mcp.ps1 は MCP サーバーを素の JSON-RPC で叩く確認用スクリプトです。
ビルドを挟まず TypeScript のまま実行することもできます(Node 22.6 以降)。
npm run start:ts # Node 22.6〜23.5(--experimental-strip-types 付き)
node src/index.ts # Node 23.6 以降(フラグ不要)配布時にビルド方式を既定にしているのは、実行環境の Node バージョンに依存させないためです。 型ストリッピングはまだ experimental で、stderr に警告が出ます。
ライセンス
MIT
Available Tools
5 toolsget_channel_historyA
チャンネルのメッセージを新しい順に取得する。oldest に前回の ts を渡すと差分だけ取れる。スレッド返信は含まれない(reply_count > 0 のメッセージには get_thread_replies が必要)。各メッセージの reactions も返す(Bot に reactions:read スコープが無い場合は省略される)。Bot が参加していない場合は not_in_channel または channel_not_found になる。
Inputs: channelId (required), limit, oldest.
get_thread_repliesA
スレッドの返信を取得する。親メッセージの ts を渡す。oldest を渡すと、それより新しい返信だけ返す(親も含めない)。oldest を渡さない場合は親メッセージを含めて全件返す(ページ送りで最大 2000 件)。
Inputs: threadTs (required), channelId (required), oldest.
list_active_threadsA
since 以降に動きのあったものだけを返す巡回用ツール。チャンネル履歴を oldest まで遡って親メッセージを集め、(1) since より新しい投稿、(2) since より新しい返信が付いたスレッド(latest_reply で判定)を抽出する。返信本文は含まない(動いたスレッドは get_thread_replies を oldest 付きで読む)。本文は先頭 1 行のみに切り詰めるので、更新のないスレッドを読まされることがない。since には前回巡回した時刻(ts か ISO 8601)を渡す。
Inputs: since (required), channelId (required), oldest.
list_channelsA
読み取り対象として設定されているチャンネルの一覧を返す。Slack へは問い合わせない。ここに載っていても Bot が招待されていなければ読めない。
Inputs: no named parameters.
resolve_userA
ユーザー ID を表示名・実名に解決する。本文中の <@U…> を人名に直すのに使う。
Inputs: userId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
get_channel_history and get_thread_replies are explicitly separated by thread inclusion, while list_active_threads is a polling summary tool that points to where to read next. list_channels and resolve_user operate on clearly different resources, so no two tools are likely to be confused.
All tool names follow a consistent snake_case verb_noun pattern: get for direct reads, list for enumeration, and resolve for user lookup. The naming is uniform and predictable across the entire set.
Five tools is a compact and appropriate surface for a read-only Slack integration. Each tool provides a distinct read operation with no unnecessary duplication or bloat.
The core read workflows are covered: channel enumeration, message history, thread replies, active-thread polling, and user ID resolution. Minor gaps such as listing all users or fetching a single message by ID prevent a perfect score but do not block typical use.
Maintenance
Related MCP Connectors
Hosted Slack MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Read-only MCP server for interior design studios: projects, overviews, weekly activity. No writes.
One MCP server for all your work accounts: Slack, Teams, Google Chat, Jira, ClickUp, digest, tasks.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides read-only access to Slack data including messages, channels, and users through secure API endpoints.MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that enables AI assistants to access Slack workspace data, including channels, messages, threads, and user information.53,813 npm3MIT
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for Slack with OAuth 2.1 authentication, enabling message retrieval, thread replies, search, user and channel listing.9Apache 2.0
- AlicenseAqualityDmaintenanceA self-hosted, read-only Slack MCP server that runs locally and provides read-only access to Slack channels, messages, and users via the Slack Web API, with no third-party intermediary.7MIT