{"apiVersion":"v1","directorySlug":"recordar-mcp-e28b772d60","title":"Recordari","description":"Recordari gives your AI agents persistent, auditable memory. They pick up where they left off.","pageUrl":"https://www.mcpbundles.com/skills/recordar-mcp-e28b772d60","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://api.recordar.io/mcp","hostedMcpUrl":null,"toolCount":16,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"io.recordar/recordar-mcp-e28b772d60","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"remember","description":"Store one or more new memories (concepts, decisions, findings). Before filing, search for related content first — use the search results to infer the domain: if related memories exist in a domain, file there. Prefer existing domains over creating new ones; only propose a new domain if no related content is found anywhere. Single: pass fields directly — returns {memory, suggested_connections}. Batch: pass {items:[{label,domain,...},...]} — returns {memories:[{memory,suggested_connections},...]}.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"tags":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tags":{"type":"string"},"label":{"type":"string"},"domain":{"type":"string"},"node_kind":{"type":"string"},"transient":{"type":"boolean"},"related_to":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"object","properties":{"id":{"type":"string"},"relationship":{"type":"string"}}}]}},"occurred_at":{"type":"string"},"why_matters":{"type":"string"}}}},"label":{"type":"string"},"domain":{"type":"string"},"node_kind":{"type":"string"},"transient":{"type":"boolean"},"related_to":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"object","properties":{"id":{"type":"string"},"relationship":{"type":"string"}}}]}},"occurred_at":{"type":"string"},"why_matters":{"type":"string"}}},"logicalName":"remember","displayName":"remember","title":"remember","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"recall","description":"Retrieve a memory by ID along with its connections. On failure, content[0].text is JSON: {\"error_class\": \"not_found|retryable|forbidden|internal\", \"message\": \"...\"}. Switch on error_class: retry on retryable, prompt user to check the ID on not_found.","inputSchema":{"type":"object","properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"recall","displayName":"recall","title":"recall"},{"name":"search","description":"Search memories by keyword. The query must use vocabulary that appears in stored labels, descriptions, or tags — not intent summaries or paraphrases. Pass node_kind (space-separated) to list or search within specific kinds — unrelated kinds that happen to match query text are excluded. Omit query with node_kind set to list matching kinds ordered by most-recently-updated. Default limit: 10. Use exact=true for identifiers (ticket numbers, short codes with hyphens) — FTS tokenises hyphens away so '","inputSchema":{"type":"object","properties":{"exact":{"type":"boolean"},"limit":{"type":"integer"},"query":{"type":"string"},"state":{"type":"string"},"domain":{"type":"string"},"memory_id":{"type":"string"},"node_kind":{"type":"string"},"max_distance":{"type":"number"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search","displayName":"search","title":"search"},{"name":"connect","description":"Create one or more typed connections between memories. relationship: connects_to (default) | depends_on | led_to | blocked_by | contradicts | resolved | caused_by | unblocks | is_example_of — or any custom type. relationship=resolved adjudicates a contradiction between the exact from_memory/to_memory ids you pass: it is pure-additive and does NOT remove any existing contradicts connection between the pair — both remain on the record, preserving the full contradicts-then-resolved timeline. \"Works","inputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"verdict":{"type":"string"},"narrative":{"type":"string"},"to_memory":{"type":"string"},"from_memory":{"type":"string"},"relationship":{"type":"string"}}}},"verdict":{"type":"string"},"narrative":{"type":"string"},"to_memory":{"type":"string"},"from_memory":{"type":"string"},"relationship":{"type":"string"},"override_reason":{"type":"string"},"override_confirm":{"type":"boolean"}}},"logicalName":"connect","displayName":"connect","title":"connect","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"disconnect","description":"Remove one or more connections. Single: {id}. Batch: {ids:[id,...]} — returns {results:[{id,success,error}]}.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"ids":{"type":"array","items":{"type":"string"}}}},"logicalName":"disconnect","displayName":"disconnect","title":"disconnect","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"why_connected","description":"Find direct connections between two memories, in either direction. Prefer from_id/to_id when you already have exact ids — resolution is exact-match and errors if a given id has no matching live memory, rather than silently falling back to label search. This is the recommended way to verify an exact pair (e.g. before connect(relationship=resolved)). Use from_label/to_label when you only have a concept in mind, not an id — resolution is a fuzzy substring match against the most recently created can","inputSchema":{"type":"object","properties":{"to_id":{"type":"string"},"domain":{"type":"string"},"from_id":{"type":"string"},"to_label":{"type":"string"},"from_label":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"why_connected","displayName":"why_connected","title":"why_connected"},{"name":"recent","description":"Return recently modified memories, optionally grouped by domain. Pass tags (space-separated) to filter to memories tagged with any of those tags (union match). Pass node_kind (space-separated) to filter to specific kinds (union match, same convention as tags). Pass memory_id to restrict results to memories directly connected to that memory, ordered by updated_at DESC. When both are supplied the intersection is returned (tags AND connected to memory_id). When neither is supplied the existing beha","inputSchema":{"type":"object","properties":{"tags":{"type":"string"},"limit":{"type":"integer"},"domain":{"type":"string"},"memory_id":{"type":"string"},"node_kind":{"type":"string"},"group_by_domain":{"type":"boolean"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"recent","displayName":"recent","title":"recent"},{"name":"history","description":"Return memories ordered chronologically. Default (important_only=false) includes all memories ordered by COALESCE(occurred_at, created_at) ASC. Set important_only=true to return only memories with occurred_at set (the curated decision timeline). Pass memory_id instead of domain to scope the timeline to a single memory's neighbourhood (depth 2 by default, domain-clipped) — useful for understanding how a specific workstream evolved. memory_id takes precedence if both domain and memory_id are suppl","inputSchema":{"type":"object","properties":{"to":{"type":"string"},"from":{"type":"string"},"tags":{"type":"string"},"depth":{"type":"integer"},"domain":{"type":"string"},"memory_id":{"type":"string"},"node_kind":{"type":"string"},"important_only":{"type":"boolean"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"history","displayName":"history","title":"history"},{"name":"orient","description":"Get a bounded orientation snapshot. If stale_count > 0, call audit(mode=stale) before filing new memories. If conflicts_count > 0, call audit(mode=conflicts) to review semantically close memory pairs — candidate-surfacing only, not confirmed contradictions. conflicts_count is a density signal, not a monotonically-decreasing queue: connecting a flagged pair suppresses it, but a later substantive revision to either memory lifts the suppression, so the count can rise again without indicating new dr","inputSchema":{"type":"object","properties":{"scope":{"type":"string"},"topic":{"type":"string"},"domain":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"orient","displayName":"orient","title":"orient"},{"name":"forget","description":"Archive (soft-delete), un-archive, or permanently purge one or more memories. ARCHIVE (default): Only call after explicit unambiguous user confirmation — never on implication or casual mention. If archiving multiple memories, prefer the items array — the same confirmation protocol applies. Single archive: {id, reason}. Batch archive — use this when you have 2 or more confirmed memories to archive at once; more efficient than multiple single calls: {items:[{id,reason},...]} — returns {results:[{i","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"force":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"reason":{"type":"string"}}}},"purge":{"type":"boolean"},"reason":{"type":"string"},"restore":{"type":"boolean"}}},"logicalName":"forget","displayName":"forget","title":"forget","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"revise","description":"IMPORTANT — bulk domain migration: domain moves via revise are for individual corrections only. If the user needs to move many memories between domains, inform the user that bulk migration must be performed via the admin interface (merge_domains) — do not attempt to replicate a merge by looping revise calls. Update one or more existing memories. Omitted fields are unchanged. Single: pass fields directly — returns {updated, connections, suggested_connections} and, when the filing-time threshold i","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"tags":{"type":"string"},"claim":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tags":{"type":"string"},"label":{"type":"string"},"node_kind":{"type":"string"},"transient":{"type":"boolean"},"occurred_at":{"type":"string"},"why_matters":{"type":"string"}}}},"label":{"type":"string"},"domain":{"type":"string"},"node_kind":{"type":"string"},"supersede":{"type":"boolean"},"transient":{"type":"boolean"},"occurred_at":{"type":"string"},"why_matters":{"type":"string"},"override_reason":{"type":"string"},"override_confirm":{"type":"boolean"},"domain_move_reason":{"type":"string"}}},"logicalName":"revise","displayName":"revise","title":"revise","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"suggest_connections","description":"Given a memory ID, return up to limit semantically similar candidates (default 5) from anywhere in the workspace ranked by semantic_distance — not limited to the source memory's domain. Review results for agreement or contradiction with the source memory, not only for connect opportunities. Semantic similarity reflects aboutness, not agreement; the server surfaces candidates that may warrant your review but never asserts they conflict. Each suggestion includes the candidate's domain and semantic","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"limit":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"suggest_connections","displayName":"suggest_connections","title":"suggest_connections"},{"name":"audit","description":"Inspect the health of the knowledge graph. mode=stale: surface drift candidates (contradictions, superseded labels, duplicates, stale open questions, old transient memories, and shadow rows — memories stored under an alternate domain name rather than the canonical domain, making them unreachable by domain-scoped reads). mode=orphans: return memories with no connections. mode=archived: list archived memories — only call forget(restore=true) on any listed memory after explicit unambiguous user con","inputSchema":{"type":"object","properties":{"mode":{"type":"string"},"tags":{"type":"string"},"limit":{"type":"integer"},"state":{"type":"string"},"domain":{"type":"string"},"memory_id":{"type":"string"},"node_kind":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"audit","displayName":"audit","title":"audit"},{"name":"domains","description":"Domain administration and discovery. Default (action=list or omit action): return all domains with at least one live memory and all registered aliases ({domains:[...], aliases:[{alias,canonical_domain},...]}). action=alias: register a new alias ({alias,domain} required) — rejected if the alias name already has live memories (move or archive them first). Synonyms: add, create. action=unalias: delete a registered alias ({alias} required). Synonyms: remove. action=resolve: return the canonical doma","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"alias":{"type":"string"},"action":{"type":"string"},"domain":{"type":"string"},"new_domain":{"type":"string"},"old_domain":{"type":"string"}}},"logicalName":"domains","displayName":"domains","title":"domains","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"visualise","description":"Generate a Mermaid.js flowchart for human visual inspection only. NOT for orphan detection or programmatic analysis — use audit(mode=orphans) to find isolated memories. Output may be truncated for large domains; never infer graph properties (e.g. orphans) from a truncated result. Pass memory_id (memory ID) to see a single memory and all its direct connections. Pass domain to see the full domain graph (most-connected memories first, capped at limit, default 40 max 100). Returns JSON with mermaid,","inputSchema":{"type":"object","properties":{"limit":{"type":"integer"},"domain":{"type":"string"},"memory_id":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"visualise","displayName":"visualise","title":"visualise"},{"name":"significance","description":"Dual-signal importance analysis. Returns four sections, each capped at limit (default 10) and paired with a boolean *_results_truncated signal (declared_results_truncated, structural_results_truncated, uncurated_results_truncated, potentially_stale_results_truncated) — true when that section's count equals limit and more may exist. Call again with a higher limit to get more of the same ranked/ordered list, not a different one:\n- declared: memories explicitly marked significant (occurred_at set),","inputSchema":{"type":"object","properties":{"mode":{"type":"string"},"tags":{"type":"string"},"limit":{"type":"integer"},"domain":{"type":"string"},"memory_id":{"type":"string"},"node_kind":{"type":"string"},"recency_window":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"significance","displayName":"significance","title":"significance"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Recordari&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkucmVjb3JkYXIuaW8vbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Recordari%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.recordar.io%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Recordari%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.recordar.io%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Recordari&connectorUrl=https%3A%2F%2Fapi.recordar.io%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Recordari\" --url \"https://api.recordar.io/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/recordar-mcp-e28b772d60","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/recordar-mcp-e28b772d60/tools/{tool}","mcpServerUrl":"https://api.recordar.io/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/recordar-mcp-e28b772d60?live=1"}