Model Context Protocol server for ICTBroadcast. Lets AI assistants monitor outbound call-center campaigns and, with writes enabled, start and stop them.
Strong naming conventions (verb_noun pattern throughout), clear descriptions for tools and most parameters, and explicit Zod schemas. Tool annotations (readOnlyHint, openWorldHint) demonstrate spec awareness. However, some parameter descriptions lack detail about format/constraints, and output schemas are not documented in the code. The server excels at describing WHAT each tool does and WHEN to use it, meeting the 10-1024 character guideline for tool descriptions (range: 95-237 chars). All 6 tools have explicit descriptions. Parameter count is low (1-2 per tool), reducing cognitive load. Error handling via toolError() is present but responses are not shown, cannot verify if errors include actionable recovery guidance or constraint violations.
Per-call results for a campaign (contact, response, answering-machine detection, DNC), optionally filtered by call status.
Live status of a campaign by id (for example running or stopped). Poll this while a campaign runs.
Totals for a campaign: answered, failed, human vs machine and so on. Optionally scope to one agent/user id.
List the outbound campaigns on the ICTBroadcast server (id and name of each). Start here to find a campaign id.
Start (launch) a campaign by id. THIS BEGINS LIVE OUTBOUND CALLING and can cost real money. Use ictbroadcast_stop_campaign to halt it.
Stop a running campaign by id.
Output schemas not documented in code. Tools return json(await client.*()) but response structure is invisible, LLMs cannot plan downstream calls or extract specific fields without trial.
Parameter 'status' in ictbroadcast_campaign_result lacks format/enum constraints. Description says 'Optional call-status filter' but does not specify valid values (answered, failed, no_answer, etc.). LLMs may hallucinate invalid filter values.
toolError() implementation not visible. Cannot verify if error responses include recovery guidance (e.g., 'Call list_campaigns first to find a valid campaign_id') or categorization (retryable vs user-fixable). Tools return errors but guidance is unknown.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
ictbroadcast_stop_campaign has minimal description ('Stop a running campaign by id.'), 35 characters, below the 50-character actionable guidance threshold. Should mention dependencies (e.g., 'Use this to halt a running campaign. Get campaign_id from ictbroadcast_list_campaigns') and clarify idempotency.
No documented pagination or result limits visible in code for ictbroadcast_list_campaigns or ictbroadcast_campaign_result. If campaigns can number in the hundreds, returning all at once risks context window exhaustion. Should clarify limit and offer cursor/page parameters.