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.

Mazarbul

MCPB · MAZARBUL_V0.2.3_LINUX_AMD64.MCPB · 4 COMPONENTS

Local-first memory for AI agents: entities, facts, relations and documents with semantic recall.

42 Trust /100

Last scanned (10 hours ago)

Scores higher than 73% of MCPB servers

Category Memory and Knowledge

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 Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
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 4 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability77
  • 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 17073 tokens (~254/item across 67 items; 64 tools + 3 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 Management17
  • Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • 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 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "deleteEntity" 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 66 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

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.

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 +1

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

  • 2 Nov 26 +1

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

  • 31 Oct 26 40

    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 5 Nov 2026 · Analysed mcpb/https://github.com/mo-cmyk/mazarbul/releases/download/v0.2.3/mazarbul_v0.2.3_linux_amd64.mcpb

Provenance No attestation

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

Result No attestation
Ecosystem mcpb
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 64 exposed · ~16,172 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
addIdentifier ~268

Attach an identifier (an alias by default) to an EXISTING entity, appending an entityIdentifierAdded event so the resolver and vault wikilinks match the entity by that surface form. Use this after renaming an entity's displayName via updateEntity to retain the prior name: addIdentifier{entityUid, identifier:"Old Name", kind:"alias"}. createEntity only seeds identifiers at mint time; this adds them later. kind defaults to "alias"; pass email/username/phone/id or a snake_case domain type for other identifiers. Returns E_NOT_FOUND when the uid does not resolve and E_VALIDATION on an empty identifier or malformed kind.

NameTypeReqDescription
entityUidstringyesULID of the existing entity to attach the identifier to. Required.
identifierstringyesThe surface form / external identifier to attach, e.g. a prior display name "Erebor Global", an email, a username, or a domain id. Required.
kindstring–Identifier kind in snake_case. Canonical: alias, email, username, phone, id; domain types (hrb, lei, tax_id, …) keep their own lookup lane. Defaults to "alias" when omitted — the kind to use for reta…
NameTypeReqDescription
namestringyesAIP resource name of the entity the identifier was attached to.
statusstringyesAlways "added" on success.

No examples provided.

agentFeedback ~318

Record durable feedback about using Mazarbul: a friction point (confusing|missing|wrong_result|slow|tool_error|suggestion) or a lesson you learned (a one-line rule). Give a category, severity, and one-line summary; optionally the surface (tool/CLI), detail, and a distilled rule. Recurring feedback auto-promotes into your per-session guidance (the user can pin/edit/veto). File DURABLE friction or rules, not one-off disagreements.

NameTypeReqDescription
activePresetstring–Active steering preset, if any. Optional; auto-context.
categorystringyesKind of feedback. confusing|missing|wrong_result|slow|tool_error|suggestion are friction; lesson is a durable rule you learned. Required.
detailstring–Optional longer context: reproduction or expected-vs-actual.
keywordsarray–Optional tags aiding clustering + search.
rulestring–For a lesson: the distilled one-line durable rule, phrased as guidance. This is what gets promoted into the session guidance. Optional.
scopestring–Scope to record into. Defaults to personal (device-local diagnostic).
severitystring–Impact. high promotes into guidance at a lower recurrence threshold. Required.
summarystringyesOne-line description of the friction or rule. Required.
surfacestring–Tool / CLI / instruction the feedback is about, e.g. recall, "maz load". Optional but encouraged (part of the recurrence cluster).
NameTypeReqDescription
clusterKeystringyesRecurrence cluster this feedback was filed under. Reportable via maz feedback.
statusstringyesAlways "recorded" on success.

No examples provided.

cancelJob ~45

Cancel a tracked background job by its AIP resource name ("jobs/{uid}").

NameTypeReqDescription
namestringyesResource name of the job to cancel: "jobs/{uid}".
NameTypeReqDescription
namestringyes–
statestringyes–

No examples provided.

captureExternal ~736

Index an external item you fetched from a live connector (Notion, Linear, Granola, Drive, GitHub) WITHOUT copying its body into maz. One call stores a pointer + YOUR summary + a freshness anchor; maz never fetches or holds the content. recall later returns the summary with an inline freshness verdict so you reuse it when fresh and re-fetch live when stale. The capture is UNTRUSTED (lineage connector:<name>): facts land proposed, never superseding your own. Idempotent by contentHash within the connector's TTL. Pass status=deleted|access-revoked to tombstone an item you can no longer reach. Refuses project scope and ephemeral connectors (gmail/gcal/slack; read those live). recall FIRST before capturing, to avoid duplicates.

NameTypeReqDescription
connectorstringyesThe connector the item came from: notion, linear, granola, drive, github. Drives the freshness budget and the untrusted-lineage trust tag. Ephemeral connectors (gmail, gcal, slack) are refused: read…
contentHashstring–SHA-256 hex of the item's canonical content subset (the freshness ETag). Recapturing with the same hash within the connector's TTL is a no-op. OMIT it if you cannot compute a real SHA-256 over the fe…
dedupKeystring–Idempotency key. Defaults to <connector>:<externalId>:<scope>. Recapturing the same item must reuse the same dedupKey (omit it and pass a stable externalId, or pass it explicitly).
externalIdstring–The source-system stable id (Notion page id, Linear issue key). Used to mint the dedupKey when you omit it; hashed in any plaintext render.
externalUrlstring–Dereferenceable location to re-fetch when stale. Defaults to uri.
fetchTimestring–When you fetched the item (RFC 3339 UTC). Defaults to now.
labelstring–Human-readable display name for the external_ref. Defaults to the externalId or connector, NEVER the raw URI (which would leak into a shared render).
scopestring–Scope to capture into. Defaults to personal. Project is refused: captured external content is sensitive and project renders to shared git.
sourceTypestringyesOpen-taxonomy kind of the item, e.g. notion_page, linear_issue, meeting_notes, drive_doc.
statusstring–active (default) records a live snapshot. deleted (a 404 on re-fetch) or access-revoked (a 403) tombstones the prior capture so recall flags it access-unverified instead of dropping it.
streamstring–Sub-channel within the connector, e.g. a Notion database id or a Linear team key. Optional.
summariesarray–Chunked summary: one episode per element, all sharing one external_ref. Use for long items; otherwise pass summary.
summarystring–Your faithful summary of the fetched content. Put the stable external id and key facts in the prose so recall can find it. Required unless you pass summaries[] or a tombstone status.
uristringyesAbsolute URI of the external item (must carry a scheme), e.g. a Notion page URL, a Linear issue URL, a Drive doc link. The canonical identity of the external_ref pointer.
NameTypeReqDescription
actionstringyescaptured = first snapshot; skipped = unchanged within TTL (no write); revision = content changed (new episode, prior superseded); expired = unchanged but past TTL (fetch-time refreshed); tombstoned =…
episodeNamesarrayyesResource names of the summary episode(s) this capture is grounded in (one per chunk).
externalRefNamestringyesAIP resource name of the external_ref pointer entity.
freshnessstringyesThe resulting freshness verdict for this item, the same value recall will report.
sourceRefNamesarrayyesResource names of the SourceRef provenance rows.

No examples provided.

connectSource ~326

Connect a source and run a bounded first backfill into the graph. Give a connector (local-git, claude-chats, or granola) and, for the file-based ones, repoPath (granola uses a stored API key instead); optionally scope (personal|team, default personal), dryRun (preview + count without writing), maxItems, and maxExtractionCalls. Ingested content is UNTRUSTED: facts land proposed and capped, never superseding your own. Returns a run report with itemsApplied/Skipped and a jobUid. Refuses project scope.

NameTypeReqDescription
connectorstringyesSource connector name. Supported: local-git, claude-chats, granola.
dryRunboolean–Preview only: validate the source and count would-be items WITHOUT writing anything (the consent gate).
maxExtractionCallsinteger–Cap on episodes appended this run, each one downstream extraction. Defaults to 500.
maxItemsinteger–Cap on items considered this run (backfill bound). Defaults to 500.
repoPathstring–Source locator for file-based connectors: a local git repository path (local-git), or an export file path (claude-chats: a .zip bundle or a conversations.json). Omit for granola, which authenticates…
scopestring–Scope to ingest into. Defaults to personal. Project scope is refused: ingested external content is sensitive and project is plaintext.
NameTypeReqDescription
connectorstringyes–
dryRunboolean––
episodesAppendedintegeryes–
itemsAppliedintegeryesItems turned into episodes (or, in a dry run, that WOULD be).
itemsSkippedintegeryesItems skipped because their content hash was unchanged (idempotent re-ingest).
jobUidstring–Job UID; pass to listJobs / cancelJob to track or cancel a long backfill.
streamsarray––

No examples provided.

contextCorrect ~205

Correct a wrong item the cold-start brief surfaced. Pass the item's id (a pin's contextPins/{uid}, or an entities/{uid} the brief showed) and the corrected text; the brief renders your text in its place. The correction is a NEW event, not an in-place edit — history is preserved and the latest correction wins. Returns the overlay's contextPins/{uid}.

NameTypeReqDescription
scopestring–Scope to write into; match the scope the corrected pin lives in. Defaults to personal ("project" = this repo; "team" requires admitted membership, else E_PERMISSION).
targetIdstringyesId of the item to correct: a contextPins/{uid} (or bare ULID) of a pin shown in the brief, or an entities/{uid} surfaced in it. The brief renders this corrected text in the item's place.
textstringyesThe corrected text to show in place of the surfaced item. Required, non-empty.
NameTypeReqDescription
namestringyesAIP resource name of the correction overlay; retire it with contextUnpin.
statusstringyesAlways "corrected" on success.

No examples provided.

contextPin ~233

Pin a free-text steering note to the top of the user's cold-start context brief. Use it when the user states a durable preference or constraint they want surfaced first every session (e.g. "I'm mid-migration off Postgres — don't suggest new Postgres features"). The note wins a budget slot before auto-surfaced documents and entities. Returns the pin's contextPins/{uid}; retire it with contextUnpin or override it with contextCorrect.

NameTypeReqDescription
scopestring–Scope to write into — a pin steers whoever reads that scope. Defaults to personal (steers only the user). Use "project" to steer anyone working in this repo. Use "team" to steer the whole team (requi…
targetRefstring–Optional resource the note is about, e.g. an entities/{uid}. Omit for a free-floating steering note.
textstringyesThe steering note to surface at the top of the cold-start brief, e.g. "Mid-migration off Postgres — don't suggest new Postgres features". Required, non-empty.
NameTypeReqDescription
namestringyesAIP resource name of the new pin; pass to contextUnpin or contextCorrect.
statusstringyesAlways "pinned" on success.

No examples provided.

contextUnpin ~134

Retire a steering pin or correction so it stops surfacing in the cold-start brief. Pass its contextPins/{uid} (or bare ULID). The row is tombstoned, not deleted — history is preserved and the retire converges across devices. Use when a pinned note or correction is no longer relevant.

NameTypeReqDescription
pinstringyesThe pin or correction to retire: contextPins/{uid} or a bare ULID, as returned by contextPin/contextCorrect or shown in the brief.
scopestring–Scope the tombstone is written into; match the pin's scope. Defaults to personal.
NameTypeReqDescription
namestringyesAIP resource name of the retired pin or correction.
statusstringyesAlways "unpinned" on success: the row is retired (a convergent tombstone), not deleted.

No examples provided.

count ~316

Count entities matching an AIP-160 filter — the deterministic answer to "how many …". With groupBy, returns a per-value breakdown (e.g. people per status) instead of a single total. Same filter grammar as the entities tool. Scope: defaults to project+personal; pass scopes:["team"] to include team entities.

NameTypeReqDescription
filterstring–AIP-160 filter expression selecting which entities to count. Same grammar as the entities tool: reference entity columns (kind, displayName, confidence, resolutionStatus, createTime), fact slots by s…
groupBystring–When set, return a per-value breakdown counted by this field instead of a single total. The field is an entity column (kind, resolutionStatus, …) or a fact slot state_key (status, …); entities with n…
kindstring–Convenience prefilter to one entity kind, AND-combined with filter.
limitinteger–Max groups to return when groupBy is set, most-populous first. Defaults to 50. Ignored without groupBy.
scopesarray–Scope filter: which data partitions to count. Allowed values: project, personal, team. Defaults to [project, personal] when omitted — team entities are hidden unless you pass scopes:["team"].
NameTypeReqDescription
countinteger–Total matching entities. Present when groupBy is not set.
groupsarray–Per-value breakdown, most-populous first. Present when groupBy is set.

No examples provided.

createEntity ~569

Mint a structured entity of a registered kind directly, bypassing LLM extraction — the write-side complement to relate. Use it when you already hold an entity as (kind, displayName) and need its entities/{uid} to assert a relation, without a remember() round-trip. Inputs: kind (a core kind or a registered extension kind — register first with defineEntityKind, check with introspect), displayName, optional confidence (default 1.0), identifiers (anchor the entity so the resolver attaches future mentions instead of duplicating), alternateNames, and properties (typed attributes validated against the kind's propertySchema). Deduplicates before minting: a matching identifier returns the existing entity (status reused); an existing same-name or near-duplicate of the same kind is NOT created (status duplicate_candidates) — inspect candidates, then reuse a uid, merge with mergeEntities, or retry with force=true to record a genuinely distinct entity that happens to share a name. On a plain create (status created) any advisory near-matches are still listed in candidates. Returns E_VALIDATION on a malformed kind, empty displayName, out-of-range confidence, or non-object properties.

NameTypeReqDescription
alternateNamesarray–Other surface forms for this entity. Optional.
confidencenumber–Writer confidence in the entity's identity. Defaults to 1.0 (user-confirmed).
displayNamestringyesHuman-readable label, e.g. "Mithril Corp" or "Eowyn".
forceboolean–Skip the duplicate check and mint a new entity even when one with the same name already exists. Use to record a genuinely distinct entity that shares a name with an existing one (e.g. a second real p…
identifiersarray–Strong/weak external identifiers to anchor the entity so the resolver attaches future mentions instead of minting a duplicate. Optional.
kindstringyesEntity kind. A core kind (person, organization, place, project, event, document) or a registered extension kind (e.g. user:vehicle). Register a new kind with defineEntityKind first; introspect lists…
propertiesobject–Typed attribute values matching the kind's propertySchema (P3), e.g. {"vin":"…","make":"…"}. Validated on write when strict_attributes is enabled. Optional.
scopestring–Scope to write into — pick by who should see it. Defaults to personal (private to the user, syncs to their devices). Use "project" for records tied to the current repo/codebase (shared with anyone wh…
NameTypeReqDescription
candidatesarray–Existing entities that match by name or embedding. On duplicate_candidates the create was refused; on created these are advisory near-matches you may want to merge.
kindstring–The entity's kind (set on status created/reused).
namestring–AIP resource name of the entity (set on status created/reused). Pass to relate or get(entities/{uid}).
statusstringyescreated = a new entity was minted; reused = an existing entity matched by identifier and is returned in uid/name; duplicate_candidates = NOT created because same-name or near-duplicate entities exist…
uidstring–Bare ULID of the entity (set on status created/reused).

No examples provided.

defineEntityKind ~582

Register a new entity kind in the dynamic-ontology registry — but first check whether an existing kind already covers the concept (introspect → entityKinds, or describeType). The built-in dedup check runs automatically: a near-identical kind returns status="reused" with the existing name so you avoid minting a synonym; a medium-similarity near-duplicate mints but records a SKOS closeMatch alias (response field closeMatch + similarity, internal URN maz:kind:<name> added to sameAs). Because that dedup runs a semantic embedding pass over existing kinds, this call routinely takes a few seconds to return — that latency is expected, not a hang; do not abort or retry on a short timeout. Inputs: name (bare snake_case, no namespace), displayName, description (required for dedup), optional extends (parent kind — must be a core kind or an already-registered active kind; bare names resolve to their canonical registered form), sameAs (external vocabulary IRIs), propertySchema (JSON Schema for typed attributes). Appends an entityKindRegistered event; the dispatcher materialises it into entity_kinds and the render pipeline writes it to the git-synced ontology/ tree. Re-registering an existing user kind with force=true overwrites it. Attempting to modify a core kind, or extending an unknown/ambiguous parent, returns E_VALIDATION.

NameTypeReqDescription
descriptionstringyesOne-sentence explanation of the kind. Used by the dedup check and agents.
displayNamestringyesHuman-readable label, e.g. Vehicle.
extendsstring–Parent kind name for single-inheritance subtype hierarchy (RDFS subClassOf). Must be a core kind or an already-registered active kind; a bare name (vehicle) resolves to its canonical registered form…
forceboolean–Bypass the reuse-before-mint dedup check and register unconditionally. Default false.
namestringyesBare snake_case kind identifier, e.g. vehicle. No namespace prefix — user: is added automatically. Must not start with core:.
previewboolean–When true, compute and return a plan of what this call would do (collapse, supersede, or mint) WITHOUT appending any event. The event log is unchanged. Use this to inspect impact before committing. D…
propertySchemaobject–Optional JSON Schema (Draft 2020-12) for typed attributes. Compiled before registration; E_VALIDATION on compile failure.
sameAsarray–Alias/sameAs IRIs to canonical external vocabularies, e.g. ["schema.org/Vehicle", "wikidata:Q42889"]. Optional.
NameTypeReqDescription
closeMatchstring–The name of a closely related existing kind (skos:closeMatch semantics). Present when a medium-similarity near-duplicate was found during minting.
namestringyesThe registered kind name, e.g. user:vehicle.
planobject–Present only when preview=true. Describes what the call would do without writing any event.
reusedKindstring–The existing kind name when status=reused. Absent otherwise.
similaritynumber–Dedup similarity score (0..1). Present when status=reused or when closeMatch is set.
statusstringyesregistered = kind written as active; reused = existing near-identical kind returned instead of minting; proposed = kind queued for review in governed mode; preview = plan computed without writing any…
warningsarray–Non-fatal advisory warnings. MAZ-KIND-001 = close match found; MAZ-KIND-002 = semantic dedup skipped; MAZ-SCHEMA-001 = supersede; MAZ-SCHEMA-002 = orphaned fields; MAZ-SCHEMA-003 = collapse.

No examples provided.

definePredicate ~443

Register a new predicate in the shared predicates vocabulary — but first call introspect to check existing predicates (works_at, member_of, etc.) so you don't mint a synonym. Inputs: predicate (snake_case), kind (functional for at-most-one-live-value, non-functional for multiple concurrent values), description, and optional typing: subjectKinds/objectKinds (domain/range — the entity kinds allowed on each end), sameAs (external-vocabulary IRIs), and propertySchema (a JSON Schema for the relation's attributes). Domain/range and attribute constraints are advisory by default and enforced only when [ontology] strict_domain_range is enabled. The predicate is immediately queryable via introspect and usable in relate calls. Re-registering an existing predicate updates its kind, description, domain/range, sameAs, and propertySchema and returns status=updated. Returns E_VALIDATION if the predicate name or propertySchema is malformed.

NameTypeReqDescription
descriptionstringyesOne-sentence human-readable explanation of what the predicate means.
kindstringyesfunctional = at most one live value per subject (e.g. works_at). non-functional = multiple concurrent values allowed (e.g. member_of).
objectKindsarray–Optional range constraint: entity kinds allowed as the object of this relation, e.g. ["organization"] for works_at. Omit to accept any kind.
predicatestringyesSnake_case predicate identifier, e.g. works_at or member_of. Must be unique in the predicates vocabulary.
propertySchemaobject–Optional JSON Schema (Draft 2020-12) constraining the relation's attributes map, e.g. require a string role. Validated against relation instances only when [ontology] strict_domain_range is enabled.
sameAsarray–Optional alias IRIs mapping this predicate to external vocabularies, e.g. ["https://schema.org/worksFor", "wikidata:P108"].
subjectKindsarray–Optional domain constraint: entity kinds allowed as the subject of this relation, e.g. ["person"] for works_at. Omit to accept any kind (open-world default).
NameTypeReqDescription
predicatestringyesThe registered predicate identifier.
statusstringyesregistered = new predicate written to the vocabulary; updated = existing predicate's kind, description, domain/range, sameAs, and propertySchema overwritten.

No examples provided.

defineSchema ~300

Register a JSON Schema document in the dynamic-ontology schema registry. Use this to attach validation schemas for custom entity-kind properties (schemaKind=entityKind:vehicle) or to define schemas for new event types. Inputs: schemaKind (bare camelCase or colon-namespaced, e.g. entityKind:deal), version (semver vX.Y.Z), definition (JSON Schema object). Core schema kinds (entity, episode, etc.) are protected and return E_VALIDATION. The schema is immediately usable for property validation via ValidateEntityProperties. Returns E_VALIDATION if the definition is not a JSON object or if schemaKind is a protected core kind.

NameTypeReqDescription
definitionobjectyesJSON Schema document (Draft 2020-12) to register. Must be a JSON object.
previewboolean–When true, compute and return a plan (supersede or register) WITHOUT appending any event. Use this to inspect impact before committing. Default false.
schemaKindstringyesLookup key for the schema, e.g. entityKind:vehicle or myCustomEvent. Bare camelCase or colon-namespaced. No spaces. Core kinds (entityKindRegistered, schemaRegistered, predicateRegistered, entity, ep…
versionstringyesSemver version, e.g. v0.1.0. Higher versions replace lower ones; same version with a different definition is a conflict.
NameTypeReqDescription
planobject–Present only when preview=true. Describes what the call would do.
schemaKindstringyesThe registered schema kind identifier.
statusstringyesregistered = schema written to the event log; preview = plan computed without writing any event (preview=true was set).
versionstringyesThe registered schema version.
warningsarray–Non-fatal advisory warnings. MAZ-SCHEMA-001 = supersede; MAZ-SCHEMA-002 = orphaned fields.

No examples provided.

deleteEntity ~275

Hard-delete an entity by ULID: removes the entity and all its derived data (relations, facts, mentions, identifiers, citations) and detaches its graph node, appending an entityDeleted tombstone to the audit log. This is for unwanted or junk entities — to consolidate DUPLICATES without losing data use mergeEntities instead. Safe default: refuses with E_VALIDATION when the entity still has active relations (so a connected entity is never dropped by accident); pass cascade=true to tombstone those relations first and proceed. Returns E_NOT_FOUND when the uid is unknown.

NameTypeReqDescription
cascadeboolean–Delete the entity even when it still has active relations. When true, each active relation is first tombstoned (relationForgotten) for the audit trail, then the entity and all its remaining derived d…
entityUidstringyesULID of the entity to delete. Required.
reasonstring–Optional free-text reason for the deletion. Surfaced in audit/log views and stamped on the cascaded relationForgotten tombstones.
NameTypeReqDescription
forgottenRelationsinteger–Number of active relations tombstoned by the cascade before the entity was removed (0 unless cascade was needed).
namestringyesAIP resource name of the deleted entity.
statusstringyesAlways "deleted" on success.

No examples provided.

describeType ~171

Describe a single entity kind in full: displayName, description, parent (extends), child kinds, external-vocabulary aliases (sameAs), provenance lane, and how many entities currently carry it. The deep counterpart to introspect's cheap kind index — call it to confirm a kind's shape and reuse before minting a near-duplicate with defineEntityKind, or before createEntity. Accepts a canonical name (person, user:vehicle) or a bare local name (vehicle) that resolves to the user: kind when unambiguous. Returns E_NOT_FOUND with near-name suggestions when the kind is not registered.

NameTypeReqDescription
namestringyesEntity kind to describe, e.g. person or user:vehicle. A bare local name (vehicle) also resolves to the user: kind when unambiguous.
NameTypeReqDescription
addedBystringyesWho registered the kind: seed, llm, user, or extension.
childrenarray–Registered kinds that extend this one.
descriptionstringyesOne-sentence explanation of the kind.
displayNamestringyesHuman-readable label.
namestringyesCanonical kind name, e.g. user:vehicle.
parentstring–Parent kind in the subtype hierarchy (extends). Absent for root kinds.
propertySchemaobject–JSON Schema for the kind's typed properties (attr_schema). Present only when the kind declares typed properties; use this to validate or populate the properties field in createEntity.
provenancestringyesNamespace lane: core, user, or extension:<name>.
sameAsarray–Alias IRIs to external vocabularies (schema.org, Wikidata, FOAF, …).
usageCountintegeryesNumber of entities currently carrying this kind.

No examples provided.

dismissInsight ~193

Dismiss a synthesized insight the user judges wrong or unhelpful. Appends a durable insightDismissed event (the source of truth) that flips the insight to a terminal 'dismissed' state - it drops out of hot recall and is never re-promoted by access. This is NOT a decay/demotion (which the system does on its own); it records an explicit user decision and survives a rebuild. Identify the insight by insights/{uid} or a bare uid. Returns the dismissed insight's resource name.

NameTypeReqDescription
namestringyesThe insight to dismiss: an insights/{uid} resource name (paste a listInsights / recall hit's name) or a bare uid.
reasonstring–Optional free-text justification for the dismissal, retained on the event for audit.
scopesarray–Scopes to resolve the insight in: project, personal, team. Defaults to project+personal.
NameTypeReqDescription
namestringyesResource name insights/{uid} of the dismissed insight.
statusstringyesAlways "dismissed" on success.

No examples provided.

editDocument ~223

Edit a document by exact string replacement (Claude-Code Edit semantics): `oldString` must match the current body exactly and be unique unless `replaceAll`. The result is ingested as a new revision (history kept; wikilink edges re-resolved; removed links forgotten) and the vault file refreshes. Use writeDocument to replace a whole body. Result counts (`edges`, `unresolved`) are whole-document snapshots after the edit.

NameTypeReqDescription
newStringstringyesReplacement text. Must differ from oldString.
oldStringstringyesExact text to replace. Must match the current body exactly (including whitespace) and, unless replaceAll, be unique in it.
pathstringyesVault-relative path of the document to edit.
replaceAllboolean–Replace every occurrence instead of requiring oldString to be unique.
scopestring–Disambiguates when the same path exists in more than one scope. Omit when the path is unambiguous. An edit never changes a document's scope; it is preserved.
NameTypeReqDescription
changedbooleanyesFalse when the content matched the latest revision (no-op).
documentUidstringyes–
edgesinteger–Total resolved wikilink and frontmatter edges the whole document holds after this write (snapshot, not a delta — counts all [[links]] in the current body that resolved, regardless of how many were al…
filestring–Absolute path of the materialized vault file.
namestringyesentities/{uid} resource name of the document-as-entity.
pathstringyes–
pendingEditboolean–True when the vault file holds an un-ingested manual edit and was left untouched.
reconciledinteger–Count of wikilinks in OTHER vault documents that this write newly made resolvable (cross-document reconcile pass; separate from the document's own edge snapshot above).
revisionUidstring––
unresolvedinteger–Count of [[wikilinks]] left dangling in the whole document after this write (snapshot, not a delta).
unresolvedTargetsarray–The dangling wikilink targets by name (text inside [[…]] that matched nothing) — fix a typo or create the target. Omitted when none dangle.
warningsarray–Non-fatal advisory messages — e.g. a title-collision warning when the document's display name shadows a non-document entity. Does not affect the written content; the document body is stored byte-for-…

No examples provided.

entities ~440

List and filter entities by kind, name substring, and confidence, with pagination. LLM-free discovery surface: find an anchor here, then pivot into neighbors/relations. sortBy=recallCount returns the most-recalled entities (replaces listTopEntities). Spot a duplicate of the same real-world thing? Consolidate the pair with mergeEntities (lossless); remove a junk entity with deleteEntity.

NameTypeReqDescription
filterstring–AIP-160 filter expression, AND-combined with the other params. Reference entity columns (kind, displayName, confidence, resolutionStatus, createTime), the short alias status for resolutionStatus (val…
kindstring–Filter to one entity kind, e.g. person, place, organization. See introspect for the kinds present.
limitinteger–Maximum entities to return. Defaults to 50.
minConfidencenumber–Drop entities below this resolution confidence.
nameExactstring–Case-insensitive exact match on display name (unbounded; takes precedence over nameLike). Use this to resolve a known name to its entity.
nameLikestring–Case-insensitive substring match on display name.
offsetinteger–Pagination offset (recent sort only). Defaults to 0.
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
sortBystring–Ordering. "recent" (default) = newest first. "recallCount" = most-recalled first (requires usage stats).
windowstring–Aggregation window for sortBy=recallCount. Defaults to last7Days.
NameTypeReqDescription
entitiesarrayyes–

No examples provided.

fact ~393

Record a scalar fact — an attribute, state, or preference — about an entity as a (subject, stateKey, value) slot, bypassing LLM extraction. The fact-shaped counterpart to relate: relate records edges between entities, fact records a single entity's slots (e.g. state.task.status=pending). A later write to the same stateKey supersedes the prior value (kept as history). Read them back via get(entities/{uid}) for the current slots, or get(facts/{uid}) for one.

NameTypeReqDescription
eventStartstring–When the fact became true in the world (RFC 3339 UTC). Optional; defaults to now.
scopestring–Scope to write into — pick by who should see it. Defaults to personal (private to the user, syncs to their devices). Use "project" for facts tied to the current repo/codebase (shared with anyone who…
sourcestring–Provenance label for the appended event, e.g. "cli:fact". Optional; defaults to "mcp:fact".
sourcePrioritynumber–Recall-lane priority, 0..1. Optional; defaults to 1.0.
stateKeystringyesHierarchical slot address: lowercase, dot-separated, e.g. state.task.status, preference.coffee.milk. The first segment is the category (event|state|relationship|preference|plan|absence|timeless).
subjectstringyesSubject entity the fact is about: entities/{uid}, a bare ULID, the literal "self", or a human display name (resolved case-insensitively, like maz get).
valuestringyesThe scalar value the slot holds, e.g. "pending", "Steven".
NameTypeReqDescription
namestringyesAIP resource name of the asserted Fact; pass to get(facts/{uid}).
statusstringyesAlways "asserted" on success.

No examples provided.

forget ~189

Forget an Episode, single Relation, or single Fact by ULID: appends a tombstone that removes derived state across the storage layers while preserving the JSONL audit trail. factUid hard-deletes a fact (state/preference) slot value — use retractFact to close a fact while keeping its history.

NameTypeReqDescription
episodeUidstring–ULID of the Episode to forget. Mutually exclusive with relationUid/factUid.
factUidstring–ULID of a single Fact (a state/preference slot value) to hard-delete. Mutually exclusive with episodeUid/relationUid. To close a fact while keeping its history, use retractFact instead.
reasonstring–Optional free-text reason for the forget; surfaced in audit/log views.
relationUidstring–ULID of a single Relation to forget. Mutually exclusive with episodeUid/factUid.
NameTypeReqDescription
namestringyesAIP resource name of the forgotten Episode, Relation, or Fact.
statusstringyesAlways "forgotten" on success.

No examples provided.

get ~682

Fetch one record by AIP resource name — entities/{uid}, episodes/{uid}, relations/{uid}, facts/{uid}, insights/{uid}, or consolidatedMemories/{uid} — plus its provenance lineage. For an entity you may also pass a bare uid or a human display name (resolved case-insensitively, the same forms relations/neighbors accept). When a name is shared across kinds, a non-document entity deterministically wins over a same-named document — the passed-over document(s) are surfaced in `shadowedDocuments` as entities/{uid} you can fetch directly; pass `kind` to target a specific kind, or a vault path / entities/{uid} to address a document. A name that is ambiguous among non-document entities (or unknown) returns a pointed error naming the candidates. The structured, LLM-free way to follow any recall hit's name field. Returns a discriminated union tagged by `type`. An entity record returns the canonical node (uid, kind, displayName, confidence, resolutionStatus) AND its typed `properties`, external `identifiers`, and currently-open scalar `facts`. A relation record carries hydrated endpoints + validity. An episode carries its source text. An insight (type=insight) returns the synthesized statement, insightType, currentConfidence, state, synthesizedAt, and its sourceUids as entities/{uid} citations. A consolidated memory (type=consolidatedMemory) returns the compressed summary, memoryType, confidence, consolidatedAt, and its sourceUids as episodes/{uid} citations. Demoted insights (state='demoted') are still fetchable — get is not the hot-recall index.

NameTypeReqDescription
asOfstring–Transaction-time anchor (RFC 3339 UTC) for an entity record's fact rows: hide facts recorded after this instant. Ignored for non-entity records.
atstring–Valid-time anchor (RFC 3339 UTC) for an entity record's fact rows: return each slot's value live at this instant. Defaults to now. Does not move the entity identity row; ignored for non-entity record…
includeInactiveboolean–Include superseded / expired facts (the full slot history) on an entity record. Off by default. Ignored for non-entity records.
kindstring–Optional entity kind hint (e.g. 'document', 'person', 'product'). When supplied alongside a display name, narrows the resolution to entities of that kind only. Useful when a name is shared between a…
namestringyesWhat to fetch: an AIP resource name whose collection prefix routes the lookup (entities/{uid}, episodes/{uid}, relations/{uid}, facts/{uid}, insights/{uid}, or consolidatedMemories/{uid}) — feed one…
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
NameTypeReqDescription
consolidatedMemoryobject–Present when type=consolidatedMemory. A compressed episode summary: summary, memoryType, confidence, consolidatedAt, and sourceUids typed as episodes/{uid} citations.
entityobject–Present when type=entity. The canonical node: uid, kind, displayName, confidence, resolutionStatus, and (when createEntity stored them) a 'properties' object of typed attributes validated against the…
episodeobject–Present when type=episode.
factobject–Present when type=fact. A scalar state slot: subjectUid, stateKey, value, validity window.
factsarray–Present when type=entity: the entity's currently-open scalar facts (its attributes), newest slot value per state_key. Empty when the entity has none.
identifiersarray–Present when type=entity and the entity has external identifiers: the strong/weak identifiers (type + value, e.g. {type:"hrb",value:"HRB 12345 B"}) that anchor it for the resolver. Omitted when none.
insightobject–Present when type=insight. A synthesized reflection: statement, insightType, currentConfidence, state (hot|demoted), synthesizedAt, and sourceUids typed as entities/{uid} citations.
provenancearray–Source/confidence/decided-at lineage walked back to the record's origin episode(s): direct for an episode, via source_event_uid for a relation, aggregated across citing episodes for an entity. Empty…
relationobject–Present when type=relation. Carries subject/object resource names for onward traversal, plus a 'status' trust posture: 'asserted' (authoritative) or 'proposed' (extracted from an untrusted connector…
shadowedDocumentsarray–Present when the name argument was resolved by display name AND one or more document entities share that name but were passed over in favour of a higher-priority non-document entity. Each entry gives…
typestringyesWhich record kind this response carries.

No examples provided.

getBacklinks ~109

List a document's wikilink edges without its body: `backlinks` (notes/entities that reference it) and `links` (what it references). The fast way to map a note's place in the graph. Identify the document by `path` or `documentUid`.

NameTypeReqDescription
documentUidstring–Stable document UID. Provide this OR path (exactly one).
pathstring–Vault-relative path of the document. Provide this OR documentUid (exactly one).
NameTypeReqDescription
backlinksarrayyesIncoming edges — documents/entities that reference this one. Always present; [] when none.
linksarrayyesOutgoing edges — what this document references. Always present; [] when none.

No examples provided.

getCapacity ~37

Return per-storage-layer on-disk byte totals: event log, sqlite+fts, graph, vector index, embedding cache, plus free disk.

Input schema present but exposes no named parameters.

NameTypeReqDescription
onDiskobjectyes–

No examples provided.

getContext ~206

Assemble a token-budgeted markdown brief of the user's working set — pinned documents, recently-updated documents, key entities, and (when you pass a `query`) the most relevant hits — for loading at the start of a session. Deterministic and fast (no LLM). The brief never exceeds `budgetTokens`; lower-priority content is dropped behind a visible marker. Prefer this over many small reads when you need to warm up context about the user.

NameTypeReqDescription
budgetTokensinteger–Token budget for the brief (default 4000). The brief never exceeds it; the lowest-priority tail is dropped behind a marker.
querystring–Optional focus. When set, the brief adds a section of the most query-relevant hits (documents + episodes), co-ranked by the same recall used by recall/ask.
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
NameTypeReqDescription
budgetintegeryesThe token budget that was applied.
droppedinteger–How many lower-priority items were omitted to fit the budget.
markdownstringyesThe assembled context brief as markdown: pinned documents, recently-updated documents, key entities, and (when a query is given) relevant hits. Load this verbatim at session start.
sectionsarray–Per-section counts of what made it into the brief.
tokensintegeryesEstimated token count of the brief (always <= budget).

No examples provided.

getEntityContext ~454

Assemble a single token-budgeted markdown dossier for ONE entity, collapsing what otherwise takes five calls (get + relations + neighbors + recall + facts) into one card. The dossier carries a header (name, kind, entities/{uid}, resolution status), Connections (the entity's typed relations as direction-aware predicate fragments), What I know (its scalar facts), Mentioned in (recall hits naming it), and a counts footer. Pass `entity` as an entities/{uid} resource name, a bare uid, a display name (resolved case-insensitively), or `self`. Use `at` (RFC 3339) to time-slice the relations + facts to a past instant; the header is unchanged. The card never exceeds `tokenBudget`; lower-priority bullets are dropped behind a marker. An unknown entity returns E_NOT_FOUND; an ambiguous display name returns E_VALIDATION naming the candidates. Prefer this over many small reads when you need the full picture of one entity.

NameTypeReqDescription
atstring–Valid-time anchor (RFC 3339 UTC): return the Connections and What-I-know rows as they were live at this instant. Defaults to now. Per ADR-0001 the anchor binds the relation + fact sub-queries only; t…
entitystringyesWhich entity to profile: an entities/{uid} resource name (feed one straight from a recall hit's entities[] / name), a bare uid, a human display name (resolved case-insensitively), or 'self'. An ambig…
includearray–Optional section filter. Omit for all three sections; pass a subset (e.g. ["facts"]) to narrow the card. The entity header and footer always render.
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
tokenBudgetinteger–Token budget for the dossier (default 4000). The card never exceeds it; the lowest-priority bullets are dropped behind a marker, then a counts footer is appended.
NameTypeReqDescription
budgetintegeryesThe token budget that was applied.
droppedinteger–How many lower-priority bullets were omitted to fit the budget.
markdownstringyesThe entity dossier as markdown: a header (name · kind · entities/{uid} · resolution), Connections (typed relations as direction-aware predicate fragments), What I know (the entity's scalar facts), Me…
sectionsarray–Per-section counts of what made it into the dossier.
tokensintegeryesEstimated token count of the dossier (always <= budget).

No examples provided.

getSourceRef ~167

Fetch one external-source provenance record (SourceRef) by AIP resource name sourceRefs/{uid}. A SourceRef records what a memory was derived from — the connector, stream, external id/url, content hash, and fetch time (W3C PROV wasDerivedFrom). Its provenance is SELF-ASSERTED and UNVERIFIED (trustState is always "unverified"): there is no cryptographic attestation of the external claim yet. Use recordSourceRef to create one.

NameTypeReqDescription
namestringyesAIP resource name to fetch: sourceRefs/{uid}. The uid is the SourceRef ULID returned by recordSourceRef.
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
NameTypeReqDescription
connectorstring–Connector that produced the reference, e.g. gmail, slack. Omitted when absent.
contentHashstring–Appender-supplied SHA-256 hex of the fetched content. Omitted when absent.
createTimestring–When the SourceRef event was recorded (RFC 3339 UTC).
dedupKeystringyesIdempotency key for the source_refs projection.
externalIdstring–Source-system opaque identifier for the item. Omitted when absent.
externalUrlstring–Dereferenceable location of the source item. Omitted when absent.
fetchTimestringyesWhen the source content was fetched (RFC 3339 UTC).
namestringyesAIP resource name of this SourceRef.
scopestring–Scope this SourceRef lives in: personal, project, or team.
sourceEventUidstringyesUID of the sourceRefRecorded event that carried this record.
sourceTypestringyesKind of external source (open taxonomy), e.g. email, slack_message, web_page.
streamstring–Sub-channel within the connector. Omitted when absent.
subjectUidstringyesULID of the record this source was derived from (PROV wasDerivedFrom).
trustStatestringyesProvenance is self-asserted by the appending device and is NOT cryptographically verified. No principal/signature trust exists for a SourceRef yet (#207).
uidstringyesSourceRef ULID identity.

No examples provided.

getUsageSnapshot ~49

Return the current usage snapshot: events written, recalls performed, embed-cache hit rate, recall latency percentiles.

NameTypeReqDescription
windowstring–Aggregation window. Defaults to "today" when omitted.
NameTypeReqDescription
bytesIngestedinteger––
embedCacheHitRatenumber––
embedCacheHitsinteger––
embedCacheMissesinteger––
eventsintegeryes–
recallLatencyP50Msnumber––
recallLatencyP95Msnumber––
recallLatencyP99Msnumber––
recallsintegeryes–
windowstringyes–

No examples provided.

idleStatus ~53

Return current background-work counters: extraction queue depth, in-flight enrichment, in-flight embeddings. Use to poll whether the kernel has caught up after a burst of remember() calls, before calling recall() for a clean retrieval measurement.

Input schema present but exposes no named parameters.

NameTypeReqDescription
enrichmentInflightintegeryesTotal background enrichment work in flight (queued + running). When 0 the extraction/resolution side is quiescent.
enrichmentQueueDepthintegeryesJobs sitting in the bounded extraction worker pool, not yet picked up by a worker.
isIdlebooleanyesTrue when every background lane reports 0 in-flight work.
vecInflightintegeryesBackground embedding+vec0-upsert goroutines currently running. When 0 the vector side is quiescent.

No examples provided.

ingestSource ~309

Ingest the delta from a previously connected source, resuming from its saved watermark (cheap incremental pull). Give a connector (local-git, claude-chats, or granola) and, for the file-based ones, repoPath (granola uses a stored API key instead); optionally scope (personal|team), dryRun, maxItems, and maxExtractionCalls. Idempotent: unchanged items are skipped by content hash. Returns a run report with a jobUid. Refuses project scope.

NameTypeReqDescription
connectorstringyesSource connector name. Supported: local-git, claude-chats, granola.
dryRunboolean–Preview only: validate the source and count would-be items WITHOUT writing anything (the consent gate).
maxExtractionCallsinteger–Cap on episodes appended this run, each one downstream extraction. Defaults to 500.
maxItemsinteger–Cap on items considered this run (backfill bound). Defaults to 500.
repoPathstring–Source locator for file-based connectors: a local git repository path (local-git), or an export file path (claude-chats: a .zip bundle or a conversations.json). Omit for granola, which authenticates…
scopestring–Scope to ingest into. Defaults to personal. Project scope is refused: ingested external content is sensitive and project is plaintext.
NameTypeReqDescription
connectorstringyes–
dryRunboolean––
episodesAppendedintegeryes–
itemsAppliedintegeryesItems turned into episodes (or, in a dry run, that WOULD be).
itemsSkippedintegeryesItems skipped because their content hash was unchanged (idempotent re-ingest).
jobUidstring–Job UID; pass to listJobs / cancelJob to track or cancel a long backfill.
streamsarray––

No examples provided.

introspect ~189

Return the ontology you navigate by: the registered relation predicates (edge vocabulary, with functional/non-functional semantics), the entity kinds present (node vocabulary with live counts, plus taxonomy metadata — displayName, description, provenance namespace, extends/parent hierarchy, sameAs external URIs — for kinds in the registry), a namespaces summary (core/user/extension:<name> buckets), and the event types recorded. Custom kinds added at runtime appear under the user or extension:<name> provenance namespace. Call once to learn the vocabulary before filtering neighbors/relations/entities. NOTE: this lists what has been registered or extracted, so it can include rarely- or never-populated predicates — e.g. a role/title is usually an attributes.role string on a works_at/founded edge rather than a populated has_role edge — so confirm a predicate is actually in use (via relations) before relying on it. LLM-free.

Input schema present but exposes no named parameters.

NameTypeReqDescription
entityKindsarrayyesEntity kinds present in the store or registered in the taxonomy, with live counts and optional taxonomy metadata. Includes registered-but-zero-count kinds (e.g. core kinds not yet ingested). Custom k…
eventTypesarrayyesRegistered event-schema kinds the store records. Empty when no ontology registry is wired.
namespacesarrayyesProvenance namespaces aggregated from the registered entity kinds: core (built-in), user (manually added), extension:<name> (plugin-contributed). Predicate provenance joins in a later phase.
predicatesarrayyesRegistered relation predicates — the edge vocabulary for neighbors/relations filtering.
viewsarrayyesCurated read-only views for the query tool — the stable SQL schema. Query these names, not the physical tables.

No examples provided.

lintDocuments ~130

Run a read-only health check over the markdown vault: `orphans` (no graph edges), `deadLinks` (unresolved [[wikilinks]]), `contradictions` (contradicts edges), `danglingEdges` (live link to a deleted doc), `nearDuplicates` (pairs of docs whose chunk embeddings exceed cosine 0.92, non-blocking lint signal only), and `nameCollisions` (documents whose title shadows a non-document entity of the same display name — wikilink resolution silently favours the entity). Takes no arguments; scans the whole vault.

Input schema present but exposes no named parameters.

NameTypeReqDescription
contradictionsarrayyesDocument pairs joined by an active contradicts edge.
danglingEdgesarrayyesActive links from a live document to a DELETED document (a backlink left behind when deleteDocument tombstoned its target). Each entry carries the live 'subjectPath' and the deleted 'targetPath'/'tar…
deadLinksarrayyesDocuments that still carry an unresolved [[wikilink]]; each entry's 'unresolved' array names the exact target strings that resolve to nothing.
nameCollisionsarrayyesDocuments whose title (display name) shadows a non-document entity with the exact same name. Wikilink resolution silently favours the non-document entity in this case; use the vault path or a kind qu…
nearDuplicatesarrayyesPairs of live documents whose chunk embeddings are suspiciously similar (cosine >= 0.92). Non-blocking lint signal only — does NOT prevent writes or imports. Each pair is reported once.
orphansarrayyesDocuments with no inbound or outbound graph edges (isolated notes).

No examples provided.

listDocuments ~123

List vault documents, most-recently-updated first, filtered by `pathPrefix`, `tag`, and/or `pinned`. Bodies are omitted to stay lightweight; call readDocument for one document's full body and edges.

NameTypeReqDescription
limitinteger–Max documents to return (default 50).
pathPrefixstring–Restrict to documents whose path starts with this prefix, e.g. notes/.
pinnedboolean–When true, only pinned documents.
tagstring–Restrict to documents whose frontmatter tags include this value.
NameTypeReqDescription
documentsarrayyesMatching documents, most-recently-updated first. Bodies are omitted; call readDocument for the full body.

No examples provided.

listDupCandidates ~71

List entity pairs the post-consume dedup sweep flagged as likely cross-device duplicates. Auto-merged strong-identifier pairs (same email / username) are not included — only advisory candidates that need human review. Call mergeEntities on a pair to consolidate; use maz review dups for the interactive CLI view.

Input schema present but exposes no named parameters.

NameTypeReqDescription
candidatesarrayyesEntity pairs flagged by the post-consume dedup sweep after cross-device sync. Auto-merged strong-identifier pairs (email, username) do not appear here — they are already consolidated.
totalintegeryesTotal candidate count (may exceed the 200-row page).

No examples provided.

listInsights ~213

List synthesized insights by lifecycle state - the Insight Inbox read surface. Defaults to the hot (live, recall-visible) insights, most-confident first, each carrying its statement, confidence, lifecycle state, and the entity source records it cites (as entities/{uid} citations plus a count). Pass state=demoted, state=dismissed, or state=all to review the rest. Pair with get(insights/{uid}) to inspect one, dismissInsight to dismiss one, and triggerReflection to synthesize more.

NameTypeReqDescription
limitinteger–Maximum insights to return. Defaults to 50.
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
statestring–Which insights to list. "hot" (default) = live, recall-visible insights. "demoted" = decayed out of hot recall. "dismissed" = explicitly dismissed by the user (terminal). "all" = every state.
NameTypeReqDescription
insightsarrayyesInsights in the requested state, most-confident first.

No examples provided.

listJobs ~41

Return the currently-tracked background jobs (running and recent history), optionally filtered by state.

NameTypeReqDescription
stateFilterstring–Optional filter; absent returns every job.
NameTypeReqDescription
jobsarrayyes–

No examples provided.

listPresets ~53

List the presets currently active (steering this agent's operating instructions). Returns name, version, and description for each — read-only. Presets are installed via the `maz preset install` CLI, not by agents.

Input schema present but exposes no named parameters.

NameTypeReqDescription
presetsarrayyesActive presets, ordered by name.

No examples provided.

listSources ~51

List the external source connectors available to ingest from (e.g. local-git) and the resume watermark of each source connected so far (connector, stream, items ingested, last advance time). Read-only.

Input schema present but exposes no named parameters.

NameTypeReqDescription
connectorsarrayyesRegistered connector names available to connectSource/ingestSource.
watermarksarrayyesPer-(connector, stream) resume state for sources connected so far, with a derived freshness status.

No examples provided.

mergeEntities ~117

Merge source entity into target: repoints all relations, facts, and mentions from source to target, then removes the source entity row. Append-only: an entityMerged event is written to the audit log. Returns E_VALIDATION when source and target are the same uid, E_NOT_FOUND when either uid is unknown.

NameTypeReqDescription
sourceEntityUidstringyesULID of the entity to absorb (will be deleted). Required.
targetEntityUidstringyesULID of the surviving entity. Must differ from sourceEntityUid. Required.
NameTypeReqDescription
namestringyesAIP resource name of the surviving (target) entity.
statusstringyesAlways "merged" on success.

No examples provided.

neighbors ~358

Expand an entity's neighborhood up to 6 hops and return the hydrated neighbor entities plus the relations connecting them, each hop tagged direction=outgoing|incoming relative to the seed. LLM-free graph walk: pass a recall anchor as the seed and traverse the structure yourself. The DEFAULT view is point-in-time NOW: only edges valid now and not superseded; pass includeInactive=true for full history, or time-travel with at/asOf. Filter edges by predicate. The `limit` (default 50) caps total neighbors across all hops, so deep walks stay bounded.

NameTypeReqDescription
asOfstring–Transaction-time anchor (RFC 3339 UTC). Ignore edges recorded after this instant.
atstring–Valid-time anchor (RFC 3339 UTC). Walk edges live at this instant. Defaults to now.
depthinteger–Hops to expand. 1 = direct neighbors, 2 = neighbors-of-neighbors, up to 6. Defaults to 1.
includeInactiveboolean–Follow superseded / expired edges too. Off by default.
limitinteger–Maximum neighbors to return across all hops. Defaults to 50.
predicatesarray–Only follow edges with these predicates. Omit to follow any.
scopesarray–Scopes to read from: project, personal, team. Defaults to project+personal. Unknown values are rejected.
seedstringyesEntity to expand from: an entities/{uid} ref (as returned in a recall hit's entities[]), a bare uid, or a display name (resolved case-insensitively; an unknown or ambiguous name returns an error nami…
NameTypeReqDescription
neighborsarrayyes–

No examples provided.

promoteRelation ~167

Promote a proposed relation to asserted: verify an untrusted connector-ingested fact and lift its trust quarantine. A fact extracted from an external source (Granola transcript, Claude-chats export) lands status=proposed — it surfaces in recall but is excluded from supersession until confirmed. Promoting it asserts it, so it then behaves like any user-authored edge. Idempotent: promoting an already-asserted edge is a no-op.

NameTypeReqDescription
namestringyesResource name of the Relation to promote: relations/{uid}, as returned by recall/get/relations/neighbors.
scopestring–Scope the promotion event is written into. Defaults to personal. Use the scope the relation lives in; promoting a team-scope edge requires admitted team membership, else E_PERMISSION.
NameTypeReqDescription
namestringyesResource name of the promoted Relation.
promotedbooleanyestrue when this call flipped a proposed edge to asserted; false when the edge was already asserted (idempotent no-op, no event appended).
statusstringyesAlways "asserted" on success — the relation now carries the authoritative trust posture.

No examples provided.

query ~276

Run a read-only SQL SELECT over the curated views (v_entities, v_relations, v_facts) — the analytical escape hatch for questions the structured entities/count filters can't express. Single statement, SELECT/WITH only; writes are rejected and impossible. Run introspect for the view columns. Scope: results default to project+personal; pass scopes:["team"] to include team rows. The views are pre-filtered to the requested scopes before your SQL runs — no WHERE scope = … clause needed.

NameTypeReqDescription
limitinteger–Maximum rows to return. Defaults to 200, hard-capped at 1000. Rows beyond the cap set truncated=true.
scopesarray–Scope filter: which data partitions to include. Allowed values: project, personal, team. Defaults to [project, personal] when omitted — team rows are hidden unless you pass scopes:["team"]. The curat…
sqlstringyesA single read-only SELECT (or WITH … SELECT) statement. Query the curated views: v_entities, v_relations, v_facts (run introspect for their columns). Writes, multiple statements, PRAGMA/ATTACH and DD…
NameTypeReqDescription
columnsarrayyesResult column names in order.
rowCountintegeryesNumber of rows returned (after the limit cap).
rowsarrayyesResult rows as column→value objects.
truncatedbooleanyesTrue when more rows matched than the limit returned.

No examples provided.

readDocument ~208

Read one vault document by `path` or `documentUid`: its title, verbatim body, frontmatter, tags, its wikilink edges — `links` (what it references: mentions of entities, links_to other docs) and `backlinks` (what references it) — and `observations` (the `- [category] text` lines parsed from the body). Each observation is projected to a durable fact ON THIS DOCUMENT ENTITY, so query them with get(entities/{documentUid}) or `maz fact get <documentUid>`. A document is also an entity, so the returned `document.name` (entities/{uid}) pivots straight into neighbors/relations to walk the unified graph.

NameTypeReqDescription
documentUidstring–Stable document UID (= its entity UID). Provide this OR path (exactly one).
pathstring–Vault-relative path of the document, e.g. notes/project-alpha.md. Provide this OR documentUid (exactly one).
NameTypeReqDescription
backlinksarrayyesIncoming edges (what references this note). Always present; [] when none.
documentobjectyesThe document: path, title, verbatim body, frontmatter, tags, pinned. The name field is the entities/{uid} resource name for pivoting to neighbors/relations.
linksarrayyesOutgoing wikilink edges (what this note references): mentions → entities, links_to → other documents. Always present; [] when none.
observationsarrayyesStructured observations parsed from the body ('- [category] text #tag (context)' lines). EACH is projected to a durable fact on THIS document entity — query them with get(entities/{documentUid}) or '…
unresolvedLinksarrayyesTarget names of [[wikilinks]] in the body that resolve to nothing in the graph (dead links). These have NO edge in 'links' precisely because they did not resolve; surface them to flag a broken refere…

No examples provided.

Install

How do I install the Mazarbul MCP server?

Mazarbul ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 45c720f7a2179be5914ab90ad4cc64416b8fbe5da47e6a5f7080fca3ed68be67; the commands to do that are on this page. If it does not match, do not open it.

mcpb · mazarbul_v0.2.3_linux_amd64.mcpb

Download bundle

Check the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.

SHA-256

45c720f7a2179be5914ab90ad4cc64416b8fbe5da47e6a5f7080fca3ed68be67

macOS / Linux

echo "45c720f7a2179be5914ab90ad4cc64416b8fbe5da47e6a5f7080fca3ed68be67  mazarbul_v0.2.3_linux_amd64.mcpb" | shasum -a 256 -c

Windows (PowerShell)

(Get-FileHash -Algorithm SHA256 .\mazarbul_v0.2.3_linux_amd64.mcpb).Hash -eq "45c720f7a2179be5914ab90ad4cc64416b8fbe5da47e6a5f7080fca3ed68be67"

Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.

Common questions

What is the Mazarbul MCP server?

Mazarbul is an MCP server listed in the public MCP registry as io.github.mo-cmyk/mazarbul. Local-first memory for AI agents: entities, facts, relations and documents with semantic recall. This page covers its MCPB bundle (https://github.com/mo-cmyk/mazarbul/releases/download/v0.2.3/mazarbul_v0.2.3_linux_amd64.mcpb).

Is the Mazarbul MCP server safe to use?

Mazarbul scores 42 out of 100 on VerifyMCP. 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 Mazarbul MCP server expose?

Mazarbul exposes 64 tools: addIdentifier, agentFeedback, cancelJob, captureExternal, connectSource, and 59 more. Their descriptions and schemas cost roughly 16,172 tokens of context every time the server is loaded.

What licence is the Mazarbul MCP server under?

Mazarbul 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.