From 74d9cb8032bc5d9c0a509bcf84accc009605de95 Mon Sep 17 00:00:00 2001 From: Michael Brooks Date: Thu, 16 Apr 2026 16:27:52 -0700 Subject: [PATCH] feat: show Slack MCP Server status on App Home in Socket Mode When running in Socket Mode, the App Home now displays the Slack MCP Server as disconnected with a link to the README section on how to enable it. Previously, the MCP status was hidden in Socket Mode. --- .../listeners/views/app_home_builder.py | 21 +++++++++++++++++++ claude-agent-sdk/tests/test_view_builders.py | 8 ++++--- .../listeners/views/app_home_builder.py | 21 +++++++++++++++++++ openai-agents-sdk/tests/test_view_builders.py | 8 ++++--- .../listeners/views/app_home_builder.py | 21 +++++++++++++++++++ pydantic-ai/tests/test_view_builders.py | 8 ++++--- 6 files changed, 78 insertions(+), 9 deletions(-) diff --git a/claude-agent-sdk/listeners/views/app_home_builder.py b/claude-agent-sdk/listeners/views/app_home_builder.py index 0228642..448eb66 100644 --- a/claude-agent-sdk/listeners/views/app_home_builder.py +++ b/claude-agent-sdk/listeners/views/app_home_builder.py @@ -128,6 +128,27 @@ def build_app_home_view( ], } ) + else: + blocks.append( + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "\U0001f534 *Slack MCP Server is disconnected.* ", + }, + } + ) + blocks.append( + { + "type": "context", + "elements": [ + { + "type": "mrkdwn", + "text": "The Slack MCP Server enables Casey to search messages, read channels, and more.", + } + ], + } + ) return { "type": "home", diff --git a/claude-agent-sdk/tests/test_view_builders.py b/claude-agent-sdk/tests/test_view_builders.py index f3e8e58..89df6b4 100644 --- a/claude-agent-sdk/tests/test_view_builders.py +++ b/claude-agent-sdk/tests/test_view_builders.py @@ -26,7 +26,7 @@ def test_build_feedback_blocks(): def test_build_app_home_view_default(): - """Default args (app.py mode) — no MCP status section.""" + """Default args (Socket Mode) — shows disconnected status with learn-more link.""" view = build_app_home_view() assert view["type"] == "home" @@ -35,11 +35,13 @@ def test_build_app_home_view_default(): actions_block = next(b for b in view["blocks"] if b["type"] == "actions") assert len(actions_block["elements"]) == len(CATEGORIES) - # No MCP status section + # Shows MCP status as disconnected with learn-more link section_texts = [ b["text"]["text"] for b in view["blocks"] if b["type"] == "section" ] - assert not any("Slack MCP Server" in t for t in section_texts) + mcp_section = next(t for t in section_texts if "Slack MCP Server" in t) + assert "disconnected" in mcp_section + assert "Learn how to enable" in mcp_section def test_build_app_home_view_connect(): diff --git a/openai-agents-sdk/listeners/views/app_home_builder.py b/openai-agents-sdk/listeners/views/app_home_builder.py index 0228642..0198b1f 100644 --- a/openai-agents-sdk/listeners/views/app_home_builder.py +++ b/openai-agents-sdk/listeners/views/app_home_builder.py @@ -128,6 +128,27 @@ def build_app_home_view( ], } ) + else: + blocks.append( + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "\U0001f534 *Slack MCP Server is disconnected.* ", + }, + } + ) + blocks.append( + { + "type": "context", + "elements": [ + { + "type": "mrkdwn", + "text": "The Slack MCP Server enables Casey to search messages, read channels, and more.", + } + ], + } + ) return { "type": "home", diff --git a/openai-agents-sdk/tests/test_view_builders.py b/openai-agents-sdk/tests/test_view_builders.py index f3e8e58..89df6b4 100644 --- a/openai-agents-sdk/tests/test_view_builders.py +++ b/openai-agents-sdk/tests/test_view_builders.py @@ -26,7 +26,7 @@ def test_build_feedback_blocks(): def test_build_app_home_view_default(): - """Default args (app.py mode) — no MCP status section.""" + """Default args (Socket Mode) — shows disconnected status with learn-more link.""" view = build_app_home_view() assert view["type"] == "home" @@ -35,11 +35,13 @@ def test_build_app_home_view_default(): actions_block = next(b for b in view["blocks"] if b["type"] == "actions") assert len(actions_block["elements"]) == len(CATEGORIES) - # No MCP status section + # Shows MCP status as disconnected with learn-more link section_texts = [ b["text"]["text"] for b in view["blocks"] if b["type"] == "section" ] - assert not any("Slack MCP Server" in t for t in section_texts) + mcp_section = next(t for t in section_texts if "Slack MCP Server" in t) + assert "disconnected" in mcp_section + assert "Learn how to enable" in mcp_section def test_build_app_home_view_connect(): diff --git a/pydantic-ai/listeners/views/app_home_builder.py b/pydantic-ai/listeners/views/app_home_builder.py index fbc8728..92ef2c3 100644 --- a/pydantic-ai/listeners/views/app_home_builder.py +++ b/pydantic-ai/listeners/views/app_home_builder.py @@ -128,6 +128,27 @@ def build_app_home_view( ], } ) + else: + blocks.append( + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "🔴 *Slack MCP Server is disconnected.* ", + }, + } + ) + blocks.append( + { + "type": "context", + "elements": [ + { + "type": "mrkdwn", + "text": "The Slack MCP Server enables Casey to search messages, read channels, and more.", + } + ], + } + ) return { "type": "home", diff --git a/pydantic-ai/tests/test_view_builders.py b/pydantic-ai/tests/test_view_builders.py index f3e8e58..89df6b4 100644 --- a/pydantic-ai/tests/test_view_builders.py +++ b/pydantic-ai/tests/test_view_builders.py @@ -26,7 +26,7 @@ def test_build_feedback_blocks(): def test_build_app_home_view_default(): - """Default args (app.py mode) — no MCP status section.""" + """Default args (Socket Mode) — shows disconnected status with learn-more link.""" view = build_app_home_view() assert view["type"] == "home" @@ -35,11 +35,13 @@ def test_build_app_home_view_default(): actions_block = next(b for b in view["blocks"] if b["type"] == "actions") assert len(actions_block["elements"]) == len(CATEGORIES) - # No MCP status section + # Shows MCP status as disconnected with learn-more link section_texts = [ b["text"]["text"] for b in view["blocks"] if b["type"] == "section" ] - assert not any("Slack MCP Server" in t for t in section_texts) + mcp_section = next(t for t in section_texts if "Slack MCP Server" in t) + assert "disconnected" in mcp_section + assert "Learn how to enable" in mcp_section def test_build_app_home_view_connect():