MCP channel plugin: intermittent 'not allowlisted' errors on tool calls despite correct access.json

Resolved 💬 3 comments Opened Apr 14, 2026 by nobonne Closed Apr 14, 2026

Description

When using the Discord channel plugin (plugin:discord@claude-plugins-official) in --channels mode, MCP tool calls (reply, fetch_messages, etc.) intermittently fail with:

channel <id> is not allowlisted — add via /discord:access

The access.json file is correctly configured and does not change during the session. The error is not caused by the Discord bot or the plugin's server.ts logic.

Reproduction steps

  1. Start Claude Code with --channels plugin:discord@claude-plugins-official
  2. Exchange several messages via Discord
  3. Perform a time-consuming internal operation (e.g., reading multiple image files with the Read tool)
  4. Attempt to call the reply tool → fails with "not allowlisted"
  5. All subsequent MCP tool calls (reply, fetch_messages, react, etc.) also fail with the same error
  6. When a new inbound Discord message arrives (triggering an MCP notification), the block is immediately lifted and tool calls succeed again

Observed pattern

  • Text-only conversations may also trigger the block, but heavy operations (multiple image reads) make it more likely
  • The block duration varies from minutes to hours
  • fetch_messages (read-only) fails with the same error, confirming it is not a Discord API rate limit
  • Rewriting access.json does not resolve the issue
  • Only an inbound MCP notification (new Discord message) restores functionality

Analysis

  • server.ts has no timeout, keepalive, or rate-limiting logic
  • fetchAllowedChannel() reads access.json on every call via loadAccess() (non-static mode) — the file contents are correct
  • MCP transport is StdioServerTransport — the issue appears to be in the Claude Code ↔ MCP stdio pipe, not in the plugin or Discord API
  • The fact that an inbound notification "wakes" the connection suggests the transport layer enters a suspended or unresponsive state during prolonged internal processing

Environment

  • Claude Code: latest (channels mode)
  • Plugin: plugin:discord@claude-plugins-official v0.0.4
  • OS: macOS (Darwin 25.4.0, Apple Silicon)
  • Running in tmux via LaunchAgent

Expected behavior

MCP tool calls should succeed regardless of internal processing time, as long as access.json is correctly configured.

Workaround

The user can send a message via Discord to trigger an inbound notification, which immediately restores the ability to make outbound tool calls.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗