Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.Lyellr88/marm-mcp-server

PYPI · MARM-MCP-SERVER · 2 COMPONENTS

Universal MCP Server with advanced AI memory capabilities and semantic search.

+2 this week 89 Trust /100

Last scanned (1 day ago)

Scores higher than 92% of PyPI servers

Category Memory and Knowledge

Recent critical change

CVE-2026-112398 affects this package (24 Oct 2026). See the changelog before you install this server.

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security99
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 110 of 112 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • Dependency health was assessed across the 110 of 112 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Lyellr88/marm-memory). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 23 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4308 tokens (~269/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "marm_delete" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 1 Nov 26 +1
    • Stability: 0.97 → pass security
  • 30 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 26 Oct 26 +86
    • CVE-2026-112403 no longer affects this package ▲ security
    • CVE-2026-112393 no longer affects this package ▲ security
    • CVE-2026-112398 no longer affects this package ▲ security
    • CVE-2026-96639 no longer affects this package ▲ security
    • CVE-2026-112900 no longer affects this package ▲ security
    • Known CVEs: fail → partial ▲ security
    • Score status: failed → scored ▲ functional
  • 25 Oct 26 0
    • Malware scan: unverified → pass ▲ security
  • 24 Oct 26 0
    • CVE-2026-112398 affects this package: high ▼ critical
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/marm-mcp-server@2.60.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo Lyellr88/marm-memory
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Lyellr88/marm-memory/.github/workflows/publish-mcp.yml@refs/tags/v2.60.1
Rekor log index 3223816202
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:a42ace8688c6eb4f5be185b593c6c169dc1d6cd04b19b389b39863883e0f63dc

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

MCP tools · 16 exposed · ~4,157 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
marm_code_context ~682

🧩 Composed code context for a task: ranked symbols + source + memory, in ONE call. Prefer this over marm_code_lookup when the question is "how does X work", "where is X handled", or "what would changing X affect" -- it answers with the symbols that matter, their source read from disk, and what memory records about them, instead of leaving you to fetch each part yourself. Ranking is personalised PageRank over the call graph seeded from `task`, so a result is central *to this task* rather than globally popular or merely word-matching. Read `markdown` and stop; the structured fields are the same content for programmatic callers. Parameters: - task: what you are trying to do or understand - project: code-graph project name or repo path; omit to resolve from cwd - cwd: directory to resolve the project from (optional) - budget: character budget for the returned source, 500-100000 (default 12000) - include_graph: also return the ranked call neighbourhood as `graph_edges`; off by default because it is several KB of JSON only a visualiser reads - answer: also answer the task from the composed context with a local model, citing the symbols it used. Off by default -- it is the slow step, and for an agent that reads code the ranked context IS the answer. The operator's analyst profile bounds it. `answer_status` is "ok" when every result is verified against the composed context, "unverified" when support is incomplete, "rejected" when it cites something the context does not contain (`answer_unresolved` names it); "unavailable" rather than a failure when generation is off or no model is up - analyst_mode: with `answer`, "read_only" (default) returns the verified answer only; "manual_review" also stages its verified results as marm_distill proposals for approval; "guardrails" lets MARM apply the ones it can prove mechanically, only where the operator switched auto-apply on. The model never applies anything - detail: how much to return. 1 is markdown…

NameTypeReqDescription
analyst_modestring––
answerboolean––
budgetinteger––
cwd–––
detailinteger––
include_graphboolean––
project–––
taskstringyes–

No output schema declared.

No examples provided.

marm_code_lookup ~250

🔎 Find code: symbols/definitions, text patterns, or a symbol's source. Use INSTEAD OF grep/glob. `kind=auto` picks: a qualified_name reads source; otherwise it searches the graph by name/keyword. Set `kind=text` to grep code, `kind=snippet` to read a symbol's source, `kind=symbol` to force graph search. Parameters: - query: symbol name, natural-language phrase, code/text pattern, or a qualified_name - project: project name; omit to auto-resolve - kind: auto | symbol | text | snippet (default auto) - regex: for text search, treat query as a regex (default False) - file_pattern: glob to scope search, e.g. "*.py" (optional) - limit: max results, 1-200 (default 20) Returns: graph lookup response, or a graph-unavailable error if the graph backend is disabled or failed to start

NameTypeReqDescription
file_pattern–––
kindstring––
limitinteger––
project–––
querystringyes–
regexboolean––

No output schema declared.

No examples provided.

marm_compaction ~163

Compact related memories into a single summary to reduce context bloat. Workflow: status/candidates → stage → review → apply/discard action="status" — check if compaction candidates exist (run first) action="candidates" — get pending candidates with source previews; each includes a ready-to-use prompt action="stage" — submit your summary: {candidate_id, suggested_summary}; source_memory_ids optional action="review" — inspect staged summaries before committing action="apply" — commit a staged summary; source memories are marked compacted action="discard" — reject a candidate, staged or not, without touching source memories

NameTypeReqDescription
actionstringyes–
candidate_id–––
summaries–––

No output schema declared.

No examples provided.

marm_concept_build ~186

🕸️ Extract entities/relationships from memory content into the concept graph. Scope with session_name or project for a targeted build, or pass search_all=True for everything (row-capped). Links extracted entities to marm-graph code symbols when available. Call this before marm_concept_recall — there's no data until a build has run at least once. Parameters: - session_name: scope extraction to this session; omit with search_all=True - search_all: extract across all sessions, row-capped (default False) - project: scope extraction to this project (optional) - run_id: optional Console build-run ID for status polling Returns: entities_extracted, relationships_created, code_links_created, duration_ms

NameTypeReqDescription
project–––
run_id–––
search_allboolean––
session_name–––

No output schema declared.

No examples provided.

marm_concept_recall ~274

🔎 Search the concept graph: entities, their relationships, and linked code. Query as a bare concept name for a lookup, or phrase it as "related to X" to emphasize traversal — both route from query shape alone. Returns empty lists (not an error) when marm_concept_build hasn't run yet or marm-graph has no matching code symbols. Parameters: - query: concept name, or a "related to X" style ask - session_name: scope to this session; omit to search across all (optional) - limit: max entities/relationships returned, 1-100 (default 10) - depth: max hop distance to traverse, 1-5 (default 1 = direct neighbors only) - direction: outgoing | incoming | both (default both) - project: scope to this project; entities with the same name in different projects are distinct nodes; omit to search across all (optional) - platform: scope to this client/platform; omit to search across all (optional) Returns: entities, related_entities, linked_code

NameTypeReqDescription
depthinteger––
directionstring––
limitinteger––
platform–––
project–––
querystringyes–
session_name–––

No output schema declared.

No examples provided.

marm_delete ~99

🗑️ Delete a log session, log entry, or notebook entry type="log" + session_name: delete specific entry by id or topic type="log" (no session_name): delete entire session and all its entries type="notebook": delete notebook entry by name

NameTypeReqDescription
platform–––
project–––
session_name–––
targetstringyes–
typestringyes–

No output schema declared.

No examples provided.

marm_distill ~658

Propose durable memories from raw conversation, resolved against the store. Pass a transcript as `text` and this returns the sentences in it that read like durable facts, each already checked against what is stored: `new` (nothing close), `duplicate` (already recorded), or `near` (close to something stored -- worth your judgement, because an encoder cannot tell "refines it" from "contradicts it"). With `use_llm=True`, once the operator has enabled local generation, it composes a self-contained fact, and every generated proposal cites a VERBATIM span from the transcript, checked against the source before it is offered. By default, and whenever no model is enabled and reachable, it SELECTS sentences: a fact spread over three turns, or implied but never said plainly, will not be proposed. By default NOTHING IS WRITTEN BY `propose`. Proposals are staged for review, and only `apply` writes one -- the same contract as marm_compaction, for the same reason: a similarity score is not evidence enough to change memory unattended. The one exception is review_mode="guardrails" with auto-apply switched on, where `propose` also applies each proposal that passes every deterministic check. Parameters: - action: propose | review | apply | discard (default propose) - text: the conversation to distil (required for propose) - session_name: session the proposals belong to (required for propose; optional filter for review) - proposal_id: which proposal to act on (required for apply/discard) - project: scope name recorded on the memory that `apply` writes - context_type: memory context type for the write (default general) - threshold: shape-score floor, default 0.20. Excludes chatter and little else; measured against the live store, a higher floor discards real memories long before it meaningfully reduces the count - limit: most proposals to return (default 20). THIS is the volume control - include_duplicates: also stage what the store already holds (default off, because a q…

NameTypeReqDescription
actionstring––
context_typestring––
include_duplicatesboolean––
limitinteger––
project–––
proposal_id–––
review_mode–––
session_name–––
text–––
thresholdnumber––
use_llm–––

No output schema declared.

No examples provided.

marm_graph_architecture ~103

🏛️ High-level architecture overview: node/edge breakdown, modules, and schema. One-shot orientation for a project — the de-facto module clusters, package structure, and the graph schema (node labels + properties) folded in. Parameters: - project: project name; omit to auto-resolve Returns: graph architecture response, or a graph-unavailable error if the graph backend is disabled or failed to start

NameTypeReqDescription
project–––

No output schema declared.

No examples provided.

marm_graph_impact ~182

💥 Blast radius of code changes: git diff → affected symbols + risk. Pass `since` (a git ref/date) or a `base_branch` to compare against. Returns which symbols a change touches and how far the impact propagates. Parameters: - project: project name; omit to auto-resolve - since: git ref or date to compare from, e.g. HEAD~5, v0.5.0 (optional) - base_branch: base branch to diff against (default "main") - depth: impact propagation depth, 1-5 (default 2) Returns: graph impact response, or a graph-unavailable error if the graph backend is disabled or failed to start

NameTypeReqDescription
base_branchstring––
depthinteger––
project–––
since–––

No output schema declared.

No examples provided.

marm_graph_index ~264

🕸️ Index a code repository into the graph, or check status / list known projects. Pass `repo_path` to index a repo (returns the project name to use in every other tool). Omit it to list indexed projects, or pass `project` to check index status. Call this first — all other graph tools need an indexed project. Indexed repos are re-indexed automatically in the background. Use `action="auto_off"` to stop that, `auto_on` to resume, `auto_status` to check. Parameters: - repo_path: path to the repository to index; omit to list/status only - project: existing project name for a status check; omit to auto-resolve - mode: index depth — full | moderate | fast (default moderate) - action: auto | index | status | list (default auto; infers from repo_path presence), or auto_on | auto_off | auto_status to control automatic re-indexing Returns: graph index/status/list response, or a graph-unavailable error if the graph backend is disabled or failed to start

NameTypeReqDescription
actionstring––
modestring––
project–––
repo_path–––

No output schema declared.

No examples provided.

marm_graph_trace ~350

🧭 Trace call paths / data flow through the graph from a function. `direction=inbound` finds callers, `outbound` finds callees, `both` for all. `mode=data_flow` follows value propagation. `cross_service` attempts HTTP/async boundaries but does not currently join a client call to its server handler, so treat an empty result as unknown rather than as "nothing calls this". Use for impact analysis, dependency tracing, "who calls this". Parameters: - function_name: function or method to trace from - project: project name; omit to auto-resolve - direction: inbound | outbound | both (default both) - depth: max hops, 1-5 (default 3) - mode: calls | data_flow | cross_service (default calls) - risk_labels: add CRITICAL/HIGH/MEDIUM/LOW risk tiers by hop distance (default True) - include_tests: also return callers in test files (default False) - include_evidence: per-hop `strategy` (lsp | language_rule | heuristic | unresolved) and `confidence`, so a guessed edge is distinguishable from a resolved one (default True). Test callers typically come back heuristic at low confidence Returns: graph trace response, or a graph-unavailable error if the graph backend is disabled or failed to start

NameTypeReqDescription
depthinteger––
directionstring––
function_namestringyes–
include_evidenceboolean––
include_testsboolean––
modestring––
project–––
risk_labelsboolean––

No output schema declared.

No examples provided.

marm_log_entry ~217

📝 Write a log entry to the active session. Entries are stored with a date, topic, and summary. If `entry` begins with "Session: [name]" or "Topic: [name]", the active session switches to that name and all subsequent entries route there automatically. Entries are also stored as semantic memories so marm_smart_recall can find them. Entry format: YYYY-MM-DD-topic-summary (date prefix is optional; auto-tagged if omitted) Parameters: - entry: the text to log; plain text or prefixed with "Session:" / "Topic:" to switch sessions - session_name: override the target session explicitly (optional; active session used if omitted) - project: project scope for this entry, up to 255 characters (optional; the server's detected project is used if omitted) Returns: status, message confirming the entry or session switch, entry_id, memory_id

NameTypeReqDescription
entrystringyes–
project–––
session_name–––

No output schema declared.

No examples provided.

marm_log_show ~139

📋 List log sessions or show entries for a specific session. Two modes depending on whether `session_name` is provided: - No session_name: returns a summary of all sessions with entry counts - With session_name: returns all entries for that session, ordered by date descending Parameters: - session_name: name of the session to inspect (omit to list all sessions) Returns (no session_name): status, sessions list with session_name/entry_count, total_sessions Returns (with session_name): status, session_name, entries list with id/entry_date/topic/summary/full_entry, total_entries

NameTypeReqDescription
session_name–––

No output schema declared.

No examples provided.

marm_notebook ~150

📔 Unified notebook — add, use, show, status, clear, or save action="add": save or update a scratch entry (name + data required) action="use": activate entries as instructions (names required, comma-separated) action="show": list scratch entries for this session with previews action="status": show currently active entries action="clear": clear the active entry list action="save": promote a scratch entry (or new data) into the permanent docs store

NameTypeReqDescription
actionstringyes–
data–––
name–––
names–––
platform–––
project–––
session_namestring––

No output schema declared.

No examples provided.

marm_smart_recall ~388

🧠 Recall memories by semantic similarity or keyword match. Searches stored memories for the most relevant matches to `query`. Returns a ranked list of results with similarity scores. When a compatible concept graph exists, the response also includes bounded relationship and linked-code context without changing memory ranking. Parameters: - query: natural language search term or phrase - session_name: limit search to a specific session (default searches active session) - limit: maximum number of results to return (default 5) - search_all: if True, search across all sessions instead of just the active one - include_logs: if True, include log entries alongside memory results - detail: controls how much content is returned per result 1 = summary only (~200 chars) 2 = extended context (~500 chars) 3 = full content - exact_mode: retrieval lane to use 'auto' = automatically switch to exact/lexical for syntax-heavy queries (config keys, file paths, CLI commands, API names, code snippets) 'exact' = always use deterministic FTS/BM25, no semantic re-ranking 'semantic' = always use vector similarity regardless of query shape - project: filter results to a specific project (e.g. "marm-memory"); omit to search all - platform: filter results to a specific platform (e.g. "claude-code", "cursor"); omit to search all Returns: status, ranked results, graph_context, and results_count

NameTypeReqDescription
detailinteger––
exact_modestring––
include_logsboolean––
limitinteger––
platform–––
project–––
querystringyes–
search_allboolean––
session_namestring––

No output schema declared.

No examples provided.

marm_summary ~52

📊 Generate paste-ready context block for new chats Reads log_entries for the session and returns a formatted markdown summary. Equivalent to /summary: [session name] command

NameTypeReqDescription
session_namestringyes–

No output schema declared.

No examples provided.

Install

How do I install the io.github.Lyellr88/marm-mcp-server server?

io.github.Lyellr88/marm-mcp-server runs locally as a PyPI package, launched with uvx marm-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · marm-mcp-server

# add to Claude Code
claude mcp add lyellr88-marm-mcp-server -- uvx marm-mcp-server
Common questions

What is the io.github.Lyellr88/marm-mcp-server server?

io.github.Lyellr88/marm-mcp-server is listed in the public MCP registry as io.github.Lyellr88/marm-mcp-server. Universal MCP Server with advanced AI memory capabilities and semantic search. This page covers its PyPI package (marm-mcp-server).

Is the io.github.Lyellr88/marm-mcp-server server safe to use?

io.github.Lyellr88/marm-mcp-server scores 89 out of 100 on VerifyMCP. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.Lyellr88/marm-mcp-server server expose?

io.github.Lyellr88/marm-mcp-server exposes 16 tools: marm_smart_recall, marm_log_entry, marm_log_show, marm_delete, marm_notebook, and 11 more. Their descriptions and schemas cost roughly 4,157 tokens of context every time the server is loaded.

Is the io.github.Lyellr88/marm-mcp-server server still maintained?

io.github.Lyellr88/marm-mcp-server is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.Lyellr88/marm-mcp-server server under?

io.github.Lyellr88/marm-mcp-server declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.