NetSuite MCP server for AI-assisted NetSuite workflows
Server has 6 tools with basic schemas and descriptions, but significant gaps prevent higher scores. Tool names follow verb_noun convention (query, get_record, list_records, create_record, update_record, delete_record), which is good. However, descriptions are minimal (10-30 chars), parameter descriptions are sparse or missing, and output schemas are not documented. The 'body' parameter in create_record and update_record is dangerously vague (type: object, description: 'Record data'). No enum constraints on recordType. Error handling and recovery guidance absent. Schemas present but incomplete, missing type constraints, ranges, and field documentation. This is typical of early-stage MCP servers.
Create a new record
Delete a record
Fetch a record by type and ID
List records of a given type
Execute a SuiteQL query
Update an existing record
Vague 'body' parameter in create_record and update_record (type: object, no field schema). LLMs cannot infer what fields are valid or required. Forces trial-and-error or requires external NetSuite documentation lookup.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., does get_record return record_id? Does list_records return total_count for pagination?). Breaks tool chaining.
recordType parameter accepts free-form strings with no enum constraint. LLMs will hallucinate invalid record types (e.g., 'customer_record' instead of 'customer'). Should enumerate valid NetSuite record types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
Descriptions are 10 - 30 characters, below the 50 - 200 char baseline for LLM-optimized tools. 'Fetch a record by type and ID' lacks context on when to use vs list_records, what fields are returned, or prerequisites.
No error handling or recovery guidance. If delete_record fails (e.g., record locked, permission denied), LLM receives no actionable next step. No distinction between retryable and fatal errors.