{"ok":true,"site":{"host":"nexus-canvas-pink.vercel.app","url":"https://nexus-canvas-pink.vercel.app/","type":"live","desc":"A system-design canvas that ChatGPT can draw on, audit, stress-test and compile to infrastructure code via WebMCP.","tools":[{"name":"get_architecture","kind":"answer","impl":"imperative","description":"Read the full current architecture on the canvas: components, connections, what the user has selected, last audit and load results, and which contextual tools are available. Call this first before modifying anything.","annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"verbose":{"type":"boolean","description":"Include latencyMs, notes and positions."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_component","kind":"act","impl":"imperative","description":"Add one infrastructure component (service, database, cache, queue, load balancer, etc.) to the canvas, optionally connecting it to existing components. Stateful types (database, cache) default to 1 replica; pass replicas>=2 for redundancy. Returns its id.","annotations":{"idempotentHint":false},"inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"client, dns, cdn, load_balancer, api_gateway, auth, service, worker, queue, cache, database, object_storage, search, external_api, monitoring. Synonyms like postgres, redis, kafka, s3 are accepted."},"label":{"type":"string"},"replicas":{"type":"integer","minimum":1,"maximum":64},"capacityRps":{"type":"number","description":"Requests per second one replica can serve."},"latencyMs":{"type":"number"},"zone":{"type":"string"},"tech":{"type":"string","description":"e.g. postgres, redis, kafka, node, go"},"notes":{"type":"string"},"connectFrom":{"type":"array","items":{"type":"string"},"description":"Components (id or label) that send traffic to the new one."},"connectTo":{"type":"array","items":{"type":"string"},"description":"Components (id or label) the new one sends traffic to."}},"required":["type"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_component","kind":"act","impl":"imperative","description":"Change a component's label, replicas, capacity, latency, zone, notes, tech, or status. Set status to \"down\" to simulate an outage, \"healthy\" to recover.","annotations":{"idempotentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Component id or label."},"label":{"type":"string"},"replicas":{"type":"integer","minimum":1,"maximum":64},"capacityRps":{"type":"number"},"latencyMs":{"type":"number"},"zone":{"type":"string"},"tech":{"type":"string"},"notes":{"type":"string"},"status":{"type":"string","enum":["healthy","degraded","down"]}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_component","kind":"act","impl":"imperative","description":"Delete a component and all of its connections.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"connect_components","kind":"act","impl":"imperative","description":"Create or update a directed connection (traffic flow) from one component to another. Weight is the share of traffic (routers split it; services fan out that fraction).","annotations":{"idempotentHint":true},"inputSchema":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"protocol":{"type":"string","enum":["http","https","grpc","websocket","tcp","amqp","kafka","redis","sql","s3","dns"]},"label":{"type":"string"},"weight":{"type":"number","minimum":0,"maximum":1},"latencyMs":{"type":"number"}},"required":["source","target"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"disconnect_components","kind":"act","impl":"imperative","description":"Remove a connection, by edge id or by source and target.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"edgeId":{"type":"string"},"source":{"type":"string"},"target":{"type":"string"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_blueprint","kind":"act","impl":"imperative","description":"Create many components and connections in one call, then auto-layout. Use this to draw a whole system at once. Edges may reference nodes by id or label. Set replace=true to start from an empty canvas.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"replace":{"type":"boolean","description":"Clear the canvas first (asks the user to confirm if it is not empty)."},"layout":{"type":"string","enum":["LR","TB"]},"nodes":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"label":{"type":"string"},"replicas":{"type":"integer"},"capacityRps":{"type":"number"},"latencyMs":{"type":"number"},"zone":{"type":"string"},"tech":{"type":"string"},"notes":{"type":"string"}},"required":["type","label"],"additionalProperties":false}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"protocol":{"type":"string"},"weight":{"type":"number"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":false}}},"required":["nodes"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"auto_layout","kind":"act","impl":"imperative","description":"Re-arrange the canvas into a clean left-to-right (LR) or top-to-bottom (TB) flow.","annotations":{"idempotentHint":true},"inputSchema":{"type":"object","properties":{"direction":{"type":"string","enum":["LR","TB"]}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"audit_architecture","kind":"act","impl":"imperative","description":"Analyse the design for single points of failure, missing caches or load balancers, insecure protocols, orphans, outages and cycles. Returns a score, grade and prioritised findings with suggested fixes.","annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"simulate_load","kind":"act","impl":"imperative","description":"Run the capacity model for N concurrent users, optionally with some components failed, and report bottlenecks, error rate and latency. Results are drawn on the canvas.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"users":{"type":"integer","minimum":1,"maximum":10000000},"requestsPerUserPerSec":{"type":"number","minimum":0.001,"maximum":100,"description":"Default 0.2."},"failedComponentIds":{"type":"array","items":{"type":"string"},"description":"Treat these as down for this run only."},"mode":{"type":"string","enum":["fast","des"],"description":"Simulation mode: fast (static flow) or des (discrete-event simulation). Default fast."},"seed":{"type":"integer","description":"Deterministic PRNG seed for DES mode."}},"required":["users"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_infra_code","kind":"act","impl":"imperative","description":"Compile the canvas into deployable infrastructure code (docker_compose, or kubernetes if available) and show it in the code panel.","annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["docker_compose","kubernetes"]}},"required":["format"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_template","kind":"act","impl":"imperative","description":"Replace the canvas with a starter architecture: ecommerce, chat, ml_inference, or blank. Asks the user to confirm if the canvas is not empty.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","enum":["ecommerce","chat","ml_inference","blank"]}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"highlight_components","kind":"act","impl":"imperative","description":"Visually pulse specific components and show a short message to the user, to point at something while explaining. Purely visual, changes nothing.","annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1},"message":{"type":"string","maxLength":200},"level":{"type":"string","enum":["info","warn","danger"]}},"required":["ids"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_canvas","kind":"act","impl":"imperative","description":"Remove everything from the canvas after the user confirms in the page. Requires confirm=true.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"confirm":{"type":"boolean","const":true}},"required":["confirm"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","favicon":"/favicons/nexus-canvas-pink.vercel.app.svg","apiSurface":"spec","toolCount":14}}