feat(docs-tools): add optional Slack MCP integration#109
feat(docs-tools): add optional Slack MCP integration#109gtrivedi88 wants to merge 2 commits intoredhat-documentation:mainfrom
Conversation
… and planning Enable the requirements-analyst and docs-planner agents to search Slack for SME decisions, design rationale, and technical context not captured in JIRA tickets or PRs. The integration is optional — agents detect Slack MCP tool availability at runtime and skip Slack research if not configured. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WalkthroughAdds optional Slack MCP integration: README adds setup and token-refresh steps; docs-planner and requirements-analyst introduce conditional Slack research when Changes
Sequence Diagram(s)sequenceDiagram
participant Agent as Docs Agent
participant Slack as Slack MCP
participant Repo as Codebase / JIRA
Agent->>Slack: search (JIRA key / feature name / channel)
Slack-->>Agent: return messages, threads, links
Agent->>Repo: cross-reference Slack claims (code, tickets, PRs)
Repo-->>Agent: confirm or contradict evidence
Agent->>Agent: record validated findings under "Sources consulted" and incorporate into plan
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error)
✅ Passed checks (9 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@plugins/docs-tools/README.md`:
- Around line 54-56: Replace the unpinned remote-exec invocation of the setup
script (the command calling setup-slack-mcp.py) with a reproducible, verifiable
install: reference a specific commit SHA or tag for the GitHub URL, download the
script to disk first, fetch and verify a published checksum or GPG signature for
that pinned release, and only then execute the verified file; update the README
example to show the pinned URL and verification steps for setup-slack-mcp.py
instead of piping from the mutable main branch.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 259210eb-afb9-419f-822e-a25dd9ffb908
📒 Files selected for processing (3)
plugins/docs-tools/README.mdplugins/docs-tools/agents/docs-planner.mdplugins/docs-tools/agents/requirements-analyst.md
| ```bash | ||
| python3 <(curl -fsSL https://raw.githubusercontent.com/redhat-community-ai-tools/slack-mcp/main/scripts/setup-slack-mcp.py) | ||
| ``` |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Read-only verification: find remote-script execution patterns and MCP setup references in markdown/shell files.
fd -e md -e sh -e bash | xargs rg -n --no-heading -e 'curl .*raw\.githubusercontent\.com' -e 'setup-slack-mcp\.py' -e 'mcp'Repository: redhat-documentation/redhat-docs-agent-tools
Length of output: 1903
🌐 Web query:
redhat-community-ai-tools organization slack-mcp verified MCP server
💡 Result:
The redhat-community-ai-tools organization on GitHub develops and maintains the slack-mcp repository, which is a Model Context Protocol (MCP) server for interacting with Slack workspaces. It enables AI assistants to read messages, post content, manage channels, add reactions, and more via MCP-compatible clients. This is a community-developed MCP server hosted under the Red Hat Community AI Tools organization (https://github.com/redhat-community-ai-tools), with 56 public repositories focused on AI tools including multiple MCP servers like jira-mcp, ocm-mcp, and slack-mcp. The slack-mcp repo has 15 stars, is written in Python, supports stdio and SSE transports, and can be run via Podman/Docker with Slack XOXC/XOXD tokens. It appears in MCP server directories like mcpservers.org and awesome-mcp lists as a community server, not an "official" or vendor-verified one (official Slack MCP is at mcp.slack.com). No sources explicitly state it as "verified" in an official MCP registry sense, but it is actively maintained (last push April 2026) and listed alongside other reputable MCP implementations.
Citations:
- 1: https://github.com/redhat-community-ai-tools/slack-mcp
- 2: https://github.com/redhat-community-ai-tools
- 3: https://github.com/redhat-ai-tools/slack-mcp
- 4: https://mcpservers.org/servers/redhat-ai-tools/slack-mcp
- 5: https://apigene.ai/blog/mcp-server-directory
- 6: https://github.com/zacharypodbela/wong-awesome-mcp-servers
- 7: https://mcpservers.org/official?page=5&sort=name
🏁 Script executed:
#!/bin/bash
# Check if redhat-community-ai-tools is an official Red Hat org
# and verify slack-mcp repository details
cd /tmp && git clone --depth 1 https://github.com/redhat-community-ai-tools/slack-mcp.git 2>&1 | head -20
# If cloned, check for verification markers (official badges, org info, etc.)
if [ -d slack-mcp ]; then
echo "=== Repository cloned successfully ==="
head -50 slack-mcp/README.md | grep -i -E "(official|verified|red\s*hat|community)" || echo "No official verification markers found"
test -f slack-mcp/SECURITY.md && echo "=== Found SECURITY.md ===" && head -20 slack-mcp/SECURITY.md
fiRepository: redhat-documentation/redhat-docs-agent-tools
Length of output: 406
Avoid unpinned remote execution for MCP setup scripts.
Line 55 executes code fetched from the mutable main branch at runtime without pinning, checksums, or verification. While redhat-community-ai-tools is Red Hat-affiliated, slack-mcp is a community-developed (not officially verified) MCP server. Switch to a reproducible, verified installation method using pinned commits/tags and checksum verification.
Suggested hardening pattern
- python3 <(curl -fsSL https://raw.githubusercontent.com/redhat-community-ai-tools/slack-mcp/main/scripts/setup-slack-mcp.py)
+ curl -fsSLo /tmp/setup-slack-mcp.py \
+ https://raw.githubusercontent.com/redhat-community-ai-tools/slack-mcp/<PINNED_COMMIT>/scripts/setup-slack-mcp.py
+ echo "<EXPECTED_SHA256> /tmp/setup-slack-mcp.py" | sha256sum -c -
+ python3 /tmp/setup-slack-mcp.py🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 54-54: Code block style
Expected: indented; Actual: fenced
(MD046, code-block-style)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/docs-tools/README.md` around lines 54 - 56, Replace the unpinned
remote-exec invocation of the setup script (the command calling
setup-slack-mcp.py) with a reproducible, verifiable install: reference a
specific commit SHA or tag for the GitHub URL, download the script to disk
first, fetch and verify a published checksum or GPG signature for that pinned
release, and only then execute the verified file; update the README example to
show the pinned URL and verification steps for setup-slack-mcp.py instead of
piping from the mutable main branch.
Responding to CodeRabbit findings1. Unpinned remote execution (inline comment on README.md:55)This is the upstream project's documented install command from redhat-community-ai-tools/slack-mcp. Pinning to a commit SHA would cause the setup to break silently when the upstream updates token extraction logic or container image versions. The No change needed. 2. Plugin Registry Consistency (pre-merge check failure)
No change needed. |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
e954dc1 to
d9e46ee
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@plugins/docs-tools/agents/requirements-analyst.md`:
- Around line 189-191: The Slack example under the "### Slack discussions"
section contains a real-person mention "@ibuziuk"; replace that with a
role-based placeholder (e.g., "@product-manager" or "@PM") so the example no
longer references a real individual, and ensure the line "- Slack DM with
`@ibuziuk` (2026-02-23): PM confirmed stakeholder list..." becomes "- Slack DM
with `@product-manager` (2026-02-23): PM confirmed stakeholder list..." (or
similar role-based text) to comply with the plugins/* documentation rule against
real-person references.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: b253d85d-9b04-4d37-a7fa-ef3baba73bfa
📒 Files selected for processing (3)
plugins/docs-tools/.claude-plugin/plugin.jsonplugins/docs-tools/agents/docs-planner.mdplugins/docs-tools/agents/requirements-analyst.md
✅ Files skipped from review due to trivial changes (2)
- plugins/docs-tools/.claude-plugin/plugin.json
- plugins/docs-tools/agents/docs-planner.md
| ### Slack discussions | ||
| - Slack thread in #team-devspaces (2026-04-20): SME confirmed backup/restore feature targets GA in 3.27. Decision to use CRDs instead of ConfigMap for state storage. | ||
| - Slack DM with @ibuziuk (2026-02-23): PM confirmed stakeholder list for JTBD meeting — UX, Marketing, TAM, and Support contacts identified. |
There was a problem hiding this comment.
Remove real-person identifier from the Slack example.
The example uses @ibuziuk, which violates the plugin-doc rule that forbids real people references in instructions/examples. Replace with a role-based placeholder.
Proposed fix
### Slack discussions
- Slack thread in `#team-devspaces` (2026-04-20): SME confirmed backup/restore feature targets GA in 3.27. Decision to use CRDs instead of ConfigMap for state storage.
-- Slack DM with `@ibuziuk` (2026-02-23): PM confirmed stakeholder list for JTBD meeting — UX, Marketing, TAM, and Support contacts identified.
+- Slack DM with `@product-manager` (2026-02-23): PM confirmed stakeholder list for JTBD meeting — UX, Marketing, TAM, and Support contacts identified.As per coding guidelines: plugins/*/{skills,commands,agents}/*.md: “Never allow references to real people by name in plugin commands, skill documentation, example prompts, instructions, or style references.”
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### Slack discussions | |
| - Slack thread in #team-devspaces (2026-04-20): SME confirmed backup/restore feature targets GA in 3.27. Decision to use CRDs instead of ConfigMap for state storage. | |
| - Slack DM with @ibuziuk (2026-02-23): PM confirmed stakeholder list for JTBD meeting — UX, Marketing, TAM, and Support contacts identified. | |
| ### Slack discussions | |
| - Slack thread in `#team-devspaces` (2026-04-20): SME confirmed backup/restore feature targets GA in 3.27. Decision to use CRDs instead of ConfigMap for state storage. | |
| - Slack DM with `@product-manager` (2026-02-23): PM confirmed stakeholder list for JTBD meeting — UX, Marketing, TAM, and Support contacts identified. |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/docs-tools/agents/requirements-analyst.md` around lines 189 - 191,
The Slack example under the "### Slack discussions" section contains a
real-person mention "@ibuziuk"; replace that with a role-based placeholder
(e.g., "@product-manager" or "@PM") so the example no longer references a real
individual, and ensure the line "- Slack DM with `@ibuziuk` (2026-02-23): PM
confirmed stakeholder list..." becomes "- Slack DM with `@product-manager`
(2026-02-23): PM confirmed stakeholder list..." (or similar role-based text) to
comply with the plugins/* documentation rule against real-person references.
|
Scraping Slack agentically is currently a grey area. May need AIA/PIA. Setting PR to draft until some resolution is codified. |
Summary
mcp__slack__*) and search Slack for SME decisions, design rationale, and technical context not captured in JIRAChanges
Test plan
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation
Chores