{"name":"io.github.ToremLabs/proof","slug":"toremlabs-proof","title":null,"description":"Govern your AI coding agent: frame the work, review the changes, keep a signed decision record.","url":"https://mcp.market/server/toremlabs-proof","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":35,"last_push_at":"2026-09-04T06:59:05.000Z","license":"AGPL-3.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/ToremLabs/proof-mcp","website":null,"version":"1.0.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@toremlabs/proof-mcp","version":"1.0.0","transport":{"type":"stdio"}}],"tools":[{"name":"add_challenge","description":"Record an objection (red-team challenge) against a concept, with a severity (low/medium/high) and optional one-line verdict. New objections start UNADDRESSED; every objection must be addressed before the proof gate clears. Appends to any existing challenge on the concept.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_concept","description":"Create a new concept (Node). Set parentId whenever you know where this belongs: it becomes a CHILD of that concept and a partition edge is auto-created. Omitting parentId leaves the concept ROOTLESS (no parent at all, not the project root): rootless concepts pile up as an unreadable flat cloud, so only omit it when this genuinely is a new top-level idea. Use find_orphans + set_parent afterward to ","write_action":true,"price_micros":0,"input_schema":null},{"name":"add_evidence","description":"Attach a piece of evidence to a concept: 'support' (FOR the idea) or 'counter' (AGAINST it), with the claim text and an optional source citation. Evidence is one leg of the proof gate — a concept needs at least one supporting piece to be provable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_kref","description":"Convenience: create a k-ref (knowledge reference) edge from fromId → toId. Equivalent to link_concepts with kind=k-ref.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_to_idea","description":"Add a single concept to an existing Idea (idempotent).","write_action":false,"price_micros":0,"input_schema":null},{"name":"archive_concept","description":"Archive a concept (status=archived). Reversible via unarchive_concept.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bulk_add_concepts","description":"Create many concepts in a single atomic transaction. `items` is an array; each item carries label / description? / parentId? / projectId? / sheet? / tags?. Set parentId on every item you can: an item with no parentId lands ROOTLESS, and a bulk run that leaves many concepts rootless turns the canvas into an unreadable flat cloud. project_id is resolved per-item (explicit > inherited from parent > w","write_action":true,"price_micros":0,"input_schema":null},{"name":"claim_handoff","description":"Claim a pending handoff by its run id (from list_pending_handoffs). Atomically takes ownership: the run transitions to 'running' and is attributed to this device, so it can't be double-claimed. Returns the brief to work from. After you finish, close the run with update_agent_run (status + summary + pushedRef/prUrl).","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_idea","description":"Create a new Idea (a named grouping of concepts) with an optional color and optional starting node membership.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_project","description":"Create a new Project (problem-with-direction) with a name and brief. Optional `direction`. When you add concepts under this project, set parentId on each one so it joins the semantic tree: a project full of rootless concepts reads as an unreadable flat cloud. Use find_orphans + set_parent to repair one that already has rootless concepts.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_idea","description":"Delete an Idea. Membership rows cascade via FK; the underlying concepts are untouched.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_project","description":"Delete a project. By default its concepts are LEFT behind as orphans (find them later with find_orphans). Pass deleteNodes:true to also hard-delete every concept in the project (each cascades its subtree) so no orphans are created.","write_action":true,"price_micros":0,"input_schema":null},{"name":"expand_concept","description":"Recursive Branch — expand a concept by `breadth` children at each of `depth` levels (depth*breadth ≤ 60). Commits each level immediately so the webapp shows partial results as the run progresses. Optionally takes an `angle` hint that biases the underlying EXPLORE operator. Best when the anchor has few or no children yet; on a dense subtree consider `run_operator(family=\"explore\")` so the operator ","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_concepts","description":"Find concepts by label/substring match. Returns up to k hits, each with id, label, status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_orphans","description":"Surface concepts no normal traversal reaches, scoped to your workspace: 'projectless' (in no project — typically left behind by delete_project) and 'danglingParent' (parent_id points at a deleted node). Read-only. Clean up with remove_concepts (delete) or set_parent (re-home).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_agent_run","description":"Fetch one agent-run record by id (intent, status, summary, error, start/end times). Use to read the brief you were given or to confirm a status update landed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_concept","description":"One concept by id, optionally with its ancestry (parent chain), direct children, and idea memberships.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_concept_proof","description":"Read one concept's full proving state: its evidence, the challenge objections, which project criteria it meets, any recorded proof, and the computed proof gate (what still blocks validation).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_project_graph","description":"Every node + edge inside one project. Returns a graph the agent can reason over end-to-end. Use for project-wide questions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_run","description":"Fetch an async operator run by its runId. Returns { status: \"running\" | \"done\" | \"error\" }; when \"done\", the `result` field holds the operator output (candidates / committedIds). Waits up to ~8s for completion before returning, so a simple poll loop converges fast. run_operator / run_operator_and_commit / expand_concept hand back a runId whenever their work exceeds the ~8s fast-path window.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_subtree","description":"A node and its descendants up to a given depth. Pass the concept as `id` (or `rootId`). Use when the user asks \"tell me about everything under X\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_verification_record","description":"Fetch one full verification record (its per-file outcomes: cleared / approved / flagged, with reasons and notes). Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_workspace_summary","description":"Counts of nodes / edges / projects / ideas + a one-line overview of each project and idea. Always start here when you don't know what's in the workspace.","write_action":false,"price_micros":0,"input_schema":null},{"name":"link_concepts","description":"Create an edge between two concepts. kind is one of: 'k-ref' (knowledge reference), 'derived-from' (provenance link), 'semantic-adjacency' (sibling kinship). Partition (parent/child) edges are managed via add_concept / set_parent.","write_action":true,"price_micros":0,"input_schema":null},{"name":"list_agent_runs","description":"List agent runs newest-first, optionally narrowed to one project. Use to see recent runs and their outcomes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_concepts","description":"List concepts in the workspace or one project. Returns id / label / status / parentId / tags up to `limit` entries (default 500). Use BEFORE making changes to learn what already exists.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_edges","description":"List every edge in the workspace (or restricted to a project). Filter by kind: partition / k-ref / semantic-adjacency / derived-from / imported-from.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_pending_handoffs","description":"List PENDING handoffs (queued agent runs) the user sent from Proof for THIS device to pick up. Each entry carries the full build brief (problem, concepts to build, acceptance criteria, things to avoid) so you can start immediately. Call this at the start of a session — if a handoff is waiting, claim it with claim_handoff and begin. Includes untargeted handoffs by default.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_projects","description":"Every project in the workspace with brief, direction, lifecycle, and node count. Use this to figure out which project the user is asking about.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_proofs","description":"List the proving snapshot for every concept that has any proving state — across the workspace, or restricted to one project (which also reports criteria coverage). Each entry shows support/counter counts, challenge progress, criteria met, and whether the gate is ready.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_recent_decisions","description":"Nodes the user has explicitly resolved (validated, starred, or archived) recently. Use to surface \"what did we conclude last week\" without a full scan.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sheets","description":"List one project's sheets (canvas pages) — id, name, and order, excluding deleted sheets. Nodes with no sheet render on the project's default sheet. Pass a listed name or id as `sheet` to add_concept / bulk_add_concepts to place new concepts on a specific sheet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_verification_records","description":"List the SIGNED verification records (human code-review sign-offs) across the workspace or one project, newest-first. Read-only: this is the human's accountable record — the agent inspects it, it cannot create one.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recolor_idea","description":"Change an Idea's color (any CSS color string).","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_proof","description":"Record a concept's proof and promote it to validated. Snapshots the proof gate (support, criteria met, objections addressed) into a durable proof record. Refuses when the gate isn't clear and returns the blockers; pass force:true to record anyway. The signer is the authenticated user.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_concept","description":"Hard-delete a concept and its descendants (walks the subtree via parent_id AND partition edges). Edges and project/idea memberships cascade via FK. Refuses to delete a project root node. For many at once, use remove_concepts.","write_action":true,"price_micros":0,"input_schema":null},{"name":"remove_concepts","description":"Bulk hard-delete: delete many concepts in one call (each cascades its own subtree). Returns per-id results. Ids already swept up in another id's cascade come back ok:false (not-found) — expected, not fatal. Pair with find_orphans for cleanup.","write_action":true,"price_micros":0,"input_schema":null},{"name":"rename_idea","description":"Rename an Idea.","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_operator","description":"Run an ASIT / TRIZ / Contradiction / Free / Combine / Explore operator against one concept (the anchor). Returns CANDIDATE concepts WITHOUT committing them — call `bulk_add_concepts` (or `run_operator_and_commit`) to persist. Use this when you want the agent to vet the candidates before writing. The anchor must already live in a project; the operator pulls in ancestry + validated knowledge in the ","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_operator_and_commit","description":"Same as `run_operator`, but immediately writes every top-level candidate as a child of the anchor with a partition edge and a provenance row stamped origin='mcp'. Use when the agent is confident the candidates should land directly on the canvas (e.g. inside an autonomous expand loop). Children-of-children proposed in `partitions[].children` are NOT auto-committed — request them via a separate run.","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_concepts","description":"Substring search across concept labels, descriptions, partition attributes, rationale, and tags. Use this when the user mentions a concept by name and you don't have its id. (Semantic search is a Phase 19.5 enhancement.)","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_idea_members","description":"Replace an Idea's full membership with `nodeIds`. Reconciles the junction table: inserts missing pairs, deletes pairs no longer in the set. Returns added / removed counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_parent","description":"Re-parent an existing concept: nodeId's parent becomes newParentId (or detached when null). Updates BOTH node.parent_id AND the partition edge so the canvas tree stays in sync.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_project_criteria","description":"Replace a project's success criteria with `criteria` (plain sentences) — the gate record_proof checks before a concept can be validated. Merges by text: a sentence already on the project keeps its existing criterion id (so concepts that meet it stay met), new sentences mint new criteria, and sentences you leave out are removed. Returns the resulting list.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_project_identity","description":"Set a project's IDENTITY — one plain sentence stating what the project fundamentally does for its user — and optionally the design `dimensions` its concept decomposition runs along. The webapp's identity-first analysis writes these too, so only set them when asked or when they are empty (check get_project_graph).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_standing","description":"Set a concept's STANDING — how known / proven the idea is in the wider world. `standing` ∈ 'novel' | 'emerging' | 'established' | 'unknown'. `rationale` is a one-sentence justification (saved as `standing_rationale`). Use this when classifying / judging novelty.","write_action":false,"price_micros":0,"input_schema":null},{"name":"star_concept","description":"Toggle the starred flag on a concept (user-favorite marker).","write_action":false,"price_micros":0,"input_schema":null},{"name":"submit_review_summary","description":"Attach the agent's OWN review notes to its run so the human reviewer sees them BEFORE signing off: a summary of what changed, the risks you see, and any files a human should inspect closely. This is inspect + assist only — it does NOT create or sign a verification record (the human's accountable act stays in the Verify surface).","write_action":true,"price_micros":0,"input_schema":null},{"name":"unarchive_concept","description":"Revive a previously-archived concept (status=open). Idempotent on already-open nodes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_agent_run","description":"Update the agent-run row you were handed (its id is on the handoff brief as \"Agent run id\"). Set status to running / succeeded / failed / cancelled and optionally a result summary or error. When you finish, also report pushedRef (the branch you pushed) and/or prUrl (the PR you opened) so the human can review the exact diff, and verificationRecordId once a record is signed. A terminal status stamps","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_concept","description":"Update an existing concept's label, description, tags, partitionAttribute, rationale, or status. Only the fields provided are changed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_project","description":"Update a project's name / brief / direction / lifecycle. Only fields provided are changed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"validate_concept","description":"Mark a concept as validated (status=validated). Optionally also overwrite `rationale`. Idempotent on already-validated nodes.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-24T17:27:52.641Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T17:27:52.541Z","components":{"code":{"score":25,"max":25,"notes":["33 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 20 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@toremlabs/proof-mcp","version":"1.0.0","found":true,"license":"AGPL-3.0-or-later","hasInstallScripts":false,"dependencyCount":8,"publishedAt":"2026-07-27T06:18:51.842Z","repositoryUrl":"git+https://github.com/ToremLabs/proof-mcp.git","weeklyDownloads":35}],"repo":{"found":true,"owner":"ToremLabs","repo":"proof-mcp","archived":false,"pushedAt":"2026-09-04T06:59:05Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/202747172?v=4","ownerCreatedAt":"2025-03-11T05:54:55Z","license":"AGPL-3.0"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":35,"license":"AGPL-3.0","lastPushAt":"2026-09-04T06:59:05.000Z","score":23}}}},"grade_history":[],"reviews":[]}