Substrate-independent embodiment layer for conversational NPCs. Intent-to-renderer dispatch across multiple bodies (robotic, VRM, humanoid).
nekomimi-mcp demonstrates solid naming conventions (verb_noun pattern) and comprehensive parameter schemas with type definitions and descriptions. However, descriptions vary significantly in quality, some tools have rich, pattern-aware docstrings (intent_tool, intent_stream_tool) while others are minimal (safety_status_tool, shutdown_tool). Output schemas are documented in docstrings but not formally exposed in the tool registration. Error handling is present but inconsistent; intent_tool provides actionable recovery guidance, while most read-only tools lack error context. Security considerations (safe_retreat_tool, shutdown_tool) are present but lack explicit permission gates or audit trail documentation. Tool composition is clean, each tool has a single responsibility, but some tools (export_recordings_tool) lack parameter constraints (format enum).
Preview how an intent maps to Boomy's specific actuators. Shows the concrete yahboom_tool calls, timing, and known limitations for a given token on the Boomy robot. ## Return Format {"token": str, "expressible": bool, "limitations": [str], "motion_plan": [...]} ## Examples check_boomy_mapping(token="nod") check_boomy_mapping(token="surprised", include_motion=True)
Export recorded intent streams to file.
Execute a sequence of intent tokens in order. [RATIONALE] Chaining multiple intents into a stream enables complex behavioural sequences (e.g. surprised -> curious -> attend) while keeping the LLM's tool call atomic. ## Return Format {"success": bool, "stream": [{"token": str, "result": {...}}], "count": int} ## Examples intent_stream(tokens=["surprised", "curious", "attending"]) intent_stream(tokens=["excited", "celebrate", "idle"], renderer="boomy")
Express an intent token through one or all registered renderers. The intent layer is substrate-independent. The LLM emits only an intent token and motion parameters. Each renderer translates to its body's native actuator commands (differential drive, gimbal, VRM bones, Stewart platform, etc.). [RATIONALE] Single portmanteau for all social expression. Keeps the tool surface compact while supporting 17+ intent tokens across 4+ renderer bodies. ## Return Format {"success": bool, "token": str, "renderer_results": [{"renderer": str, "success": bool, ...}], "timing": {...}} ## Examples intent_tool(token="surprised", speed=0.8, intensity=0.9) intent_tool(token="sulk", renderer="boomy", speed=0.2, hold_seconds=15.0)
Minimal descriptions on administrative tools (safety_status_tool, shutdown_tool, status_tool). Descriptions under 50 chars lack context for LLM selection and error recovery guidance.
export_recordings_tool accepts 'format' parameter as free-form string with no enum constraint. Should declare valid formats (json, csv, etc.) to prevent hallucinated values.
Destructive tools (shutdown_tool, safe_retreat_tool) lack confirmation/dry-run patterns. No explicit permission gates or audit trail documentation.
Output schemas documented in docstrings but not formally exposed in tool registration metadata. LLMs cannot parse return types from docstring text alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
List all registered intent tokens with default parameters and descriptions. ## Return Format {"intents": [{"token": str, "default_timing_s": float, ...}], "count": int} ## Examples list_intents()
List all registered body renderers with capabilities and status. ## Return Format {"renderers": [{"name": str, "status": str, "body_type": str, ...}], "count": int} ## Examples list_renderers()
List all recorded intent streams.
Get detailed information about a registered renderer. ## Return Format {"name": str, "body_type": str, "capabilities": [str], "status": str, "expressible_tokens": [str]} ## Examples renderer_info(name="boomy") renderer_info(name="vrm")
Replay a previously recorded intent stream.
Trigger safe retreat behavior (emergency stop with graceful shutdown).
Get the current safety subsystem status.
Display an interactive card showing all registered renderers and their capabilities.
Gracefully shutdown the nekomimi-mcp server.
Get overall server status and uptime.
Error handling inconsistent. intent_tool provides actionable recovery ('Use list_intents to see valid tokens'), but most read-only tools lack error context or guidance.