MCP server wrapping the World Labs Marble API for 3D world generation and the Spark 2.0 spatial viewer
Strong overall definition quality with consistent schemas and clear descriptions. All 10 tools have proper names, descriptions, and input schemas. However, output schemas are not documented, parameter descriptions could be more specific about constraints and dependencies, and error handling guidance is minimal. The server demonstrates good naming discipline (verb_noun pattern consistently applied) and reasonable parameter specificity, but lacks the depth of constraint documentation and recovery guidance expected in production-grade tools.
Delete a world and its assets from the user's account. This action is irreversible.
Generate a 3D world from a public image URL. Returns immediately with an operation_id.
Generate a 3D world from a text description. Returns immediately with an operation_id. Use get_operation to check status, or wait_for_world for blocking poll (≤90s by default).
Generate a 3D world from a video file (local or remote URL).
Retrieve the user's account information, including credit balance and usage stats.
Poll the status of a generation operation. Returns the current state (running, completed, failed) and progress details.
Output schemas not documented. Tool descriptions mention what they return (e.g., 'Returns immediately with an operation_id', 'Returns paginated results'), but no structured JSON schema or field definitions are provided for responses. LLMs cannot reliably extract the correct fields or plan downstream tool chains without explicit output documentation.
Missing constraint documentation in parameter descriptions. Parameters like 'seed' (0 to 4294967295), 'limit' (default 20, max 100), and model selection ('marble-1.1' vs 'marble-1.1-plus') have ranges and enums but lack clear guidance in descriptions. E.g., 'seed' description says 'Optional seed for deterministic generation (0 to 4294967295)' but 'model' description doesn't explicitly list valid values, forcing LLMs to infer from context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 72 | <=2025-11-25 | v2 |
Fetch detailed metadata and file URLs for a world. Includes display_name, generation timestamp, model used, asset URLs (GLB, SplatData), and analytics.
List all generated worlds in the user's account. Returns paginated results with IDs, names, timestamps, and asset URLs.
Update metadata for a world (display_name, tags). Does not regenerate the world; only updates user-facing properties.
Blocking poll (async) for a generation operation to complete. Returns the final world_id and metadata when generation is complete.
No error handling guidance or recovery patterns. Tool descriptions do not explain what constitutes a failure (e.g., 'generation timeout', 'invalid image URL', 'insufficient credits'), what errors are retryable, or how to recover. E.g., generate_world_from_text says 'Returns immediately with an operation_id' but does not document failure modes. LLMs cannot self-correct without guidance.
Destructive tool (delete_world) lacks confirmation pattern. No dry-run or confirmation step is mentioned. The description states 'This action is irreversible' but does not offer a safe way for agents to preview what will be deleted or confirm before execution, risking accidental data loss.
Parameter interdependencies not documented. E.g., generate_world_from_image has 'is_panorama' (boolean) and 'disable_recaption' (boolean) but descriptions do not explain when these flags matter or interact. 'timeout' and 'poll_interval' in wait_for_world are related but not linked in descriptions.
Missing permission declarations. No scope annotations (e.g., 'read:worlds', 'write:worlds', 'delete:worlds') are present in tool definitions. Agents cannot be configured with least-privilege access, and audit trails lack clarity on what permissions each tool requires.
get_account_info has minimal description. At 29 characters ('Retrieve the user\'s account information, including credit balance and usage stats.'), it is borderline but provides no actionable context on when to call this tool, what 'usage stats' includes, or whether calling it is safe/read-only (assumed but not stated).
Pagination interface could be clearer. list_worlds accepts 'limit' and 'offset' but does not document max limits per request, total count in response, or next_cursor behavior. LLMs may struggle to implement efficient pagination across large world collections.