/doctor shows false-positive "Missing environment variables" warning for Slack MCP on every startup
Summary
Every TARS user may get this warning on startup / when running /doctor:
[Warning] [slack] mcpServers.slack: Missing environment variables:
SLACK_MCP_ADD_MESSAGE_TOOL, SLACK_MCP_CUSTOM_TLS
It looks like a broken config, but it's a false positive — the Slack MCP server connects and all read tools (conversations_history, conversations_replies, conversations_search_messages, channels_list) work fine.
Root cause
The two variables are referenced in .mcp.json's slack env block:
"SLACK_MCP_ADD_MESSAGE_TOOL": "${SLACK_MCP_ADD_MESSAGE_TOOL}",
"SLACK_MCP_CUSTOM_TLS": "${SLACK_MCP_CUSTOM_TLS}"
…but scripts/setup-env.sh (line 652) intentionally never writes them:
# NOTE: SLACK_MCP_CUSTOM_TLS and SLACK_MCP_ADD_MESSAGE_TOOL are intentionally
# omitted. The Slack MCP server treats any non-empty string (including "false")
# as truthy. Leave them unset to get the correct default behavior.
So .mcp.json references vars that setup deliberately leaves unset → the warning is guaranteed for every user, for an intentional design choice. Claude Code's warning is technically accurate; the inconsistency is in the TARS repo.
Impact
Cosmetic only. Reads work; the unset SLACK_MCP_ADD_MESSAGE_TOOL simply keeps message posting disabled (the intended safe default). But the warning reads like a setup failure and prompts confused "is my Slack broken?" questions.
Suggested fix (pick one)
- Drop the two keys from .mcp.json's slack env block — the bare -e VAR docker pass-through args already cover the optional case, so behavior is unchanged.
- Have setup-env.sh write them as empty (export SLACK_MCP_ADD_MESSAGE_TOOL=), which clears the warning while preserving default behavior.
- At minimum, document it as expected in the Troubleshooting section of CLAUDE.md.
Option 1 is cleanest — removes the noise at the source without changing any runtime behavior.