{"name":"io.github.donggyun112/codecanvas","slug":"donggyun112-codecanvas","title":null,"description":"Python code intelligence for coding agents: call paths, control flow, and change impact.","url":"https://mcp.market/server/donggyun112-codecanvas","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":31,"stars":2,"forks":0,"downloads_week":176,"last_push_at":"2026-09-12T10:26:12.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/donggyun112/codecanvas","website":null,"version":"0.1.20","remotes":[],"packages":[{"registryType":"pypi","identifier":"codecanvas-mcp","version":"0.1.20","runtimeHint":"uvx","transport":{"type":"stdio"}}],"tools":[{"name":"analyze_impact","description":"Assess the blast radius of a change — given a diff or git ref, list the changed functions and which entry points/public surfaces they affect (HTTP routes, scripts, or public function fallbacks). Reach for this when reviewing a PR or before merging, to see what a set of edits could break downstream.","write_action":false,"price_micros":0,"input_schema":null},{"name":"call_tree","description":"Trace everything a function reaches downstream — the forward transitive call tree, N hops deep, in one call instead of hopping node-by-node. Reach for this to see what a function ends up doing and which side effects it triggers transitively. The complement of `who_calls`, which walks the opposite direction (upstream, who calls it).","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_symbols","description":"Find project functions, methods, and classes by name, qualified name, scope, acronym, or docstring meaning. Results explain matched tokens, character spans, and likely symbol role. Continue with `next_cursor`; choose `search_mode` name, semantic, or hybrid.","write_action":false,"price_micros":0,"input_schema":null},{"name":"function_flow","description":"Understand how a function works internally without reading the full source. `flow` is a structured branch tree with explicit `subject`, `scope`, `condition`, and `nested_subjects`; `outline` is a compatibility rendering. For exact return/raise guards, use `reaching_conditions`. `function` accepts a qualified name, bare name, file:line, or scope-skipping suffix.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_entrypoints","description":"Map where a codebase starts — list its API/HTTP routes, CLI scripts, public library exports, and entry-point functions. Reach for this first to get the lay of an unfamiliar project: what endpoints exist, which handler serves each route, where execution begins.","write_action":false,"price_micros":0,"input_schema":null},{"name":"logic_flow","description":"Start here to understand an unfamiliar function's logic in one compact call. Combines symbol resolution, signature and summary, branch outline, guarded outcomes, downstream project calls, effects, and repository-relative citation locations. Prefer this over separately calling `find_symbols`, `what_does`, `function_flow`, `reaching_conditions`, and `call_tree`; use those only when this response is","write_action":false,"price_micros":0,"input_schema":null},{"name":"project_status","description":"Inspect the active analysis root, Python file count, disk-cache state, and nested Python project roots. Use this when results look polluted or incomplete and you may need a narrower `project_path`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reaching_conditions","description":"Find out under what conditions a function reaches each of its returns and raises — the guard/path conditions (the enclosing if/elif/else, except, and loop tests) leading to each outcome. Reach for this when hunting a bug in branching logic or asking \"why does this hit the error path?\": it surfaces error-path vs success-path asymmetries (e.g. a success response returned from an except handler), plu","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_state_transition","description":"Execute focused state-transition repro cases in isolated processes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"validate_state_schema","description":"Check a function's state dict/object usage against expected fields.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_claim","description":"Verify a qualified reachability claim before summarizing it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"what_does","description":"Get a quick summary of what a function does without reading its source — its signature, docstring, side effects (whether it touches the database or makes HTTP calls), the exceptions it can raise, and a risk rating. Use it to triage an unfamiliar function before deciding whether to dig into `function_flow` or the full source. `function` = qualified name, bare name, file:line, or a scope-skipping su","write_action":false,"price_micros":0,"input_schema":null},{"name":"who_calls","description":"Find the callers of a function — who calls it, its upstream usages and references, the reverse call graph, and what would break if you change its signature. Complements `call_tree`, which walks the opposite direction (downstream, what the function reaches).","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-19T21:08:09.674Z","report":{"scannerVersion":"0.1.8","scannedAt":"2026-09-19T21:08:09.644Z","components":{"code":{"score":25,"max":25,"notes":["32 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 7 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"codecanvas-mcp","version":"0.1.20","found":true,"license":"MIT","dependencyCount":11,"publishedAt":"2026-09-12T10:29:34.791494Z","repositoryUrl":"https://github.com/donggyun112/codecanvas"}],"repo":{"found":true,"owner":"donggyun112","repo":"codecanvas","archived":false,"pushedAt":"2026-09-12T10:26:12Z","stars":2,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/102022855?v=4","ownerCreatedAt":"2022-03-21T08:59:35Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":2,"forks":0,"downloadsWeek":176,"license":"MIT","lastPushAt":"2026-09-12T10:26:12.000Z","score":31}}}},"grade_history":[{"kind":"restore","fromGrade":"B","toGrade":"A","reason":"score 92","createdAt":"2026-09-19T21:08:10.337Z"}],"reviews":[]}