mcpField
C
cyrus-setup-slack

cyrus-setup-slack

github.com/cyrusagentsエージェントワークフロー879911 回インストール今日更新
リポジトリ

cyrus-setup-slack について

Cyrus 用の Slack アプリを、用意されたマニフェストから作成・インストールする手順を案内するスキルです。ブラウザー自動化または手動設定に対応し、認証情報をエージェントのコンテキストに読み込ませません。

主な機能

  1. 01マニフェストから Slack アプリを作成
  2. 02ブラウザー操作または手動設定に対応
  3. 03環境ファイルに認証情報の項目を追加
  4. 04認証情報を手動入力する手順を案内
  5. 05認証情報の入力を確認

活用シーン

  1. 01Cyrus を Slack ワークスペースに接続
  2. 02シークレットを露出させずに Slack 認証情報を設定
  3. 03ブラウザー自動化を使えない環境で Slack アプリを設定

MCP 対応

claude-in-chrome MCP ツールを使い、ユーザーのブラウザーから Slack アプリの設定を操作できます。MCP サーバーの提供については記載されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cyrusagents/cyrus --skill cyrus-setup-slack

インストール後、Claude Code で/cyrus-setup-slackを入力して読み込まれたか確認します。

詳細

重要:~/.cyrus/.env または ~/.cyrus/ 内のファイルに対して、Read、Edit、Write ツールを決して使用しないでください。環境変数ファイルを操作する場合は、Bash コマンド(grep、printf >> など)のみを使用してください。シークレットを会話のコンテキストに読み込んではいけません。Web ページからシークレットの値をスクレイピング、抽出、読み取りしてはいけません。ユーザー自身で手動でコピーするよう案内してください。

Slack のセットアップ

事前に作成されたマニフェストから Slack アプリを作成し、Cyrus が Slack チャンネルのメッセージに応答できるようにします。

ステップ 1:既存の設定を確認する

grep -E '^SLACK_BOT_TOKEN=' ~/.cyrus/.env 2>/dev/null

SLACK_BOT_TOKEN がすでに設定されている場合は、ユーザーに次のように伝えてください。

Slack はすでに設定されています。このステップをスキップします。 再設定するには、~/.cyrus/.env から SLACK_BOT_TOKEN と SLACK_SIGNING_SECRET を削除して、再実行してください。

完了に進みます。

ステップ 2:変数を読み取る

ベース URL(setup-endpoint によって設定済み)を読み取ります。

grep '^CYRUS_BASE_URL=' ~/.cyrus/.env | cut -d= -f2-

AGENT_NAME と AGENT_DESCRIPTION も必要です。これらはオーケストレーターのステップ 0 で収集されており、会話のコンテキストから取得できるはずです。

ステップ 3:マニフェスト JSON を作成する

<AGENT_NAME>、<AGENT_DESCRIPTION>、<CYRUS_BASE_URL> を実際の値に置き換えて、マニフェストを作成します。

重要:以下に示すマニフェストテンプレートをそのまま使用してください。 イベント購読パスは必ず /slack-webhook にしてください(/slack/events やその他のパスは使用しないでください)。このパスは、Cyrus のコードベースにある SlackEventTransport によって登録されたルートと一致しています。

注意:このスコープ一覧は、Slack アプリの設定および https://github.com/cyrusagents/cyrus-hosted/blob/main/apps/app/src/lib/slack/constants.ts で定義されているスコープ一覧と同期させる必要があります。ここでスコープを変更する場合は、そちらでも同様の変更を提案し、このマニフェストを使用する稼働中の Slack アプリ設定も更新してください。

{
    "display_information": {
        "name": "<AGENT_NAME>",
        "description": "<AGENT_DESCRIPTION>",
        "background_color": "#00240e"
    },
    "features": {
        "bot_user": {
            "display_name": "<AGENT_NAME>",
            "always_online": true
        }
    },
    "oauth_config": {
        "redirect_urls": [
            "<CYRUS_BASE_URL>/slack/oauth/callback"
        ],
        "scopes": {
            "user": [
                "canvases:read",
                "canvases:write",
                "channels:history",
                "chat:write",
                "groups:history",
                "im:history",
                "mpim:history",
                "users:read",
                "users:read.email",
                "reactions:write",
                "search:read.public",
                "search:read.private",
                "search:read.mpim",
                "search:read.im",
                "search:read.files",
                "search:read.users"
            ],
            "bot": [
                "groups:read",
                "app_mentions:read",
                "assistant:write",
                "canvases:write",
                "channels:history",
                "channels:read",
                "chat:write",
                "chat:write.customize",
                "groups:history",
                "im:history",
                "im:read",
                "files:read",
                "files:write",
                "mpim:history",
                "reactions:write",
                "search:read.files",
                "search:read.public",
                "search:read.users",
                "users:read",
                "users:read.email",
                "mpim:read"
            ]
        },
        "pkce_enabled": false
    },
    "settings": {
        "event_subscriptions": {
            "request_url": "<CYRUS_BASE_URL>/slack-webhook",
            "bot_events": [
                "app_mention",
                "member_joined_channel",
                "message.channels",
                "message.groups",
                "message.mpim",
                "message.im"
            ]
        },
        "org_deploy_enabled": false,
        "socket_mode_enabled": false,
        "token_rotation_enabled": false
    }
}

ステップ 4:Slack アプリを作成する

すべての方法で「From a manifest」のフローを使用してください。 アプリを「From scratch」で作成してはいけません。

オーケストレーターのルールを参照し、使用するブラウザー自動化モードを判断します。

  1. claude-in-chrome MCP ツールが使用可能な場合 → 方法 A-1(claude-in-chrome)を使用
  2. agent-browser がインストールされており、Chrome のデバッグセッションに接続されている場合 → 方法 A-2(agent-browser)を使用
  3. それ以外の場合 → 方法 B(手動)を使用
方法 A-1:claude-in-chrome による自動化

mcp__claude-in-chrome__* ツールを使用して、ユーザーがすでに開いている Chrome ブラウザーを操作します。

  1. https://api.slack.com/apps に移動します
  2. Create New App をクリックします
  3. モーダルで From a manifest を選択します
  4. ワークスペースを選択します
  5. Next をクリックします
  6. JSON タブを選択し、ステップ 3 のマニフェスト(実際の値にすべて置き換えたもの)を貼り付けます
  7. Next をクリックし、内容を確認して Create をクリックします

作成後、アプリの Basic Information ページが表示されます。認証情報のページのスクリーンショットを撮らないでください。 認証情報の収集については、ステップ 5 に進んでください。

方法 A-2:agent-browser による自動化

agent-browser が Chrome のデバッグセッションに接続されている場合:

4a. Slack アプリ作成ページに移動する
agent-browser navigate "https://api.slack.com/apps"

スクリーンショットを撮り、ページが読み込まれてユーザーがログイン済みであることを確認します。

4b. 「Create New App」をクリックする
agent-browser click "button:text('Create New App')"
4c. モーダルで「From a manifest」を選択する
agent-browser click "button:text('From a manifest')"
4d. ワークスペースを選択する

スクリーンショットを撮ってワークスペースの選択画面を表示します。該当するワークスペースをクリックします。複数表示されている場合は、ユーザーにどれを選ぶか確認します。

agent-browser click "button:text('Next')"
4e. JSON 形式を選択してマニフェストを貼り付ける

まだ選択されていない場合は、JSON タブをクリックします。

agent-browser click "button:text('JSON')"

JavaScript を使ってマニフェストを貼り付けます。

agent-browser eval "var editor = document.querySelector('textarea, [role=\"textbox\"], .ace_editor textarea, .CodeMirror textarea'); if (editor) { var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value').set; nativeInputValueSetter.call(editor, JSON.stringify(<MANIFEST_JSON>, null, 2)); editor.dispatchEvent(new Event('input', { bubbles: true })); 'pasted'; } else { 'editor not found'; }"

うまくいかない場合は、次を試してください。

agent-browser click "textarea"
agent-browser keyboard "Control+a"
agent-browser type '<MANIFEST_JSON_STRING>'

スクリーンショットを撮って確認してから、Next をクリックします。

agent-browser click "button:text('Next')"
4f. 確認して作成する

スクリーンショットを撮って概要を確認してから、Create をクリックします。

agent-browser click "button:text('Create')"

作成後、認証情報のページのスクリーンショットを撮ったり、シークレットをスクレイピングしようとしたりしないでください。 ステップ 5 に進んでください。

パス B:手動ガイドによるセットアップ

マニフェストの手順をユーザーに案内します。

Slack アプリを作成する
  1. https://api.slack.com/apps にアクセスします
  2. Create New App をクリックします
  3. モーダルで From a manifest を選択します
  4. アプリを関連付ける workspace を選択します
  5. Next をクリックします
  6. JSON 形式を選択し、次のマニフェストを貼り付けます。

ユーザーがコピーできるよう、値をすべて置き換えたマニフェスト JSON を表示します。

  1. Next をクリックし、概要を確認してから Create をクリックします

ステップ 5 に進みます。

ステップ 5:アプリをインストールして認証情報を取得する

(どの方法で作成した場合も)アプリをインストールし、認証情報を取得する手順をユーザーに案内します。**エージェントはページからシークレットをスクレイピング、読み取り、抽出してはいけません。**ユーザーが手動でコピーします。

5a. ワークスペースにインストールする

次のようにユーザーに伝えます。

  1. Slack アプリの設定で、左サイドバーから Install App に移動します
  2. Install to Workspace をクリックします
  3. Allow をクリックします

ブラウザー自動化(A-1 または A-2)を使用している場合、エージェントは Install App ページに移動してボタンをクリックできます。ただし、インストールが完了したら停止し、表示されたページのスクリーンショットを撮ってはいけません。

5b. 認証情報のプレースホルダーを追加する

ユーザーが入力できるよう、環境変数ファイルにプレースホルダーの行を追加します。

grep -q '^SLACK_BOT_TOKEN=' ~/.cyrus/.env || echo 'SLACK_BOT_TOKEN=' >> ~/.cyrus/.env
grep -q '^SLACK_SIGNING_SECRET=' ~/.cyrus/.env || echo 'SLACK_SIGNING_SECRET=' >> ~/.cyrus/.env
5c. 環境変数ファイルを編集用に開く
# macOS
code --new-window ~/.cyrus/.env 2>/dev/null || open -a TextEdit ~/.cyrus/.env
# Linux
code --new-window ~/.cyrus/.env 2>/dev/null || xdg-open ~/.cyrus/.env
5d. 認証情報のコピーをユーザーに案内する

次のようにユーザーに伝えます。

~/.cyrus/.env を開きました。2 つの値を貼り付けてください。

  1. Bot User OAuth Token — アプリの OAuth & Permissions ページに移動し、Bot User OAuth Token(xoxb- で始まります)をコピーして、SLACK_BOT_TOKEN= の後に貼り付けます

  2. Signing Secret — アプリの Basic Information ページに移動し、App Credentials までスクロールして、Signing Secret の横にある Show をクリックします。値をコピーし、SLACK_SIGNING_SECRET= の後に貼り付けます

入力が完了したら、ファイルを保存して閉じます。

5e. 待機して確認する

ユーザーが保存したことを確認したら、次を確認します。

grep -c '^SLACK_BOT_TOKEN=.' ~/.cyrus/.env
grep -c '^SLACK_SIGNING_SECRET=.' ~/.cyrus/.env

両方とも 1 を返す必要があります(= の後の . によって値が空でないことを確認します)。いずれかが 0 の場合は、ファイルを確認するようユーザーに依頼します。

完了

✓ マニフェストから Slack アプリを作成し、インストールしました ✓ ボットトークンと署名シークレットを ~/.cyrus/.env に保存しました

注: Cyrus が実際に起動するまでは、イベントサブスクリプションの request_url は Slack の検証チャレンジに失敗します。Cyrus の起動後、アプリの Event Subscriptions ページで URL を再入力して検証を開始するか、Slack が自動的に再試行するのを待ってください。

コメント