{"name":"io.github.tGhattas/sysdesign-board","slug":"tghattas-sysdesign-board","title":"sketch/design — System Design Interview Board","description":"Hand-drawn whiteboard for system design mock interviews; your AI watches, asks and gives feedback.","url":"https://mcp.market/server/tghattas-sysdesign-board","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":27,"stars":0,"forks":0,"downloads_week":59,"last_push_at":"2026-10-21T18:12:17.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/tGhattas/sysdesign-board","website":"https://github.com/tGhattas/sysdesign-board#readme","version":"0.1.2","remotes":[],"packages":[{"registryType":"npm","identifier":"sysdesign-board","version":"0.1.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"Local port for the whiteboard page (http://localhost:<port>). Defaults to 4321.","format":"number","default":"4321","name":"SYSDESIGN_PORT"}]}],"tools":[{"name":"annotate","description":"Pin an interviewer comment bubble on the board, pointing at a component (by id or label) or at a position. Great for \"what if this fails?\" style probes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_annotations","description":"Remove your pinned comments (all, or specific ids).","write_action":true,"price_micros":0,"input_schema":null},{"name":"draw_on_board","description":"Add components, connections, sticky notes and zones in the same sketchy style (marked as drawn by the interviewer). Use sparingly \\u2014 the candidate should drive. Component kinds: …. Connections reference a component by its ref/label (new or existing) or id. Positions are optional (auto-laid out to the right of existing content).","write_action":false,"price_micros":0,"input_schema":null},{"name":"end_interview","description":"Close the session and show a feedback card on the board. Scores are 1-5.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_board","description":"Structured description of the board: components (type, label, id, position, zone), connections (from -> to, label, dashed=async), zones, notes and text, freehand strokes, plus what changed since you last looked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_board_image","description":"A PNG picture of the whole board as the candidate sees it (handwriting, sketches, layout). Use when get_board mentions freehand strokes or you need visual context.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_transcript","description":"Full chat/voice transcript of the current session.","write_action":false,"price_micros":0,"input_schema":null},{"name":"highlight","description":"Make components glow on the candidate\\u2019s board (e.g. while asking about them). Optionally scroll/zoom their view to them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"open_board","description":"Open the sketch board in the user\\u2019s browser and return its URL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"say","description":"Send a message to the candidate. It appears in the board chat and is read aloud. Keep it short and conversational (no markdown).","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_phase","description":"Update the phase tracker the candidate sees: ${PHASES.map((p) =>","write_action":true,"price_micros":0,"input_schema":null},{"name":"start_interview","description":"Start a new interview session on the board: sets the problem statement, timer and phase, opens the board, and posts your opening message (spoken aloud to the candidate).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wait_for_candidate","description":"Block until the candidate says something (typed or by voice), the board changes and then settles, or the timeout passes. Returns what they said, what changed on the board, and interview timing. Call this in a loop between your replies.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-10-25T16:33:16.243Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-25T16:33:16.217Z","components":{"code":{"score":20,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"server/dist/index.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"sysdesign-board","version":"0.1.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-10-21T18:02:38.553Z","repositoryUrl":"git+https://github.com/tGhattas/sysdesign-board.git","weeklyDownloads":59}],"repo":{"found":true,"owner":"tGhattas","repo":"sysdesign-board","archived":false,"pushedAt":"2026-10-21T18:12:17Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/29432069?v=4","ownerCreatedAt":"2017-06-14T13:02:49Z","license":"MIT"},"icon":{"url":"https://raw.githubusercontent.com/tGhattas/sysdesign-board/main/assets/icon.png","source":"registry","width":512,"height":512},"presence":{"stars":0,"forks":0,"downloadsWeek":59,"license":"MIT","lastPushAt":"2026-10-21T18:12:17.000Z","score":27}}}},"grade_history":[],"reviews":[]}