MCP server for Nomad Internet ThingSpace account management, device lookup, billing status, and subscription management via Chargebee and Verizon ThingSpace APIs
ThingSpace MCP has well-structured tool definitions with clear naming (verb_noun pattern) and comprehensive descriptions (avg 150+ chars). All 15 tools have input schemas with typed parameters. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Parameter descriptions are present but lack constraint details (ranges, enums, formats). Error handling is minimal; tools do not guide recovery or categorize failures. Security is strong (credentials injected via env vars), but destructive operations (deactivate_device) lack dry-run or confirmation patterns despite requiring explicit confirm flag. Composition is good, tools are single-purpose and chainable via device IDs.
Assign a static IP from a pool to a device. Device must be active.
Change a device's service plan. Plan change takes effect on next billing cycle.
Check customer billing and subscription status before service actions. Alias for check_subscription_status. Checks if subscription is active and account is in good standing.
Check customer subscription status in Chargebee. Returns subscription state (active, past_due, etc.), plan ID, and term end date.
Deactivate a device permanently. Cannot be undone. Requires explicit confirmation.
Find a customer's device by their email address. Searches Chargebee for SIM/ICCID link, then ThingSpace for device details. Returns device state, MDN, ICCID, subscription status, and billing info in one call.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining. E.g., find_device_by_email returns device object but structure is not declared.
Parameter constraints missing. 'limit' in list_devices states 'default 100, max 10000' in description but no JSON Schema minItems/maxItems. 'deviceId' accepts IMEI/ICCID/MDN but no enum or pattern constraint. LLMs may pass invalid formats.
Error handling absent. Tools do not return structured error responses with recovery guidance. E.g., if device not found, no suggestion to call list_devices or search by email. Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get Nomad Internet ThingSpace account details, service plans, and IP pools
Get detailed device information from ThingSpace by device ID (IMEI, ICCID, or MDN). Returns state, connectivity, service plan, billing cycle, and custom fields.
Get data usage for a device in the current billing cycle. Returns total, used, and remaining data in MB.
List static IP pools available in the account. Returns pool IDs, IP ranges, and assignment status.
List available service plans in the account. Returns plan IDs, names, data limits, and pricing.
List all devices in the ThingSpace account with pagination. Returns device IDs, states, MDNs, ICCIDs, and connectivity status.
Remove static IP assignment from a device. Device reverts to dynamic IP.
Resume a suspended device. Device returns to active service.
Suspend a device (pause service without cancellation). Device can be resumed later. Requires billing check first.
Destructive operation (deactivate_device) requires confirm=true but lacks dry-run or multi-step confirmation. No MRTR (Multi Round-Trip Request) pattern to ask user before executing. Risk of accidental permanent device deactivation.
Pagination in list_devices accepts limit/offset but response structure not documented. No 'total' count or 'next_cursor' field declared. LLMs cannot determine if more results exist or how to fetch them.