{"name":"io.github.team-monet/monet","slug":"team-monet-monet","title":"Monet","description":"Local-first, state-centric memory for coding agents. MCP server + CLI.","url":"https://mcp.market/server/team-monet-monet","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":30,"stars":1,"forks":1,"downloads_week":60,"last_push_at":"2026-09-19T01:06:15.000Z","license":"AGPL-3.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/team-monet/monet","website":"https://monet.team-monet.com/","version":"1.11.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@team-monet/monet","version":"1.11.0","transport":{"type":"stdio"},"packageArguments":[{"value":"start","type":"positional"}],"environmentVariables":[{"description":"Directory where Monet stores local-first memory. Defaults to ~/.monet (organized per project by circle).","name":"MONET_STORAGE_DIR"}]}],"tools":[{"name":"agent_context","description":"Session-start orientation. Call first. Returns resolved `circle`; `resolvedFrom` marks an alias. `stageIndex` names moments whose rules require stage_lookup. Skeleton delivery has three states: no mirror fields means loaded standing files are current; `mirrorStale` + `instruction` requires user-confirmed reconciliation; `skeleton` contains members not covered by a standing file. A member's `homeCi","write_action":false,"price_micros":0,"input_schema":null},{"name":"conformance_answer","description":"Record whether the action followed the rules read at that moment: 'followed' or 'not-followed'. No question is put first \\u2014 record your own reading. FIRST WRITE WINS: the same answer again is accepted, a differing one is refused, so a later correction does not land here \\u2014 when a rule turns out not to have been followed, the destination is that rule's own record. This says the action follo","write_action":false,"price_micros":0,"input_schema":null},{"name":"conformance_ask","description":"Record that you asked the user whether an action followed the rule it read. Call this when you put the question, before their reply. The momentId is the one `stage_lookup` returned when it handed you that rule; a later `stage_lookup` also names earlier moments with no question put \\u2014 candidates, not debts, because the record does not say whether an action followed any of them. Ask where one di","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_checkpoint","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_circle_manage","description":"Manage project-locality circles. Rename preserves the old name as an alias. Merge moves all concepts; forceNew (default) keeps near matches distinct and flags them, while auto deduplicates. Archive hides a circle from store-wide recall/listing without deleting it; unarchive restores it. List includes archived circles. Use entities/edges, not circles, for topics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_declare","description":"Declare a user-authorized rule, stage, principle, or preference, or withdraw a declared rule. Never call on agent initiative. This is the only tool that may create blocking rules, replace a rule binding, or end a declaration. A stage is a named moment; rules bind content to stages. Principles and preferences enter the always-on skeleton without stage or severity; mechanical concerns return as non-","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_detach","description":"Move observations out of a concept to undo a wrong merge. By default they form a new concept; destConceptId attaches them to an existing same-circle concept. The source is recomputed and marked for synthesis. Moving all observations into a destination deletes the source, consolidating a duplicate. Without a destination, at least one observation must remain; use memory_reassign_circle to move a who","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_fetch","description":"Read a concept by id. Normal concepts return `body` and `observationCount`; evidence appears only with observations:true as newest-first pages. If `needsSynthesis:true`, pull every page, reconcile one body, then call memory_synthesize. `bodyTruncated` means recover from observations. A disputed concept adds `status` and `openContradictions`; mediate with memory_resolve({ contradictionId: openContr","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_flag_contradiction","description":"Open a contradiction when stored memory conflicts with newer evidence. The concept becomes disputed until memory_resolve mediates it. Prefer memory_store kind=\"correction\" when also storing the correcting evidence.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_list","description":"List one circle's memories as structural cards, never bodies; use memory_fetch to read one. Returns up to `limit` plus `nextCursor`; pass that as `cursor` until absent. Keyset pagination stays valid while earlier pages are reassigned. Use `withProvenance` to group memories by evidence paths, then memory_reassign_circle to migrate them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_overview","description":"Read-only curation workbench for one circle: compact counts, livingModel cards, bounded queues for possibleDuplicates, extractionCandidates, openContradictions and gate exceptions, plus the ratified skeleton. A skeleton member's `homeCircle` names the circle it is homed in and appears only when that is not the circle you asked from; its absence means the member is homed here, and memory_ratify onl","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_ratify","description":"Record a human verdict on a principle or preference candidate after conversational review against the skeleton battery (Generates/Covers/Transfers/Exits). Approve/re-ratify enters the candidate in the skeleton and can link generated rules; reject keeps it out; retire ends current membership. The latest verdict governs membership, while every verdict remains in history. `packet` preserves exactly w","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_reassign_circle","description":"Move a concept, its observations, and graph membership to another circle. Pass exactly one of id or ids; batches are per-item atomic and report errors without aborting. `circle` is the current home. `auto` merges a destination match; `forceNew` keeps it distinct and flags a near match as possible_duplicate. Use this to home legacy default memory in its project circle.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_resolve","description":"Mediate a contradiction or dismiss a flagged pair. CONTRADICTION: pass contradictionId, decision, and a reconciled body for accept-new/keep-current. accept-new keeps the correction; keep-current retires it; dismiss records no conflict. Name contradictedObservationId (a live, older, same-concept observation): on accept-new it is superseded exactly; on keep-current it is recorded as the kept prior w","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_restore","description":"Undo memory_retire: a retired memory is searchable, fetchable, listed and counted again, and its graph is re-derived. Pass exactly one of id or ids; batches are per-item and report errors without aborting. `circle` is the concept's home.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_retire","description":"Hide a memory: it leaves memory_search, memory_fetch, memory_list and the overview counts, its evidence untouched, and memory_restore brings it back \\u2014 its graph re-derived from that evidence rather than replayed, so ordering and reinforcement history do not survive the round trip. Pass exactly one of id or ids; batches are per-item and report errors without aborting. `circle` is the concept's","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_search","description":"Find memories by similarity. Returns ranked pointer cards, not content; call memory_fetch with a card's id and non-default circle to read it. Omit circle for store-wide search. Empty results mean no match.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_store","description":"Store durable knowledge. Similar evidence normally attaches to an existing concept; novel, incoherent, species-mismatched, or stage-mismatched evidence creates a concept. Evidence that matches several concepts equally is REFUSED rather than guessed: the error names the candidates, and you re-send with `attachTo` or `resolution=\"forceNew\"`. The acknowledgement returns `circle`, `action`, and `conce","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_synthesize","description":"Store one coherent body synthesized from all of a concept's observations. Clears `needsSynthesis` and records a revision.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_workstreams","description":"Two reads, two moments. Resume \\u2014 on continuation intent only, never a fresh directive: omit `id` to list active/paused workstreams and confirm which to resume; then pass its `id` for detail \\u2014 OPEN items only, questions first, each carrying the id `close` takes. Settle \\u2014 `id: \"inbox\"` before reporting completion: every find awaiting disposition, this session's and every kept one. `cl","write_action":false,"price_micros":0,"input_schema":null},{"name":"stage_lookup","description":"At a stage named by agent_context, fetch its rules before acting. A hit returns bounded rules with reasons and omission recovery fields. `homeCircle` names the circle a rule is homed in, and appears only when that is not the circle you asked from; its absence means the rule is homed here. `parentDisputed:true` means `disputedParentIds` should be memory_fetched; projectedFromPrincipleId is only the","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-20T20:11:47.522Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:11:47.494Z","components":{"code":{"score":20,"max":25,"notes":["4 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 2 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/cli.js: …&&(l=this.opts.code.process(l,t));let m=new Function(`${Qn.default.self}`,`${Qn.default.scope…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@team-monet/monet","version":"1.11.0","found":true,"license":"AGPL-3.0-only","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-09-01T10:46:57.664Z","repositoryUrl":"git+https://github.com/team-monet/monet.git","weeklyDownloads":60}],"repo":{"found":true,"owner":"team-monet","repo":"monet","archived":false,"pushedAt":"2026-09-19T01:06:15Z","stars":1,"forks":1,"openIssues":55,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/264974155?v=4","ownerCreatedAt":"2026-03-02T09:30:09Z","license":"AGPL-3.0"},"icon":{"url":null,"source":"none"},"presence":{"stars":1,"forks":1,"downloadsWeek":60,"license":"AGPL-3.0","lastPushAt":"2026-09-19T01:06:15.000Z","score":30}}}},"grade_history":[],"reviews":[]}