{"name":"io.github.let-sunny/canicode","slug":"let-sunny-canicode","title":null,"description":"Analyze Figma designs for dev & AI readiness. 39 rules, scoring, HTML reports.","url":"https://mcp.market/server/let-sunny-canicode","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":20,"stars":10,"forks":1,"downloads_week":null,"last_push_at":"2026-07-05T03:38:31.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/let-sunny/canicode","website":null,"version":"0.5.2","remotes":[],"packages":[{"registryType":"npm","identifier":"canicode","version":"0.5.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"Figma personal access token for REST API access and comment posting","format":"string","isSecret":true,"name":"FIGMA_TOKEN"}]}],"tools":[{"name":"analyze","description":"Analyze a Figma design for development-friendliness and AI-friendliness. Two ways to provide design data: 1. designData \\u2014 Pass Figma node data directly (from Figma MCP get_metadata). Recommended when using Figma MCP. 2. input \\u2014 Figma URL (fetches via REST API, requires FIGMA_TOKEN). Typical flow with Figma MCP: Step 1: Call Figma MCP get_metadata to get the node tree Step 2: Pass the res","write_action":false,"price_micros":0,"input_schema":null},{"name":"docs","description":"Get the customization guide for CanICode. Returns documentation on: - Config overrides (excludeNodeNames, excludeNodeTypes, gridBase, colorTolerance, per-rule score/severity/enabled) - Custom rules (how to add project-specific checks) - All 39 rule IDs with default scores and severity - Example configs (strict, relaxed, mobile-first) Use this when the user asks about customization, configuration, ","write_action":false,"price_micros":0,"input_schema":null},{"name":"list-rules","description":"List all available analysis rules with their current configuration","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-27T23:35:49.331Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-09-27T23:35:49.324Z","components":{"code":{"score":13,"max":25,"notes":["7 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":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 85 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"dist/cli/index.js: …port('child_process'); const result = execSync( `claude --print \"Use the mcp__figma__get_metadata tool with fileKey=\\\\\"${fileKey}\\\\\" and nodeId=\\\\\"${nodeId.replace(/-/g, \":\")}\\\\\" \\u2014 ret…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"canicode","version":"0.5.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-03-21T11:26:28.586Z","repositoryUrl":"git+https://github.com/let-sunny/canicode.git"}],"repo":{"found":true,"owner":"let-sunny","repo":"canicode","archived":false,"pushedAt":"2026-07-05T03:38:31Z","stars":10,"forks":1,"openIssues":13,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/32428373?v=4","ownerCreatedAt":"2017-10-01T07:07:08Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":10,"forks":1,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-07-05T03:38:31.000Z","score":20}}}},"grade_history":[],"reviews":[]}