Local Midnight development network manager — CLI and MCP server for managing a local Midnight blockchain devnet with wallet, funding, and account management capabilities
The server defines 13 tools with reasonable naming conventions (all start with action verbs: start_, stop_, restart_, get_, check_, fund_, generate_, sync_, derive_). However, critical quality gaps emerge across descriptions, parameter schemas, and error handling. Most tool descriptions are present but minimal (20-60 chars), falling short of the 50-200 char LLM-optimized baseline. Parameter descriptions exist but are often terse (e.g., 'Pull latest Docker images before starting'). Input schemas are visible in the code but lack detail: optional parameters lack 'required' constraints, numeric parameters lack min/max bounds, and enum fields are not explicitly constrained. Output schemas are not documented, tools like network_status, get_network_logs, and check_health do not specify their return structure, forcing LLMs to reason about response format. No error handling guidance is visible, tools do not explain recovery paths or categorize failures as retryable vs fatal. The wallet and funding tools expose sensitive operations (fund_account, generate_accounts with fund=true) without visible confirmation patterns or permission gates. Overall, the server meets a minimum viable bar for tool registration but lacks the polish needed for confident production recommendation.
Check health of all services
Derive an address from a mnemonic
Fund an address with NIGHT tokens
Fund multiple accounts from an accounts.json file
Generate random test accounts
Generate a new BIP39 mnemonic
Get network service logs
Get master wallet balances
Show network status
Output schemas not documented. Tools like network_status, check_health, get_wallet_balances, and get_network_logs have no visible return type or field documentation. LLMs cannot plan downstream tool calls or extract required fields without knowing the response structure. Source: pattern:tool at arcade.dev/patterns/tool.
Parameter schemas lack constraints. Numeric parameters (lines in get_network_logs, count in generate_accounts, amount in fund_account) have no min/max bounds specified. Enum fields (service in get_network_logs, format in generate_accounts) are not declared as enums in the schema. This invites LLM hallucination of invalid values. Source: pattern:constrained-input at arcade.dev/patterns/constrained-input.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Restart the network
Start the local Midnight development network
Stop the local Midnight development network
Sync wallet with the network
Descriptions are below LLM-optimized length (median 194 chars, p10=34, p90=392). Most descriptions are 20-60 chars: 'Show network status' (19 chars), 'Get master wallet balances' (26 chars), 'Sync wallet with the network' (29 chars), 'Check health of all services' (29 chars), 'Stop the local Midnight development network' (43 chars). These are too terse to guide tool selection or explain context/prerequisites. Source: pattern:tool-description baseline.
No error handling guidance. None of the destructive tools (stop_network, restart_network, fund_account, fund_accounts_from_file, generate_accounts) document failure modes, recovery paths, or error categories (retryable vs fatal). Source: pattern:recovery-guide at arcade.dev/patterns/recovery-guide.
Sensitive operations lack confirmation pattern. fund_account, fund_accounts_from_file, and generate_accounts (with fund=true) are destructive or costly but do not implement a dry-run or explicit confirmation step. An LLM could accidentally fund wrong addresses or generate unintended accounts. Source: pattern:confirmation-request at arcade.dev/patterns/confirmation-request.
Permission gating absent. No visible checks to verify the caller has authority to stop networks, fund accounts, or generate accounts. Source: pattern:permission-gate at arcade.dev/patterns/permission-gate.
Parameter descriptions lack actionable constraints. 'Pull latest Docker images before starting' does not specify format, allowed values, or dependencies. 'Amount in NIGHT tokens (optional, default: 50000)' does not state valid range or validation rules. LLMs cannot self-correct without explicit constraint text. Source: review:param-validation-rules.
'required' field not visible in input schemas. The code shows input parameters but does not explicitly mark which are required vs optional. LLMs may omit required params (service in get_network_logs, filePath in fund_accounts_from_file, mnemonic in derive_address) if not clearly declared. Source: pattern:tool.