Query Markup Documents - On-device hybrid search for markdown files with BM25, vector search, and LLM reranking
MGI-Mind is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Local memory server for AI agents: hybrid search, a fact graph and a hash-chained audit log.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user mgi-mind-mcp '--' npx -y mgi-mind mcp
# 2 — ask your agent for something these tools do
# mind_search, mind_browse, mind_recall_all and 26 more
MGI-Mind costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts MGI-Mind as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user mgi-mind-mcp '--' npx -y mgi-mind mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take MGIMIND_HOME (Where the memory store lives. Defaults to ~/mgimind.) if you want to set it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
29 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Semantic (embedding) search across stored memories, ranked by relevance to query, with optional metadata filters. Read-only, no side effects. Returns up to limit results as text (library, score, id, content, author if set), or the literal 'No results.' when nothing matches. Use mind_browse instead for a query-less metadata listing (newest first, not ranked); mind_recall for error->fix procedur
| Parameter | Type | Required | Notes |
|---|---|---|---|
| author | string | no | Filter to memories written by this agent |
| created_before | string | no | Only memories created before this instant, EXCLUSIVE (RFC3339 timestamp or YYYY-MM-DD date) |
| created_since | string | no | Only memories created at/after this instant, INCLUSIVE (RFC3339 timestamp or YYYY-MM-DD date) |
| libraries | array | no | Filter to ANY of these libraries (OR). Use instead of 'library' for cross-library search. |
| library | string | no | Filter to one library |
| limit | number | no | Max results |
| query | string | yes | Search query |
| rerank | boolean | no | Override the reranker for THIS query: true forces it on, false gives the raw hybrid (dense+sparse) order. Omit to use the configured default. |
| rerank_top_k | number | no | Override how many candidates the reranker re-orders for this query. |
| source | string | no | Filter by ingest source tag (e.g. a session id or URL) |
| tier | number | no | Retrieval tier: 1=facts, 2=summaries, 3=full |
Browse/list memories by metadata WITHOUT a search query: inventory, not ranking. Newest first. Use to answer 'what did agent X write recently', 'everything from this source', 'all memories since a date'. Same filters as mind_search.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| archived | string | no | 'only' lists ARCHIVED (soft-forgotten) memories so they can be restored; 'include' returns both archived and live. Omit to list only live memories. |
| author | string | no | Only memories written by this agent |
| created_before | string | no | Only memories created before this instant, EXCLUSIVE (RFC3339 or YYYY-MM-DD) |
| created_since | string | no | Only memories created at/after this instant, INCLUSIVE (RFC3339 or YYYY-MM-DD) |
| libraries | array | no | List from ANY of these libraries (OR) |
| library | string | no | List from one library |
| limit | number | no | Max records |
| source | string | no | Only memories with this ingest source tag |
Unified recall across all memory types at once (facts + memories + procedures) for one query. Current facts first, then semantic memories, then matching error->fix procedures. One call instead of three separate searches.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | Max per silo |
| query | string | yes | What to recall |
Decide whether to search memory BEFORE answering a user query. Returns priority (must-search / should-search / answer-directly), the reason, and which libraries to search first. Call this on a turn when unsure; it implements the search-before-answer trigger policy (named project, meta-cue like 'did I tell you', negation to verify, cross-session reference). Advisory: it cannot force a search.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | The user's query to classify |
Open the 3D memory visualization in the user's browser: the brain as glowing cores (memories, facts, regions) wired by neurons, with live pulses. Call this when the user asks to SEE or SHOW their memory / 'the brain' / how memory looks. Spawns a local viewer and returns the URL.
No parameter schema on file.
Store free-text content as a searchable memory. Content-addressed: the point id is derived from (library, content), so re-adding the exact same text upserts the same entry instead of duplicating it (and clears any archived or quarantined flag); any character change creates a new entry. Long content is split into overlapping chunks automatically. Fails if library does not exist (create it first w
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content | string | yes | Text to store, any length (chunked automatically if long). Rejected if it looks like a password, key, or token. |
| library | string | yes | Target library name. Must already exist; it is never auto-created. Create one with mind_library action="create". |
| source | string | no | Optional free-text provenance tag (e.g. a URL or session id). Filterable later via mind_search/mind_browse source, and shown in mind_history. |
Persist an externally-sourced snippet (code, doc, RFC quote, commit message, etc.) into mgi-mind with a mandatory provenance citation. The agent supplies the snippet AS PLAIN UTF-8: no HTML, no markup. Call this ONLY when the snippet was just produced by a code-search or doc-search MCP in the same session; do NOT fill provenance fields from memory.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | Optional path inside the repo. No leading '/', no '..' segments. |
| lang | string | no | Optional language tag (free string). |
| library | string | no | Target library. Must exist (create with mind_create). |
| line_range | string | no | Optional line range, e.g. "42" or "42-58". Regex: ^\d+(-\d+)?$. |
| note | string | no | Optional one-liner the agent attaches (why this is worth keeping). |
| origin_url | string | yes | https:// URL the snippet was lifted from. Host must be in the allowlist (github.com, gitlab.com, bitbucket.org, sr.ht, codeberg.org, grep.app, sourcegraph.com). |
| repo | string | no | Optional owner/repo when the source is a code host. Regex: ^[\w.-]+/[\w.-]+$. |
| search_tool_used | string | yes | Identifier of the search source the agent used in THIS session, e.g. "mcp.grep.app", "sourcegraph", "github code search", "local ripgrep". REQUIRED. Empty rejects with 'provenance source unknown: use |
| snippet | string | yes | Raw text to store. Plain UTF-8. Must NOT contain HTML tags; the agent is responsible for stripping markup upstream. |
Diagnose the local install: Qdrant reachable, embedding model and ONNX Runtime present, config valid. Read-only report by default. With fix=true it also DOWNLOADS missing pieces (Qdrant binary, embedding model, ONNX Runtime) to repair them; it never touches stored memories, facts, or the vault. Call this when a tool call fails with a connection/model/config error, before asking the user to reinsta
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fix | boolean | no | false (default): report problems only, no changes. true: also download and install any missing dependency found broken (Qdrant, model, ONNX Runtime); does not touch memory data. |
Build a text briefing for session start: operating rule, pinned mind_block entries, skill catalogue, last session summary, library list, and up to 20 current knowledge-graph facts. Side effect: every fact it surfaces is marked 'inherited', so a later mind_fact re-assertion of the same fact counts as reused context rather than an independent reconfirmation (discounted in the duel rule) until it is
No parameter schema on file.
Auto-ingest memory. PRIMARY: pass a candidates array of already-extracted items you judged worth keeping. BACKSTOP: omit candidates and pass raw text for marker-based heuristic extraction. Each candidate is secret-scrubbed and near-dup-checked before writing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| candidates | array | no | Extracted items. Each is one of: {"type":"memory","content":"..."} | {"type":"fact","subject":"...","predicate":"...","object":"..."} | {"type":"procedure","trigger_error":"...","fix":"..."} |
| library | string | no | Target library for memory candidates. Pass the library of the PROJECT this content is about (e.g. its project name) — most mgi-mind instances split memory by project, and 'projects' is the catch-all f |
| raw | string | no | Raw text for heuristic extraction (used only when candidates is omitted) |
Record a procedural-memory lesson (error -> fix) for later mind_recall. Stored unverified by default (a manual lesson has no truth signal) and surfaced with low weight until confirmed; pass verified=true ONLY with a deterministic signal (test green / exit 0), or confirm it later with mind_outcome. Always inserts a new entry, never merges with an existing similar one. Returns the new procedure's id
| Parameter | Type | Required | Notes |
|---|---|---|---|
| context | string | no | Short task description (drives semantic recall) |
| error | string | yes | Error message / signature (will be normalized: paths, line numbers, addresses stripped) |
| fix | string | yes | What resolved it |
| provenance | string | no | Project / file where this applied |
| verified | boolean | no | True ONLY if a deterministic check confirmed the fix |
Recall error->fix playbooks for an error that already happened, matched by error signature and/or task context. Read-only. Ranking blends relevance with trust: a verified or proven fix is boosted, a repeatedly-failing one demoted, but a strongly-matching unverified fix still surfaces. Returns up to limit playbooks as text, or a no-match message. Use mind_skill action="match" instead for a task y
| Parameter | Type | Required | Notes |
|---|---|---|---|
| context | string | no | Task description to match (semantic) |
| error | string | no | Error signature to match (lexical) |
| limit | number | no | Max playbooks |
Record whether a procedure returned by mind_recall worked when reused. worked=true/false bumps its success/fail counter and feeds its trust ranking, so the store self-corrects instead of ossifying on a bad fix; not idempotent, each call adds another data point. For anything other than a plain worked/did-not-work signal on a procedure (a typed signal like test_passed/code_compiled, a signal on a no
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Procedure id from mind_recall |
| worked | boolean | yes | Did the fix work this time |
Record a typed external-signal outcome on any memory id, not only procedures: a test passed/failed, code compiled, a user confirmed/denied a fact, or a citing memory referenced this one. Idempotent on (memory_id, signal_type, source): re-posting the same triple updates the existing entry instead of appending a duplicate. Feeds the fact duel rule's external_signal_score. If memory_id is a procedure
| Parameter | Type | Required | Notes |
|---|---|---|---|
| memory_id | string | yes | Target memory id (from mind_search or any tool returning ids) |
| signal_type | string | yes | What kind of signal this is. test_passed is the strongest (weight 1.0); cited_by the weakest (0.2). |
| source | string | no | Stable identifier of where the signal came from (e.g. 'ci.github.com/run/12345', 'user-mad'). Used for idempotency. |
| success | boolean | no | Did the signal positively confirm the fact (true) or negate it (false)? A failed test_passed (success=false) pulls the score negative. |
List the most recently added memories (not facts, procedures, or skills), newest first by creation time. Read-only. Returns up to limit entries as text (library, content, source), or 'No memories yet.' when empty. Does not include a memory id; use mind_search or mind_browse when you need ids to act on.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | Max entries to return, newest first. |
Preview what mgimind consolidate would do: count of exact duplicates, near-duplicates, and cold (old + unused) entries. Always dry-run on the MCP surface; destructive consolidation stays on the CLI where the user types --apply explicitly. Use this when the user asks 'how much duplicate memory do I have?' or before suggesting they run the CLI command.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| library | string | no | Scope to one library (omit for all) |
Restore an ARCHIVED (soft-forgotten) memory by id, returning it to search. Archiving (consolidate --archive-cold) reversibly hides cold memories instead of deleting them; this is the undo.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Memory id of an archived entry |
Fetch a webpage and convert it to Markdown via the external crw tool. Fails with an install hint if crw is missing or not on PATH, and fails if the page returns empty content. With save set, also stores the page as a memory (same rules as mind_add: save must already exist as a library, content is chunked, source is set to the URL) and returns a chunk-count confirmation instead of the page
| Parameter | Type | Required | Notes |
|---|---|---|---|
| save | string | no | Library to store the page into. Must already exist; omit to just read the page without storing it. |
| url | string | yes | URL to fetch |
Export memories to disk, one file per library. Formats json/md dump every stored memory (including archived and quarantined ones; facts, procedures, and skills are not included) grouped by library; format=instructions renders verified error->fix procedures only; format=profile renders a snapshot of pinned blocks + current facts + verified procedures + skills. Writes files under output, OVERWRITI
| Parameter | Type | Required | Notes |
|---|---|---|---|
| format | string | no | json/md: one file per library with every memory. instructions: verified procedures as agent-ready markdown. profile: blocks+facts+procedures+skills snapshot. |
| output | string | no | Output directory for json/md (one file per library) or output file path for instructions/profile. Created if missing; existing files are overwritten. |
Reconcile a directory of Markdown files (Obsidian vault or plain folder) into a library: the files on disk WIN, so a file that differs from what is already stored replaces the stored version. Auto-creates library if missing. Defaults to a dry-run (apply=false) that only renders the plan (counts of new/replaced entries); pass apply=true to actually write. Idempotent: re-running with no file chang
| Parameter | Type | Required | Notes |
|---|---|---|---|
| apply | boolean | no | false (default): dry-run, only shows what would change. true: actually write the new/replaced entries. |
| library | string | no | Target library name. Created automatically if it does not exist. |
| path | string | yes | Directory to scan for .md files |
| source | string | no | File layout to expect. obsidian and markdown are currently treated the same. |
Read-only summary: memory count per library and total, knowledge-graph fact count (plus a dependants/confidence distribution when facts exist), session file count, and whether the vault is initialized (never the secret count or values). No parameters. Use mind_consolidate instead to see duplicate/cold-memory counts.
No parameter schema on file.
Inspect, promote, or expire entries that the relevance gate filtered into the quarantine layer. Single tool with action: list (newest first, optional library filter), show (full content + gate reason by id), promote (the gate was too strict: move to ordinary memory by id), expire (the gate was right: delete by id; only ever touches quarantined points, never live memory, and stays recoverable fro
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | What to do |
| id | string | no | Required for action=show, promote, or expire |
| library | string | no | Scope for action=list (optional) |
| limit | number | no | Max entries for action=list |
Vault is terminal-only by design. This tool explains how the user runs the equivalent mgimind vault command: secret values never cross the MCP channel. Single tool with action: store (instructions for storing a secret), get (instructions for retrieving), list (instructions for listing keys). Replaces mind_vault_store / _get / _list.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | What instructions to render |
| key | string | no | Optional key name to interpolate into the instructions |
Manage the agent's session record across runs. Single tool with action: start (open a new session for an agent), last (read the previous session's summary), end (close the active session with a hand-written summary). Replaces mind_session_start / _last / _end.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Lifecycle step |
| agent | string | no | Agent name; same across start/end |
| summary | string | no | Required for action=end. Free-form, <200 words, what happened this session |
Knowledge-graph facts (subject -> predicate -> object). Single tool with action: add (insert a new fact; returns verdict=invalidated and refuses if this exact triple was explicitly invalidated before - call action=restore first), query (text-matches subject against subject/predicate/object, returns current facts as text, or the superseded history with history=true, or a point-in-time snapshot
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Operation |
| as_of | string | no | With action=query: POINT-IN-TIME: return the facts that were CURRENT at this instant (RFC3339 or YYYY-MM-DD), time-travelling the superseded chain. Answers 'what was X on date Y'. |
| history | boolean | no | With action=query: return the SUPERSEDED history (past TemporalSingle values, oldest first) instead of current facts |
| id | string | no | Required for invalidate/restore (from action=query) |
| object | string | no | Required for add, together with subject and predicate. The value or related entity. |
| predicate | string | no | Required for add, together with subject and object. Relationship name; its registered cardinality (see mind_predicate) decides whether a second distinct object conflicts. |
| subject | string | no | add: the entity the triple is about, required together with predicate and object. query: a text match, checked against subject OR predicate OR object (not subject-only, not exact), required. |
| valid_from | string | no | With action=add: optional, when this became true IN THE WORLD (RFC3339 or YYYY-MM-DD), as opposed to when it was recorded. Omit for 'unknown'. |
| world_time | boolean | no | With action=query and as_of: use world-time (valid_from/valid_until) instead of record-time (created_at/valid_until). Falls back to record-time per fact when it has no valid_from. |
Library namespaces. Single tool with action: create (new library by name), list (all libraries with counts), delete (remove a specific memory by id within a library: destructive). Replaces mind_create / mind_list / mind_delete.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Operation |
| id | string | no | Required for action=delete; memory uuid from search results |
| library | string | no | Required for action=delete |
| name | string | no | Required for action=create |
Register and inspect predicate cardinality (single | temporal-single | multi), which controls how mind_fact action="add" detects conflicts: Multi never conflicts; Single/TemporalSingle flag a conflict when a second distinct object is asserted for the same subject+predicate. Unregistered predicates default to Multi. Call action=register once per predicate before relying on conflict detection for it
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Operation. Required, no default. |
| cardinality | string | no | Required for action=register. Overwrites any existing registration for this predicate. |
| predicate | string | no | Required for action=register and action=get. The predicate name as used in mind_fact. |
Pinned core-memory blocks (persona / user / current-project): a few small, named notes that are ALWAYS injected at the top of the session context, not ranked retrieval. Use for stable, always-relevant facts the agent must not have to search for. action=set overwrites, get/list read, remove deletes. Content is capped (4KB/block, 32 blocks); this is core memory, not a second store: put searchable kn
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Operation (default: list) |
| content | string | no | Block content; required for action=set |
| name | string | no | Block name [a-z0-9_-]; required for set/get/remove |
Skills: the house way of doing a kind of work, matched against the task you are ABOUT TO START (mind_recall is the other half: it answers an error that already happened). action=match takes a task description and returns the playbooks that apply, ranked by relevance and by how they have actually worked out. Call it before starting non-trivial work, the way you would check for a house rule. action=
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Operation (default: list) |
| body | string | no | The playbook itself, 8KB max; required for action=set |
| limit | number | no | Max skills to return for action=match (default 3) |
| name | string | no | Skill name [a-z0-9_-]; required for set/show/remove/outcome |
| task | string | no | What the work is; required for action=match |
| verify | boolean | no | action=outcome: promote to verified on success. Deterministic signals only |
| when | string | no | What kind of task should surface this skill; required for action=set |
| worked | boolean | no | action=outcome: did applying the skill work (default true) |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under Apache-2.0
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install MGI-Mind or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 2.8.2. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish MGI-Mind can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.