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.memtomem/memtomem

PYPI · MEMTOMEM · SCANNED SEP 22

Markdown-first long-term memory for AI agents. Hybrid BM25 + vector search, runs locally.

Available components

53 Trust /100
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 Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 3 of 47 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 2 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2751 tokens (~211/item across 13 items; 9 tools + 4 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 Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage71
  • 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
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
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; "mem_do" implies "execute" 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 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

How do I install the io.github.memtomem/memtomem MCP server?

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

pypi · memtomem

# add to Claude Code
claude mcp add memtomem-memtomem -- uvx memtomem
// .cursor/mcp.json
{
  "mcpServers": {
    "memtomem-memtomem": {
      "command": "uvx",
      "args": [
        "memtomem"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "memtomem-memtomem": {
      "command": "uvx",
      "args": [
        "memtomem"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add memtomem-memtomem -- uvx memtomem
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "memtomem-memtomem": {
      "type": "local",
      "command": [
        "uvx",
        "memtomem"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add memtomem-memtomem --command uvx --arg memtomem
# ~/.hermes/config.yaml
mcp_servers:
  memtomem-memtomem:
    command: "uvx"
    args: ["memtomem"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "memtomem-memtomem": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "memtomem"
      ]
    }
  }
}
# add to Vellum
assistant mcp add memtomem-memtomem -t stdio -c uvx -a memtomem
// mcp.json
{
  "mcpServers": {
    "memtomem-memtomem": {
      "command": "uvx",
      "args": [
        "memtomem"
      ]
    }
  }
}
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.

  • 20 Sept 26 53

    First indexed and scored.

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 22 Sept 2026 · Analysed pypi/memtomem@0.6.4

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

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

Dependencies 47 packages
Packages resolved 47
Stale 2
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 9 exposed · ~2,314 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
mem_add ~557

Add a new memory entry to a markdown file and immediately index it. The entry is appended to the target file (or a new timestamped file is created in the first configured memory directory), then re-indexed so it is immediately searchable. All content is scanned for secrets before any filesystem write; a match rejects the write. See ``force_unsafe`` below for the one escape hatch and ``mem_add_redaction_stats`` for the outcome counters. Args: content: The memory content to store title: Optional heading title for the entry tags: Optional tags for categorisation file: Target .md filename (relative or absolute). If omitted, a timestamped file is created in the first memory_dir. namespace: Assign indexed chunks to this namespace (default: config default) template: Use a built-in template (adr, meeting, debug, decision, procedure). Content can be JSON with field values or plain text. force_unsafe: When True, bypass the redaction guard for this call even when content matches a secret pattern. Use only when matches are known false positives (e.g., documenting an example credential schema). The bypass is recorded with a ``bypassed`` outcome and an audit line, and it never applies to ``scope="project_shared"`` — that combination is hard-refused, because git history cannot be retracted from clones. scope: Write tier: ``user`` (default), ``project_local``, or ``project_shared``. confirm_project_shared: Required explicit consent for a Git-tracked ``project_shared`` write. idempotency_key: Optional key (max 256 chars) making this write idempotent for 24h — a retry with the same key returns the original result and writes nothing. Only successful writes are recorded, so a f…

NameTypeReqDescription
allow_namespace_mixboolean
confirm_project_sharedboolean
contentstringyes
file
force_unsafeboolean
idempotency_key
namespace
scopestring
tags
template
title
NameTypeReqDescription
resultstringyes

No examples provided.

mem_do ~155

Execute a memtomem action by name. This is the gateway to all advanced memtomem features beyond the core tools (search, add, index, recall, status, stats, list, read). action="help" lists every action grouped by category; params={"category": "<name>"} adds per-parameter detail and, for some categories, usage notes. Common aliases resolve automatically (e.g. "orphans" → "cleanup_orphans", "health" → "eval"). Args: action: The action name (e.g. "session_start", "tag_list", "help") params: Optional dict of parameters for the action

NameTypeReqDescription
actionstringyes
params
NameTypeReqDescription
resultstringyes

No examples provided.

mem_index ~123

Index or re-index markdown files for hybrid search. Args: path: File or directory path to index recursive: Whether to recurse into subdirectories (default True) force: If True, re-index all files even if unchanged (default False) namespace: Assign all indexed chunks to this namespace auto_tag: If True, run keyword-based auto-tagging on newly indexed chunks

NameTypeReqDescription
auto_tagboolean
forceboolean
namespace
pathstring
recursiveboolean
NameTypeReqDescription
resultstringyes

No examples provided.

mem_list ~130

List all indexed source files with chunk counts and metadata. Args: source_filter: Filter by source file path (substring match, or glob pattern with *, ?, []) namespace: Only list sources containing chunks in this namespace Examples: mem_list() — all indexed files mem_list(source_filter="*.md") — markdown files (glob) mem_list(source_filter="docs/") — files with "docs/" in path (substring) mem_list(namespace="work") — files in the "work" namespace

NameTypeReqDescription
namespace
source_filter
NameTypeReqDescription
resultstringyes

No examples provided.

mem_read ~75

Read a chunk's content and metadata by UUID. Inspect a chunk before editing, or see the text behind a search preview. Ids resolve in the current project's scope; another's reads as not found. Args: chunk_id: The chunk's UUID (from mem_search results)

NameTypeReqDescription
chunk_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

mem_recall ~340

Recall memories created within a date range. Returns chunks ordered by creation date (newest first). Args: since: Inclusive start date (YYYY, YYYY-MM, YYYY-MM-DD, or ISO datetime) until: Exclusive end date — same formats as *since* source_filter: Filter by source file path (substring match, or glob pattern with *, ?, []) tag_filter: Comma-separated tags, matching ANY; applied before *limit*. namespace: Namespace scope — single, comma list, or glob ("project:*"), not both. limit: Maximum number of chunks to return (default 20) output_format: Output format — "compact" (default, human-readable) or "structured" (JSON for machine parsing, includes trust-UX hints as a "hints" field). scope: ADR-0011 scope-axis filter — single, comma list (``user,project_local``), or glob (``project_*``), not both. Omitted, the default merge applies: in-project recalls return ``user`` + that project's tiers, out-of-project ``user`` only. Examples:: mem_recall(since="2025-01", until="2025-03") mem_recall(since="2025-06-01", source_filter="notes") mem_recall(namespace="work", limit=10)

NameTypeReqDescription
limitinteger
namespace
output_formatstring
scope
since
source_filter
tag_filter
until
NameTypeReqDescription
resultstringyes

No examples provided.

mem_search ~759

Search across indexed memory files using hybrid BM25 + semantic search. Args: query: Natural language search query top_k: Number of results to return (default 10) source_filter: Source path filter — substring, or glob with *, ?, [] tag_filter: Comma-separated tags; matches chunks carrying ANY of them namespace: Namespace scope — value, comma list (``work,personal``) or glob (``proj:*``), not both. Omitted, system namespaces are hidden; naming one includes it. as_of: Temporal bound for retroactive search — ``YYYY-MM-DD`` or ``YYYY-QN``, default now. Chunks whose ``valid_from`` / ``valid_to`` frontmatter excludes that point drop out; chunks without those keys are always valid. Time decay anchors here, not to the wall clock. bm25_weight: RRF weight for keyword matches (default 1.0; raise to favor) dense_weight: RRF weight for meaning matches (default 1.0). Both must be finite and >= 0, not both zero; 0 disables that leg context_window: Expand each result with ±N adjacent chunks (0 = off). Neighbours follow the namespace/scope/validity visibility rules, not the tag/type/date filters verbose: Deprecated — use output_format="verbose" output_format: "compact" (default), "verbose" (adds UUID / pipeline stats), or "structured" (JSON). A non-default value overrides ``verbose``. scope: ADR-0011 tier filter — value, comma list (``user,project_local``) or glob (``project_*``), not both. Omitted, the default merge applies: inside a project ``user`` + that project's tiers, outside one ``user`` only. Pass ``project_shared`` from outside a project to search across projects. rerank: ``false`` skips the cross-encoder stage and collapses the pool to ``top_k`` — the fast path for latency-bounded callers, so it narrows recall as well as changing the score scale. Omitted/``true`` follows server config;…

NameTypeReqDescription
as_of
bm25_weight
context_windowinteger
dense_weight
namespace
output_formatstring
querystringyes
recordboolean
rerank
scope
source_filter
tag_filter
top_kinteger
verboseboolean
NameTypeReqDescription
resultstringyes

No examples provided.

mem_stats ~36

Return current memory index statistics: total chunks, sources, and storage backend. Use this to quickly assess how many memories are indexed before searching.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

mem_status ~139

Show indexing statistics and current configuration summary. Reports storage backend, embedding info, chunk/source counts, and warns about orphaned source files (indexed but gone from disk — run mem_cleanup_orphans). Configuration drift adds a ``Warnings`` block. Each entry has ``kind`` (an open enum — tolerate unrecognised values rather than erroring), ``fix`` and an optional ``doc`` link. Some kinds add their own keys: embedding mismatches carry ``stored``/``configured``; ``concurrent_server_writers`` may carry ``same_parent``. These keys are stable across versions, so probes can pattern-match on them.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the io.github.memtomem/memtomem MCP server?

io.github.memtomem/memtomem is an MCP server listed in the public MCP registry as io.github.memtomem/memtomem. Markdown-first long-term memory for AI agents. Hybrid BM25 + vector search, runs locally. This page covers its PyPI package (memtomem).

Is the io.github.memtomem/memtomem MCP server safe to use?

io.github.memtomem/memtomem scores 53 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 September 2026. 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.memtomem/memtomem MCP server expose?

io.github.memtomem/memtomem exposes 9 tools: mem_index, mem_add, mem_recall, mem_search, mem_stats, and 4 more. Their descriptions and schemas cost roughly 2,314 tokens of context every time the server is loaded.

Is the io.github.memtomem/memtomem MCP server still maintained?

io.github.memtomem/memtomem is still listed as active in the MCP registry. We last reached this channel on 22 September 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.memtomem/memtomem MCP server under?

io.github.memtomem/memtomem 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.