crazytel
# crazytel (Agent Plugin)
Portable [Agent Plugin](https://agent-plugins.org/) wrapping Crazytel Core telephony + SMS Center via a zero-dependency Node MCP server.
## Layout
```text
crazytel-plugin/
├── plugin.json # manifest + CRAZYTEL_API_KEY variable
├── mcp.json # stdio MCP server
├── package.json # no runtime deps (Node 18+)
├── README.md
├── server/index.js # hand-rolled JSON-RPC MCP over stdio
├── skills/crazytel/SKILL.md
└── scripts/prove.mjs # initialize + tools/list + missing-key tool call
```
## Setup
1. Set plugin variable / env `CRAZYTEL_API_KEY` (sent as `x-crazytel-api-key`).
2. Load this directory as an Agent Plugin (not `.cursor-plugin/`).
3. Clients expand `${PLUGIN_ROOT}` and map `CRAZYTEL_API_KEY` into the MCP process env per `mcp.json`.
## Run the server locally
```bash
export CRAZYTEL_API_KEY=your-key # optional for tools/list
node server/index.js
```
Newline-delimited JSON-RPC on stdin/stdout.
## Prove without a key
```bash
node scripts/prove.mjs
```
Expects `tools/list` to succeed and a sample `tools/call` to fail with a clear missing-key error.
## Scope (v0.1)
Included: balance, DIDs, purchase helpers, SIP trunks, verified CLI, SMS v2 send/bulk/schedule, SMS Center conversations/contacts/lists/opt-out/stats.
Skipped: Premium Fax, Hybrid SIPREC, CrazyPBX call recordings, deprecated v1 SMS send and v1 CDRs.
## Install
1. Set env / plugin variable `CRAZYTEL_API_KEY` (header `x-crazytel-api-key`).
2. From [cursor.directory](https://cursor.directory) (community listing) or clone this repo into Cursor as a plugin.
3. Grok Bot loads plugins from the Cursor dashboard/marketplace only — local `~/.cursor/plugins/local` is IDE-only.
## Publish
Listed on [cursor.directory](https://cursor.directory) (community). Not submitted to Cursor Marketplace.
TDQS
Scored across 42 tools
Core CRUD areas are separated by resource (contacts, contact lists, DIDs, SIP trunks, opt-outs, SMS), and descriptions clarify boundaries. However, list_dids / list_sms_dids and list_messages / list_conversations / get_conversation overlap enough that an agent could initially confuse them.
The majority follow a clean list/get/create/update/delete_<resource> pattern with consistent resource nouns. Minor exceptions like add_contacts_to_list, check_opt_out, and bulk_send_sms break the pattern but remain readable.
42 tools is well beyond the range where an agent can easily keep the full surface in context, and many are close list/get variants (e.g., three SMS stats tools, two DID list tools). It would be more coherent split into SMS/DID/contacts sub-servers.
The core CRUD for contacts, contact lists, DIDs, and SIP trunks is covered, plus SMS send/bulk/schedule and stats. But opt-out lists/entries have create/list/check without delete/update, scheduled messages cannot be canceled, and contact lists have add but no remove member operation.