{"name":"io.github.jeang42/codemem","slug":"jeang42-codemem","title":"codemem","description":"Shared memory for coding agents: projects, reusable code, sessions and commits across machines","url":"https://mcp.market/server/jeang42-codemem","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":2,"forks":0,"downloads_week":null,"last_push_at":"2026-09-25T16:43:00.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/jeang42/codemem","website":"https://github.com/jeang42/codemem","version":"0.1.0","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"codemem-mcp","version":"0.1.0","runtimeHint":"uvx","transport":{"type":"streamable-http","url":"http://localhost:8055/mcp"},"packageArguments":[{"description":"Run the MCP server and web UI","value":"serve","type":"positional"}],"environmentVariables":[{"description":"Directory for the database and backups","format":"filepath","default":"~/.codemem","name":"CODEMEM_DATA"},{"description":"Path to the SQLite database (overrides CODEMEM_DATA)","format":"filepath","name":"CODEMEM_DB"},{"description":"Address to bind. The server has no authentication; use 127.0.0.1 unless the network is trusted","default":"0.0.0.0","name":"CODEMEM_HOST"},{"description":"Port for MCP (/mcp) and the web UI. The transport URL assumes 8055","format":"number","default":"8055","name":"CODEMEM_PORT"},{"description":"Ollama base URL for embeddings (semantic search). Without it, search is BM25 only","default":"http://127.0.0.1:11434","name":"OLLAMA_URL"},{"description":"Set to false to disable embeddings entirely","format":"boolean","default":"true","name":"CODEMEM_EMBED"},{"description":"Directory of bare git repos to read for the commit feed","format":"filepath","default":"/srv/git","name":"GIT_ROOT"}]}],"tools":[{"name":"activity","description":"What happened recently: commits pushed and sessions logged, across all machines.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_note","description":"Add a note. kind: decision|howto|resource|issue|idea|note. howto notes are what future sessions get from howto(); decisions explain why something is the way it is.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_scan_root","description":"Register a directory to be scanned for projects on a machine. Remote machines run client/codemem_agent.py which reads its roots from here. Use when a directory is organised enough.","write_action":false,"price_micros":0,"input_schema":null},{"name":"delete_note","description":"Delete a note by id, with its search and embedding rows. Use it to remove a note written by mistake or superseded by a corrected one; the deleted row is returned so it can be written back. Note ids come from search results and the notes list. Deleting is not how you edit a note that is merely out of date — add a newer one instead, because notes are a dated record.","write_action":true,"price_micros":0,"input_schema":null},{"name":"find_assets","description":"Find reusable assets. With a query it searches; without, it lists (optionally by kind, tag, project). exclude_maturity=\"junk,broken,sunset,antiquated\" leaves only things worth building on. imports=\"chromadb\" answers \"which files/projects use this library\" exactly, from parsed import statements.","write_action":false,"price_micros":0,"input_schema":null},{"name":"handoff","description":"Record or advance a handoff: one implementation replacing another. One record per name; each call appends a dated stage entry. stage: candidate|shadow|verified|promoted|retired|rolled-back. old/new: asset or project names being replaced/replacing. promotion_class: library|service|agent-facing|pipeline|data-store. report: path to the parity report. note: what happened, failures included. Empty name","write_action":false,"price_micros":0,"input_schema":null},{"name":"help","description":"How to use codemem: workflow, tool list, label vocabularies, data sources. Call with no arguments for the overview; a topic (e.g. \"maturity\", \"audience\", \"vendor\", \"session\") narrows it. Cheap: no DB access.","write_action":false,"price_micros":0,"input_schema":null},{"name":"howto","description":"How-to knowledge: publishing to the git host, adding a machine, using codemem, and whatever docs are ingested. Searches howto notes first, then ingested docs. Empty topic lists available howtos.","write_action":false,"price_micros":0,"input_schema":null},{"name":"link_items","description":"Link two things. relation: uses|could-reuse|supersedes|derived-from|shares-code-with|deploys-to|related. Give project names, or asset names (from_asset/to_asset) instead.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_handoffs","description":"Handoffs in flight (or at a given stage), newest activity first. Each shows old, new, class, stage, last entry.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_projects","description":"List projects with a one-line summary each. Filter by status, tag, machine (has a location there), audience, maturity (e.g. \"authoritative\") or exclude_maturity (e.g. \"junk,antiquated\"). origin: \"own\" (default) | \"vendor\" (cloned third-party repos) | \"all\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_session","description":"Record what a working session did. Call at the end of meaningful work. summary is required; the rest are free text. resources: tools, APIs, models, other projects used.","write_action":false,"price_micros":0,"input_schema":null},{"name":"project_brief","description":"Everything known about one project: description, locations on each machine, reusable assets, recent notes, recent commits, links. Accepts a project name or a working-directory path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"rate","description":"Rate a project (or an asset, by giving asset_kind) so future sessions know what is usable and what is not. maturity: authoritative (the one to use) | usable | experimental | antiquated (superseded, prefer newer) | sunset (being retired) | broken | junk (reference only). note: why, and what to use instead. Empty maturity returns the vocabulary and current ratings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_asset","description":"Record something reusable so it is found next time instead of rebuilt. kind: script|module|function|prompt|skill|mcp-server|docker|service|config|dataset|model|doc|tool|pattern. usage: the one line someone needs to reuse it (command, import, URL). maturity: authoritative|usable|experimental|antiquated|sunset|broken|junk (+ maturity_note why).","write_action":false,"price_micros":0,"input_schema":null},{"name":"scan_path","description":"Scan a directory on the SERVER machine now and record the projects found. For other machines use codemem_agent.py. Empty path scans this machine's registered roots.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search","description":"Hybrid search (BM25 + embeddings) across projects, assets, notes, commits, locations and docs. kinds: comma list to restrict, e.g. \"asset,note\". exclude_audience: comma list of project audiences to leave out (e.g. \"unrestricted\" when working professionally). exclude_maturity: ratings to drop, e.g. \"junk,broken,sunset\" when you only want things safe to build on. Results carry a maturity field; auth","write_action":false,"price_micros":0,"input_schema":null},{"name":"stats","description":"Counts of everything, machines seen, index/embedding coverage, server config.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_project","description":"Create or enrich a project. Only supplied fields change. status: active|paused|done|abandoned|archived. audience: unrestricted (default: personal work, unfiltered) | professional | employer (free text, used for filtering). origin: own | vendor (a third-party clone; hidden from search and lists by default). tags: comma list. visibility: private (default, the owner only) | shared (named people) | pu","write_action":true,"price_micros":0,"input_schema":null},{"name":"verify","description":"Record that you ran this project (or asset, with asset_kind) today and it worked. Restarts its trust freshness clock (half-life 180 days from verification). note: what you checked. Use after actually exercising the code, not after reading it.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-25T17:19:49.918Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T17:19:49.864Z","components":{"code":{"score":25,"max":25,"notes":["17 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 0 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":"codemem-mcp","version":"0.1.0","found":true,"license":"Apache-2.0","dependencyCount":1,"publishedAt":"2026-09-25T16:11:39.778345Z","repositoryUrl":"https://github.com/jeang42/codemem"}],"repo":{"found":true,"owner":"jeang42","repo":"codemem","archived":false,"pushedAt":"2026-09-25T16:43:00Z","stars":2,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/5404378?v=4","ownerCreatedAt":"2013-09-07T03:15:16Z","license":"Apache-2.0"},"icon":{"url":null,"source":"none"},"presence":{"stars":2,"forks":0,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-09-25T16:43:00.000Z","score":23}}}},"grade_history":[],"reviews":[]}