{"name":"io.github.evan-moon/memex","slug":"evan-moon-memex","title":null,"description":"Local-first second brain with semantic search. Markdown notes indexed by a local ML model.","url":"https://mcp.market/server/evan-moon-memex","rating":null,"grade":"C","score":66,"certified":false,"status":"active","category":"ai","tags":["ai","search"],"presence":{"score":32,"stars":3,"forks":0,"downloads_week":211,"last_push_at":"2026-09-20T11:21:43.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/evan-moon/memex","website":null,"version":"0.5.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@evan-moon/memex","version":"0.5.0","transport":{"type":"stdio"}}],"tools":[{"name":"delete_note","description":"Delete a note by ID. Removes both the markdown file and the index entry. Rule-layer notes are user-only and always rejected \\u2014 suggest `memex delete <id>` instead.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_inference","description":"Get one inference with full provenance: its summary, confidence, and every evidence note (with a snapshot of the note at mint time and whether it has since changed or been deleted). …","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_note","description":"Get the full content of a note by ID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_signals","description":"List deterministic \"signals\" \\u2014 un-synthesized patterns the engine found in the notes (NO LLM involved, these are facts about the corpus structure): - hidden_arc: notes that clearly belong together but were never linked, spread over a long time (an un-synthesized thread) - stale_state: a \"state\" note that has newer related notes since it was last updated - dangling_link: a [[link]] to a note t","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_folders","description":"List all top-level folders (categories) in the second brain with their note counts. Call this before saving a note to pick the right folder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_inferences","description":"List inferences (LLM-synthesized hypotheses derived from notes). Staleness is re-checked first, so an inference whose source notes changed shows status \"stale\". …","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_notes","description":"List recent notes from the second brain.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tags","description":"List all tags in the second brain with their note counts. Call this before saving a note to pick consistent existing tags rather than inventing new ones.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mint_inference","description":"Persist a synthesized inference (a non-obvious claim that holds across several notes but is stated in none). ONLY call this when the user EXPLICITLY asks to save/record/keep a discovery (\"save that\", \"record this insight\"). NEVER auto-mint in the background \\u2014 unvalidated hypotheses pollute the brain. First present the hypothesis in chat; mint only after the user approves. Provide either fromS","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_note","description":"Save a note to the second brain. Use proactively \\u2014 without asking the user \\u2014 at the end of any conversation that contains: technical decisions and their rationale, key points from meetings or 1-on-1s with specific people, newly learned concepts or insights, or project context worth recalling later. Prefer updating an existing note over creating a duplicate. `layer` is REQUIRED \\u2014 cla","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_notes","description":"Search the second brain for relevant context. Call this BEFORE answering any question that could relate to past conversations, people, projects, or decisions the user may have stored. Always search first, then answer \\u2014 even if the connection seems loose. For important or vague questions, search MORE THAN ONCE with different phrasings: once in the user's language and once in English, or once w","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_note","description":"Extend or correct an existing note. Use when new information belongs with an existing note rather than standing alone. Search first to find related notes, then update rather than creating a duplicate. Layer rules: - past notes are immutable \\u2014 this tool will reject with PAST_IMMUTABLE. Create an [Amendment] save_note with a [[backlink]] instead. - rule notes are user-only \\u2014 this tool will","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_signal_status","description":"Triage a signal: dismiss noise so it never resurfaces, or snooze it for later. Use when a signal is clearly not worth synthesizing (e.g. a burst of boilerplate). Confirm with the user before dismissing.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":66,"grade":"C","scanned_at":"2026-09-25T21:46:02.622Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T21:46:02.620Z","components":{"code":{"score":8,"max":25,"notes":["5 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 5 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/index.js: …X_FILES = 50; var git = (repo, args) => execSync(`git ${args}`, { cwd: repo, encoding: \"utf8\" })…"},{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/mcp.js: …&&(d=this.opts.code.process(d,t));let m=new Function(`${ft.default.self}`,`${ft.default.scope…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@evan-moon/memex","version":"0.5.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":8,"publishedAt":"2026-07-14T17:51:45.946Z","repositoryUrl":"git+https://github.com/evan-moon/memex.git","weeklyDownloads":211}],"repo":{"found":true,"owner":"evan-moon","repo":"memex","archived":false,"pushedAt":"2026-09-20T11:21:43Z","stars":3,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/19145342?v=4","ownerCreatedAt":"2016-05-02T06:49:10Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/19145342?v=4&s=128","source":"github"},"presence":{"stars":3,"forks":0,"downloadsWeek":211,"license":"MIT","lastPushAt":"2026-09-20T11:21:43.000Z","score":32}}}},"grade_history":[],"reviews":[]}