Skip to main content
Glama

Mnemo

A portable, user-level memory layer for AI agents — shared across agents, exposed over MCP, with no embeddings required by default.

Named after Mnemosyne, the goddess of memory. Mnemo is a single-file, portable memory layer that any MCP-capable host can mount. Migrating it is as simple as copying one database file.

Features

  • User-level, cross-agent memory — different agents remember the same you.

  • MCP stdio server — mountable by any Model Context Protocol host.

  • No embeddings by default — a deterministic, auditable, portable blend of SQLite + FTS5 (BM25 full-text) + a lightweight relations table.

  • Optional vectorssqlite-vec + a local bge-small model available as an opt-in (disabled by default) enhancement.

  • Web admin UI — a zero-build local React app to browse, search, edit, delete, inspect audit chains and relation graphs, and run consolidation.

  • Chinese full-text search — write-time segmentation via the built-in Intl.Segmenter (zero dependencies) makes even two-character terms recallable.

Related MCP server: Cortex

Design principles

  1. Hybrid architecture (full-text + relations, vectors optional).

  2. Facts carry a validity period rather than being destructively overwritten.

  3. Agent-generated facts are first-class and stored.

  4. Background consolidation (dedup / conflict expiry / aging).

  5. Everything is readable, editable, and deletable.

Quick start

npm install
npm run build     # tsc -> dist/
npm test          # node --experimental-strip-types --test

Web admin UI

npm run build
npm run ui        # serves http://127.0.0.1:4173  (alias: mnemo-ui)

From the browser you can browse/filter (by scope / kind / subject / tag), run full-text search (two-character CJK terms are recallable), create / edit / soft-delete / hard-delete facts, inspect audit chains (the superseded_by lineage), view the relation graph (SVG), and run consolidation manually (dry-run preview → commit).

  • Backend (src/web.ts): a zero-dependency Node HTTP server (node:http) that reuses store.ts / consolidate.ts to read and write the SQLite database directly, with a REST surface under /api/*. Configurable via MNEMO_UI_PORT (default 4173), MNEMO_UI_HOST (default 127.0.0.1), and MNEMO_DB.

  • Frontend (public/): React 18 loaded from a CDN via importmap, with JSX compiled in the browser by Babel-standalone — no npm dependencies and no build step.

  • The UI and any mounted stdio MCP server share the same database file safely (SQLite WAL, multiple connections).

MCP tools

Seven MCP tools are exposed:

Tool

Purpose

save_memory

Store a fact (with scope / kind / source / validity).

search_memory

BM25 full-text search (CJK-aware).

list_memories

List / filter facts.

update_memory

Edit a fact (keeps the old version as superseded).

forget_memory

Soft or hard delete.

link_memories

Create a typed relation between two facts.

consolidate

Deterministic housekeeping (dedup, conflict expiry, aging).

Tool prefix: mcp__mnemo__*.

Storage & runtime

  • Storage: better-sqlite3 (prebuilt binary, no compilation) + FTS5 (unicode61) + a fact_tags table + a relations table; opened with WAL, busy_timeout, and foreign_keys on.

  • Chinese retrieval: write-time segmentation with Intl.Segmenter (zero dependencies) so two-character words are recallable.

  • The five principles in practice: source ∈ {user, agent}; valid_from / valid_until / superseded_by (old facts are marked invalid, never dropped); soft and hard delete; dedup_key-based conflict expiry; UTC timestamps throughout.

  • The runtime database defaults to ~/.dsh/mnemo.db and is independent of the code location; override it with the MNEMO_DB environment variable.

Mounting in an MCP host (stdio)

mnemo:
  command: node
  args: ["<path-to>/Mnemo/dist/index.js"]
  env:
    MNEMO_DB: "~/.dsh/mnemo.db"   # shared database; this is also the default

Build first (npm install && npm run build to produce dist/index.js), then point your host's MCP configuration at it. The stdio transport ships with the MCP SDK, so mounting works out of the box.

Documentation

  • docs/design.md — full design document (storage schema, MCP tool interface, consolidation, injection strategy, milestones).

License

MIT

Available Tools

7 tools
consolidateA

Phase A 机械整理记忆(无 LLM,确定性):去重(内容重复合并,保留 user/高 confidence/新)、过期清理(episodic 超保留期软删;user 明示永不清)。默认 dry_run=true 只报告计划不落库。LLM 蒸馏(Phase B)由宿主 agent 另行编排。

ParametersJSON Schema
NameRequiredDescriptionDefault
dedupNo是否去重,默认 true
scopeNo限定 scope;缺省处理全部
dry_runNo默认 true:只报告将做的变更,不落库
episodic_retention_daysNoepisodic 保留天数,默认 90

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description alone must disclose behavior, and it does so richly: deterministic/no-LLM execution, dedup merge rules (kep user/high-confidence/newer), episodic soft-deploy past retention period, user memories never cleared, and default dry_run=true meaning no DB writes. These are safety-critical behaviors an agent needs before invoking a mutating maintenance tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with zero filler. The first sentence front-loads the core purpose and policies, the second states the critical safety default (dry_run), and the third excludes the out-of-scope LLM phase. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity tool with no annotations and no output schema, the description covers purpose, behavior, parameter semantics, and safe defaults thoroughly, and it clarifies the Phase A/Phase B rapport. The remaining gaps are the structure of the dry-run report (no output schema exists) and an explicit statement that dry_run=false commits the changes — both minor but left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, giving a baseline of 3. The description adds meaning beyond the schema by explaining why episodic_retention_days exists and what it applies to (episodic soft-deletes past retention; user memories are never cleared) and by spelling out the dedup merge policy that makes dedup=true semantically meaningful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete, specific operation: deterministic, non-LLM mechanical memory consolidation consisting of two distinct passes — content deduplication with an explicit merge policy (keep user/high-confident/newer) and expiry-based cleanup with soft-delete semantics. This clearly separates it from the sibling CRUD/link tools (save, search, list, update, forget, link), none of which perform batch maintenance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: this is the deterministic Phase A maintenance operation, and it explicitly draws a boundary by stating that LLM distillation (Phase B) is orchestrated separately by the host agent — an implicit when-not. However, it does not explicitly name sibling alternatives or state conditions such as 'use forget_memory for single-record deletion instead,' so the routing is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forget_memoryA

遗忘事实。hard=false(默认)软删除;hard=true 物理删除(GDPR,级联清理关系/标签)。

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
hardNotrue=硬删除(不可恢复)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of explaining destructive behavior. It clearly discloses the default soft-delete behavior, physical deletion for GDPR, and cascading cleanup of relationships/tags, which is strong transparency for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence delivers the action, default behavior, alternative mode, and important side effects. Every clause adds information, and the most important scoping detail (hard=false default) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter deletion tool with no output schema, the description covers the core decision point (hard vs soft) and consequential behavior (GDPR, cascade cleanup). It could be more complete by stating what 'id' refers to and what soft-deleted facts look like afterward, but it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, so the description must compensate. It adds meaningful semantics to the 'hard' parameter: default value, soft-delete meaning, GDPR context, and cascading effects. However, the required 'id' parameter remains undocumented beyond its integer type; its meaning as a memory/fact identifier is only implied by the tool name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('遗忘') and resource ('事实'), and the soft/hard delete distinction differentiates it from sibling tools like update_memory or search_memory. Even without context, an agent can tell that this tool removes memories rather than retrieving or modifying them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the difference between soft and hard deletion but provides no explicit guidance on when to choose this tool over alternatives such as update_memory or consolidate. There is no mention of when not to use it or which sibling tool handles related needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_memoriesA

按条件列出记忆(结构化,可读/审计),不做全文匹配。默认只列当前有效事实。

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
kindNo
limitNo
scopeNo
subjectNo
include_expiredNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It does reveal meaningful defaults (only current valid facts) and an important exclusion (no full-text matching). However, it does not disclose whether the operation is read-only, what the output structure is, how include_expired changes behavior, or any pagination/sorting behavior—leaving a moderate transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact Chinese sentence that front-loads the core purpose, then adds the distinguishing non-full-text qualifier and the default-behavior note. Every clause earns its place, and there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, 0% schema description coverage, no annotations, and no output schema, the description is far from complete. It covers the primary purpose and one default behavior, but leaves parameter meanings, return format, and operational semantics largely unexplained, making it insufficient for correct invocation in many cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain any of the six parameters (tag, kind, limit, scope, subject, include_expired). The only implicit hint is that the default filter for current valid facts relates to include_expired. This is insufficient compensation for the complete lack of parameter documentation in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists memories by conditions, specifies that it is structured/readable/auditable, and explicitly notes that it does not do full-text matching—which distinguishes it from the sibling search_memory. The verb 'list' and resource 'memories' make the operation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is for structured filtering, not full-text search, and it defaults to returning only currently valid facts. It implies a division of labor with the search_memory sibling but does not explicitly name the alternative or state hard exclusion conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_memoryA

写入一条记忆事实。content 为明文(人可读)。给定 dedup_key 时,同 (scope,subject,kind,dedup_key) 的旧事实会被自动标记失效(保留审计链)。

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo类型,默认 fact
tagsNo
scopeNo归属范围:'user'(默认,共享) | 'agent:dsh' | 'project:<key>'
sourceNo来源,默认 agent
contentYes明文事实内容
subjectNo归属实体,如 'user'、项目名
dedup_keyNo去重/冲突键:同键的新事实使旧事实失效
confidenceNo
valid_fromNo生效时间 ISO8601 UTC,默认现在

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses the most important behavioral traits: content must be plaintext/human-readable, and providing dedup_key triggers automatic invalidation of prior facts matching (scope, subject, kind, dedup_key) while retaining the audit chain — indicating a soft-invalidate rather than physical delete. It does not cover duplicate behavior without dedup_key or response semantics, but the core side-effect contract is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste: purpose first, then the content constraint, then the dedup edge case. Every sentence adds distinct information and the most important behavioral caveat appears immediately after the purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema and no annotations, the description covers the core operation and the trickiest behavior (dedup invalidation), but leaves gaps: no return value or acknowledgment behavior, no statement about what happens when saving without dedup_key (are duplicates allowed?), and no mention of how valid_from, source, or confidence interact with the invalidation logic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 78%, so the schema already documents most parameters. The description adds real value beyond it: it specifies that content must be human-readable plaintext and, crucially, defines the invalidation matching tuple as (scope, subject, kind, dedup_key), which is more precise than the schema's vague '同键' (same key).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('写入一条记忆事实' / write a memory fact) that clearly establishes the create operation, distinguishing it from read siblings (search_memory, list_memories), mutation siblings (update_memory, forget_memory), and relation/consolidation siblings. The dedup_key invalidation sentence adds a signature behavior unique to this tool, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call this when persisting a new memory fact, and reuse dedup_key to supersede an old fact while preserving the audit trail. However, there is no explicit guidance contrasting it with update_memory (modify existing facts) or forget_memory (remove facts), and no statement about when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_memoryA

BM25 全文检索记忆(中文经 Intl.Segmenter 分词,2 字词可召回)。默认只返回当前有效事实。

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo按单个 tag 过滤
kindNo
limitNo
queryYes检索词(中文/英文/混合)
scopeNo
subjectNo
include_expiredNo是否包含已失效/软删事实(审计)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key behavioral traits: BM25 retrieval, Chinese tokenization via Intl.Segmenter, two-character term recallability, and default filtering of current valid facts. These go beyond the tool name and help agents understand recall limits and result scoping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise — two short sentences with no filler. The key verb and resource come first, followed by impactful behavioral details and default behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no annotations and no output schema, the description provides core retrieval semantics, tokenization behavior, and the default validity filter. It does not describe return format or filter interaction, but the required query is clear and optional parameters are mostly self-evident from schema names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 43%, so the description adds meaningful semantics beyond the schema by explaining query tokenization and default fact validity. It does not explain optional filter semantics such as scope or subject, but their names and schema enum/constraints provide reasonable guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — 'BM25 全文检索记忆' (BM25 full-text search memory) — and adds the important scoping detail that by default only currently valid facts are returned. This distinguishes it clearly from sibling tools like list_memories or save_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you need full-text search over memory, rather than exact listing or mutation. However, it does not explicitly state when to prefer this over list_memories or mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_memoryA

修改事实。改 content 会保留旧版本(标失效+superseded_by)并创建新版本(审计链);只改 tags/confidence/subject 则原地更新。

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes要修改的 fact id
tagsNo
contentNo
subjectNo
dedup_keyNo
confidenceNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and reveals the most important side effects: changing content preserves the old version (marked invalid + superseded_by) and creates a new version for the audit chain, while changing tags/confidence/subject updates in place. It does not specify behavior for dedup_key changes or possible errors, so it is not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with no filler. The core purpose is front-loaded, and the behavioral distinction between content changes and metadata changes is stated precisely and efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the main behavioral risk: versioning and the audit chain. It also clarifies which fields are updated in place. Minor gaps remain around dedup_key semantics, return values, and failure behavior, but the essential information needed to call the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 17%, so the description must compensate for missing parameter documentation. It adds meaningful semantics for content, tags, confidence, and subject by explaining whether each triggers versioning or in-place updates, but it says nothing about dedup_key and adds no detail about id. This is partial compensation, not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('修改') and resource ('事实'), and goes beyond the tool name by explaining the actual update semantics. It clearly distinguishes update_memory from sibling tools like save_memory and forget_memory through the versioning versus in-place behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this tool when modifying an existing fact. However, it does not explicitly say when to prefer update_memory over save_memory or forget_memory, nor does it mention alternatives or exclusions. The conditional guidance about content versus metadata changes is useful but not a full when-to-use/when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedconsolidate
    • First observedforget_memory
    • First observedlink_memories
    • First observedlist_memories
    • First observedsave_memory
    • First observedsearch_memory
    • First observedupdate_memory

TDQS

A3.7/5.0
Disambiguation5/5

Each tool maps to a distinct memory operation: create, search, list, update, delete, link, and maintain. The overlap between search_memory and list_memories is clearly resolved by describing full-text vs structured filtering, and update_memory is distinct from save_memory due to versioning semantics.

Naming Consistency4/5

Most tools follow a clear verb_noun snake_case pattern: save_memory, search_memory, update_memory, forget_memory, link_memories. Minor deviations include the plural 'memories' for list/link while others use singular 'memory', and consolidates is a bare verb without a noun object.

Tool Count5/5

Seven tools is well-scoped for a memory server: it covers ingestion, retrieval, structured listing, mutation, deletion, relationships, and maintenance. Each tool has a clear role and none feels redundant or unnecessary.

Completeness4/5

The core memory lifecycle is well covered: save, search, list, update, soft/hard delete, link, and consolidation. The main gap is that relationships can be created via link_memories but there is no explicit unlink or relationship-query tool, and there is no dedicated get_memory_by_id, though list_memories likely fills that role.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent memory for AI coding agents via MCP, enabling agents to store and semantically recall facts, events, and lessons across sessions, all running locally without cloud dependencies.
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local-first AI memory layer with hybrid retrieval and brain-inspired namespaces. Enables agents to save, search, and manage memories directly via MCP tools.
    5
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Provides AI agents with a human-inspired memory layer via MCP, enabling episodic and semantic memory recall, forgetting curves, consolidation, and contradiction detection. It integrates with MCP clients to offer local-first, dependency-free memory management.
    98
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bladeJumper/Mnemo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server