Skip to main content
Glama
slack-read-mcp
by zio3

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-mcp

3. トークンと読み取り対象を配置する

設定はホームディレクトリの ~/.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 | pbcopy

AI に導入を任せる場合は、この配置は 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(ファイル)

トークン

SLACK_BOT_TOKEN

SLACK_TOKEN_FILE のパス → ~/.config/slack-read-mcp/token

読み取り対象

SLACK_CHANNELS_FILE のパス

~/.config/slack-read-mcp/channels.json

通常はファイルだけで動きます。環境変数は CI などで上書きしたい場合に使ってください。 なお環境変数を使う場合、変更は起動中のプロセスへ伝播しないため、ターミナルごと 再起動が必要になります。ファイル方式ならこの問題はありません(MCP クライアントの 再起動・再接続だけで反映されます)。

ツール

ツール

内容

list_channels

設定ファイルに書かれた対象の一覧。Slack へは問い合わせない

get_channel_history

チャンネルのメッセージ取得。oldest で差分のみ取得可。スレッドの親には latest_reply が付く

list_active_threads

巡回用。since 以降の新規投稿と、since 以降に返信が付いたスレッドだけを短く返す。判定はサーバー側で行うので、動きのないスレッドを読まされない

get_thread_replies

スレッド返信の取得。oldest で増分のみ取得可

download_file

添付ファイルを Bot トークンで取得してローカルに保存し、パスを返す。files:read が必要。メッセージの files[].id を渡す

resolve_user

ユーザー ID を表示名・実名に解決

添付ファイルのメタデータ(files: id / 名前 / 種類 / サイズ)はメッセージに含まれます。中身は download_file で明示的に取ります。

使う AI に読ませるもの

GUIDE.md を最初に読み込ませてください。

Slack のデータ構造には、知らないと取りこぼしに気づけない箇所があります。 特に get_channel_history はスレッド返信を返しません。これを知らずに使うと、 返信のやり取りを丸ごと見落とし、しかも見落としたことに気づけません。

開発

npm install
npm run build
pwsh ./test-mcp.ps1 -Tool list_channels

test-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 tools
get_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

    A4.2/5.0

    Scored across 5 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server that provides read-only access to Slack data including messages, channels, and users through secure API endpoints.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A read-only MCP server that enables AI assistants to access Slack workspace data, including channels, messages, threads, and user information.
      53,813 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Read-only MCP server for Slack with OAuth 2.1 authentication, enabling message retrieval, thread replies, search, user and channel listing.
      9
      Apache 2.0
    • A
      license
      A
      quality
      D
      maintenance
      A 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.
      7
      MIT