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
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.
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
claude mcp add memtomem-memtomem -- uvx memtomem
{
"mcpServers": {
"memtomem-memtomem": {
"command": "uvx",
"args": [
"memtomem"
]
}
}
} {
"servers": {
"memtomem-memtomem": {
"command": "uvx",
"args": [
"memtomem"
]
}
}
} codex mcp add memtomem-memtomem -- uvx memtomem
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"memtomem-memtomem": {
"type": "local",
"command": [
"uvx",
"memtomem"
],
"enabled": true
}
}
} openclaw mcp add memtomem-memtomem --command uvx --arg memtomem
mcp_servers:
memtomem-memtomem:
command: "uvx"
args: ["memtomem"] {
"McpServers": {
"memtomem-memtomem": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"memtomem"
]
}
}
} assistant mcp add memtomem-memtomem -t stdio -c uvx -a memtomem
{
"mcpServers": {
"memtomem-memtomem": {
"command": "uvx",
"args": [
"memtomem"
]
}
}
} 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.
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 →
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 →
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…
| Name | Type | Req | Description |
|---|---|---|---|
| allow_namespace_mix | boolean | – | – |
| confirm_project_shared | boolean | – | – |
| content | string | yes | – |
| file | – | – | – |
| force_unsafe | boolean | – | – |
| idempotency_key | – | – | – |
| namespace | – | – | – |
| scope | string | – | – |
| tags | – | – | – |
| template | – | – | – |
| title | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| params | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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
| Name | Type | Req | Description |
|---|---|---|---|
| auto_tag | boolean | – | – |
| force | boolean | – | – |
| namespace | – | – | – |
| path | string | – | – |
| recursive | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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
| Name | Type | Req | Description |
|---|---|---|---|
| namespace | – | – | – |
| source_filter | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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)
| Name | Type | Req | Description |
|---|---|---|---|
| chunk_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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)
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| namespace | – | – | – |
| output_format | string | – | – |
| scope | – | – | – |
| since | – | – | – |
| source_filter | – | – | – |
| tag_filter | – | – | – |
| until | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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;…
| Name | Type | Req | Description |
|---|---|---|---|
| as_of | – | – | – |
| bm25_weight | – | – | – |
| context_window | integer | – | – |
| dense_weight | – | – | – |
| namespace | – | – | – |
| output_format | string | – | – |
| query | string | yes | – |
| record | boolean | – | – |
| rerank | – | – | – |
| scope | – | – | – |
| source_filter | – | – | – |
| tag_filter | – | – | – |
| top_k | integer | – | – |
| verbose | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
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.