{"ok":true,"site":{"host":"webmcp-ht.vercel.app","url":"https://webmcp-ht.vercel.app/","type":"live","desc":"A visual studio where you and an agent share one canvas to learn system design.","tools":[{"name":"get_architecture","kind":"answer","impl":"imperative","description":"Read the current system-design graph: challenge, nodes (with ids), edges, call trees, and last simulation. Use these ids with other tools.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_catalog","kind":"answer","impl":"imperative","description":"List block types you can add, their default capacity, and connection rules.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_selected_node","kind":"answer","impl":"imperative","description":"Return the block the human currently has selected on the canvas, what that kind of block means, its connection rules, neighbors, and last-run stats for it. Call this when they ask about the selected node.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_robustness","kind":"answer","impl":"imperative","description":"Score how robust the last simulation is (0-100) and, if a previous run exists, whether the latest change made the system better or worse.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_simulation","kind":"answer","impl":"imperative","description":"Return the last simulation: utilization, p99, error rate, bottlenecks, SLO pass/fail, robustness, and delta vs the previous run.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_challenges","kind":"answer","impl":"imperative","description":"List the four system-design use cases the user can play.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_challenge","kind":"act","impl":"imperative","description":"Reset the canvas to a use case starter sketch. Ids: url-shortener, news-feed, realtime-chat, video-streaming.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string","enum":["url-shortener","news-feed","realtime-chat","video-streaming"]}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_node","kind":"act","impl":"imperative","description":"Add a block to the canvas. Optional id (stable name), label, and nearId to place it beside an existing block.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["client","dns","waf","cdn","load_balancer","api_gateway","rate_limiter","auth","websocket_gateway","api","search","ranker","transcoder","cache","database","read_replica","object_store","queue","pubsub","worker","stream_processor","notification"]},"id":{"type":"string","description":"Optional stable id, e.g. cache-1"},"label":{"type":"string"},"nearId":{"type":"string","description":"Place to the right of this node"},"replicas":{"type":"number"}},"required":["kind"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"connect","kind":"act","impl":"imperative","description":"Connect two blocks left-to-right. Incoming edges to a queue default to async (off the p99 path).","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"protocol":{"type":"string","enum":["sync","async"]}},"required":["from","to"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"disconnect","kind":"act","impl":"imperative","description":"Remove the edge between two blocks.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_node_props","kind":"act","impl":"imperative","description":"Change replicas, per-replica RPS capacity, cache hit rate, or lock a node.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string"},"replicas":{"type":"number"},"rpsCapacity":{"type":"number"},"hitRate":{"type":"number"},"label":{"type":"string"},"locked":{"type":"boolean"}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"annotate_node","kind":"act","impl":"imperative","description":"Pin a finding on a block so the human can see it on the graph.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string"},"severity":{"type":"string","enum":["info","warn","error"]},"message":{"type":"string"}},"required":["id","message"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_simulation","kind":"act","impl":"imperative","description":"Push traffic through the graph, animate packets, color bottlenecks, and evaluate the challenge SLO.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"ingressRps":{"type":"number","description":"Override challenge RPS for a what-if."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_node","kind":"act","impl":"imperative","description":"Remove a block and its edges. Asks the human to confirm.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"repair_graph","kind":"act","impl":"imperative","description":"Drop dangling edges and remove broken blocks (unknown kinds or corrupt data) so the canvas can run again.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_plan","kind":"act","impl":"imperative","description":"Apply a batch of ops in order: add_node, connect, disconnect, set_node_props, remove_node. Confirm once with the human. Prefer add_node with explicit ids so later ops can reference them.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"summary":{"type":"string"},"ops":{"type":"array","items":{"type":"object"}}},"required":["ops"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Health & Education","favicon":"/favicons/webmcp-ht.vercel.app.ico","apiSurface":"spec","toolCount":16}}