sansan0/TrendRadar · error · InvalidParameterError

INVALID_PARAMETER

INVALID_PARAMETER

Error message

无效的渠道: {invalid}

What it means

Thrown by the notification tool when the caller passes channel names that are not keys of the internal _CHANNEL_REQUIREMENTS registry. The tool first checks config ENABLE_NOTIFICATION, then validates every entry in the `channels` argument against the known channel ids before dispatching. Any unknown string in the list aborts the whole send.

Solutions

  1. Use only channel ids listed in the error's suggestion field (it prints the full _CHANNEL_REQUIREMENTS key list)
  2. If you want every configured channel, omit the `channels` argument entirely — the tool auto-selects channels whose required config keys are all set
  3. Verify the channel's required credential keys exist in config before naming it explicitly

Example fix

# before
send_notification(content="deploy done", channels=["dingding"])

# after
send_notification(content="deploy done", channels=["dingtalk"])
# or send to all configured channels:
send_notification(content="deploy done")
Defensive patterns

Strategy: validation

Validate before calling

VALID_CHANNELS = {"wechat_work", "dingtalk", "feishu", "email"}  # keep in sync with server _CHANNEL_REQUIREMENTS

def pick_channels(requested):
    if not requested:
        return None  # let server auto-select configured channels
    bad = [c for c in requested if c not in VALID_CHANNELS]
    if bad:
        raise ValueError(f"unknown channels {bad}; valid: {sorted(VALID_CHANNELS)}")
    return requested

Type guard

def is_channel_list(v) -> bool:
    return v is None or (isinstance(v, list) and all(isinstance(c, str) for c in v))

Try / catch

try:
    send_notification(content, channels=ch)
except InvalidParameterError as e:
    if "无效的渠道" in str(e):
        # parse suggestion list from error and retry with corrected channels, or send without `channels`
        send_notification(content)
    else:
        raise

Prevention

When it happens

Trigger: Calling the send-notification MCP tool with channels=["sms"] when only ids in _CHANNEL_REQUIREMENTS exist (e.g. wechat_work, dingtalk, feishu, email); passing an empty-string or misspelled channel id; passing channels when no matching credentials are configured for that id.

Common situations: Typos in channel names ("dingding" vs "dingtalk"); assuming a channel is supported because credentials are configured; channel sets differing between deployments/versions of the server.

Related errors


AI-assisted analysis of sansan0/TrendRadar@8ee26026ba (2026-08-15). Data as JSON: /api/errors/a6536dda0db1bd30. Report an issue: GitHub.

Appendix: source

Thrown at mcp_server/tools/notification.py:1149

                "error": {"code": "EMPTY_MESSAGE", "message": "消息内容不能为空"},
            }

        try:
            config = self._load_merged_config()

            if not config.get("ENABLE_NOTIFICATION", True):
                return {
                    "success": False,
                    "error": {"code": "NOTIFICATION_DISABLED", "message": "通知功能已禁用(notification.enabled = false)"},
                }

            # 确定目标渠道
            all_channel_ids = list(_CHANNEL_REQUIREMENTS.keys())
            if channels:
                # 验证渠道名称
                invalid = [ch for ch in channels if ch not in all_channel_ids]
                if invalid:
                    raise InvalidParameterError(
                        f"无效的渠道: {invalid}",
                        suggestion=f"支持的渠道: {all_channel_ids}"
                    )
                target_channels = channels
            else:
                # 发送到所有已配置渠道
                target_channels = [
                    ch_id for ch_id, keys in _CHANNEL_REQUIREMENTS.items()
                    if all(config.get(k) for k in keys)
                ]

            if not target_channels:
                return {
                    "success": False,
                    "error": {
                        "code": "NO_CHANNELS",
                        "message": "没有已配置的目标渠道",
                        "suggestion": "请在 config.yaml 或 .env 中配置至少一个通知渠道",

View on GitHub (pinned to 8ee26026ba)