Skip to main content
Glama

Memoreei

Remember every conversation you've ever had.

Python CI License: MIT PyPI codecov

Memoreei is an open-source MCP server that gives AI assistants a searchable memory of your entire personal communication history. It connects to 13 platforms so far — Discord, WhatsApp, Telegram, Signal, iMessage, Gmail, Slack, Instagram, and more — ingests your messages, and indexes them with a hybrid search engine combining keyword and semantic vector search. Any AI client that supports the Model Context Protocol can then query your memories as naturally as asking a question.

The problem it solves: every AI assistant starts each conversation with no knowledge of who you are, what you've discussed, or what matters to you. Memoreei changes that by turning years of your personal conversations into a living, searchable knowledge base — surfaced exactly when your AI needs it.

"What's my friend's favorite restaurant?"
"What did my sister say she wanted for her birthday?"
"How many times have I asked Dory to send that link again?"

Your AI can answer these now. Without Memoreei, it can't.


It's Also a Platform

Memoreei isn't just a memory server — any app can be built on top of it. Two of our favorites:

  • Movie Ring — Ranks movies based on what your friends are actually talking about in the group chat that never shuts up.

  • Contact Dossier — A personal CRM that builds itself from your conversations. No data entry required.


Related MCP server: Local Brain MCP

Key Features

  • Local-first — all data stays in a single SQLite file on your machine

  • 13 sources and counting — WhatsApp, Discord, Telegram, Slack, Matrix, iMessage, Signal, Gmail, Instagram, Mastodon, and more

  • MCP-native — 19 tools exposed via the Model Context Protocol, usable by any MCP client

  • Hybrid search — BM25 keyword search + vector semantic search, fused with Reciprocal Rank Fusion

  • No mandatory cloud — default embedding model runs fully offline via ONNX

  • CLI + Dockerpip install memoreei and you're running in under a minute


Supported Sources

Source

Type

Status

WhatsApp (.txt export)

File import

✅ Stable

Discord (bot API)

Live sync

✅ Stable

Discord Data Package (GDPR export)

File import

✅ Stable

Telegram (bot API)

Live sync

✅ Stable

Slack (Web API)

Live sync

✅ Stable

Matrix (Client-Server API)

Live sync

✅ Stable

Mastodon (REST API)

Live sync

✅ Stable

Gmail (IMAP)

Live sync

✅ Stable

Instagram DMs (GDPR export)

File import

✅ Stable

Facebook Messenger (GDPR export)

File import

✅ Stable

SMS Backup & Restore XML

File import

✅ Stable

Generic JSON / JSON-lines

File import

✅ Stable

Generic CSV / TSV

File import

✅ Stable

iMessage (macOS)

Live sync

🧪 Beta

Signal Desktop

Live sync

🧪 Beta

Manual notes (add_memory)

MCP tool

✅ Stable

File import — one-time or repeated ingest from an exported file. Live sync — incremental sync via API, checkpoint-based (only fetches new messages).


Quick Start

pip install memoreei
memoreei setup           # interactive — pick connectors, enter credentials
memoreei sync            # pull messages from configured sources
memoreei serve           # start the MCP server

Or from source:

git clone https://github.com/CalebChristiansen/Memoreei.git
cd Memoreei
python -m venv .venv && source .venv/bin/activate
pip install -e .

Connect to Your AI

Add to your MCP client config (e.g. .mcp.json, claude_desktop_config.json, or wherever your client reads MCP server definitions):

{
  "mcpServers": {
    "memoreei": {
      "command": "/path/to/memoreei/.venv/bin/python",
      "args": ["-m", "memoreei.server"],
      "cwd": "/path/to/memoreei"
    }
  }
}

If you installed via pip install memoreei, the memoreei-server command is also available:

{
  "mcpServers": {
    "memoreei": {
      "command": "memoreei-server"
    }
  }
}

MCP Tools

All 19 tools are available to any connected MCP client.

Search & Retrieval

search_memory

Hybrid keyword + semantic search across all ingested memories.

Parameter

Type

Default

Description

query

string

required

Natural language search query

limit

int

10

Max results to return

source

string

Filter by source, e.g. whatsapp:friends, discord:1234567890

participant

string

Filter by sender name (case-insensitive)

after

string

ISO date lower bound, e.g. 2026-01-01

before

string

ISO date upper bound

get_context

Fetch surrounding messages for a specific memory — essential for understanding the conversation around a result.

Parameter

Type

Default

Description

memory_id

string

required

Memory ID (ULID) from search results

before

int

5

Messages to include before the target

after

int

5

Messages to include after the target

add_memory

Manually store a note, fact, or anything worth remembering. Auto-embeds content immediately.

Parameter

Type

Default

Description

content

string

required

Text to remember

source

string

"manual"

Source label

metadata

dict

Optional key-value pairs

list_sources

Inventory all ingested sources with message counts.

{
  "whatsapp:friends": 1842,
  "discord:1234567890": 391,
  "telegram:-100987654321": 227,
  "manual": 12
}

File Import Tools

ingest_whatsapp

Import a WhatsApp chat export .txt file. Handles multi-line messages, media placeholders, and deduplication on re-import.

Parameter

Type

Description

file_path

string

Path to the WhatsApp .txt export file

import_discord_package

Import a Discord GDPR data export (all channels and DMs). Accepts a ZIP file or extracted folder.

Request your data at: Discord Settings → Privacy & Safety → Request All of My Data

Parameter

Type

Description

package_path

string

Path to extracted folder or ZIP file

import_messenger

Import Facebook Messenger messages from a GDPR data download (JSON format).

Download at: Facebook Settings → Your Information → Download Your Information

Parameter

Type

Description

data_path

string

Path to the extracted folder containing messages/inbox/

import_instagram

Import Instagram DMs from a GDPR data download (JSON format).

Download at: Instagram Settings → Accounts Center → Your Information → Download Your Information

Parameter

Type

Description

data_path

string

Path to the extracted folder containing your_instagram_activity/

import_sms_backup

Import SMS/MMS messages from an Android SMS Backup & Restore XML file.

Parameter

Type

Description

file_path

string

Path to the XML backup file

import_json_file

Import messages from any JSON file. Supports JSON arrays, JSON-lines, and wrapped objects. Covers Google Chat takeout, Google Hangouts, LinkedIn data, and custom formats.

Parameter

Type

Default

Description

file_path

string

required

Path to the JSON or JSON-lines file

content_field

string

required

Field name containing the message text

sender_field

string

Field name for sender name

timestamp_field

string

Field name for timestamp (auto-detects format)

source_label

string

"json-import"

Tag for imported messages

import_csv_file

Import messages from any CSV or TSV file. Auto-detects delimiter (comma, tab, semicolon). Covers LinkedIn exports and any custom spreadsheet format.

Parameter

Type

Default

Description

file_path

string

required

Path to the CSV/TSV file

content_column

string

required

Column name for message text

sender_column

string

Column name for sender

timestamp_column

string

Column name for timestamp

source_label

string

"csv-import"

Tag for imported messages


Live Sync Tools

All sync tools use checkpoint-based incremental sync — only new messages are fetched on subsequent runs.

sync_discord

Sync messages from a Discord channel via the bot API.

Parameter

Type

Default

Description

channel_id

string

DISCORD_CHANNEL_ID env var

Discord channel ID

sync_telegram

Sync messages received by a Telegram bot via getUpdates. Bot must be a member of the target group or have received DMs.

Parameter

Type

Default

Description

chat_id

string

TELEGRAM_CHAT_ID env var

Chat ID (positive = DM, negative = group). Syncs all if omitted.

sync_matrix

Sync messages from a Matrix room using the Client-Server API.

Parameter

Type

Default

Description

room_id

string

MATRIX_ROOM_ID env var

Matrix room ID, e.g. !abc123:matrix.org

sync_slack

Sync messages from a Slack channel via the Web API (conversations.history). Requires bot token with channels:history and users:read scopes.

Parameter

Type

Default

Description

channel_id

string

SLACK_CHANNEL_ID env var

Slack channel ID, e.g. C1234567890

sync_email

Sync Gmail messages via IMAP. Uses per-folder UID checkpointing.

Parameter

Type

Default

Description

folder

string

"INBOX"

IMAP folder, e.g. [Gmail]/Sent Mail

max_emails

int

200

Maximum emails per sync

sync_mastodon

Sync Mastodon posts. Public and hashtag timelines require no authentication.

Parameter

Type

Default

Description

instance

string

MASTODON_INSTANCE env var

Instance URL, e.g. https://fosstodon.org

hashtag

string

MASTODON_HASHTAG env var

Hashtag without #, or omit for public timeline

access_token

string

MASTODON_ACCESS_TOKEN env var

OAuth token (optional, for home timeline)

sync_imessage

🧪 Beta — macOS only. Requires Full Disk Access for Terminal in System Settings → Privacy & Security.

Sync iMessage/SMS conversations from ~/Library/Messages/chat.db (read-only).

Parameter

Type

Description

chat_name

string

Optional — filter by contact name or identifier (e.g. +1234567890)

sync_signal

🧪 Beta — requires pysqlcipher3. Signal Desktop must be installed.

Sync Signal Desktop messages from the local encrypted SQLCipher database. Default paths: ~/.config/Signal/sql/db.sqlite (Linux), ~/Library/Application Support/Signal/sql/db.sqlite (macOS).

Parameter

Type

Description

conversation_id

string

Optional — filter by conversation ID, name, or phone number


Utility Tools

refresh_memory

Trigger an immediate sync of all configured sources. Returns count of new messages.

sync_all

Sync every configured connector and return counts per source.


CLI Reference

# Interactive setup — configure connectors, writes to .env
memoreei setup             # pick from a list (spacebar to select, enter to confirm)
memoreei setup gmail       # configure a specific connector directly

# Start the MCP server (stdio transport, default)
memoreei serve

# Start with SSE transport (for HTTP clients)
memoreei serve --sse --port 8080

# Show DB stats: message counts, sources, last sync times
memoreei status

# Sync all configured sources
memoreei sync

# Sync a specific source
memoreei sync discord
memoreei sync telegram
memoreei sync matrix
memoreei sync slack
memoreei sync email
memoreei sync mastodon

# Search from the terminal
memoreei search "API redesign notes"
memoreei search "printer issue" --limit 5 --source whatsapp:friends

# Import files
memoreei import-whatsapp /path/to/WhatsApp\ Chat.txt
memoreei import-sms /path/to/sms-backup.xml
memoreei import-discord-package /path/to/discord-package.zip

# Show current configuration (tokens masked)
memoreei config

Architecture

 ┌──────────────────────────────────────────────────────────────────────┐
 │                          Your Data Sources                           │
 │                                                                      │
 │  File Imports                          Live Sync (API)               │
 │  ─────────────────────────────         ──────────────────────────    │
 │  WhatsApp .txt  Instagram JSON         Discord    Telegram           │
 │  Messenger JSON SMS Backup XML         Slack      Matrix             │
 │  Discord ZIP    Generic JSON/CSV       Gmail      Mastodon           │
 │                                        iMessage   Signal             │
 └──────────────┬───────────────────────────────┬─────────────────────┘
                │                               │
                ▼                               ▼
 ┌──────────────────────────────────────────────────────────────────────┐
 │                        Memoreei MCP Server                           │
 │                                                                      │
 │  ┌────────────────────┐  ┌──────────────────┐  ┌─────────────────┐  │
 │  │    Connectors      │  │  Hybrid Search   │  │   MCP Tools     │  │
 │  │                    │  │                  │  │                 │  │
 │  │  13 sources        │  │  FTS5 (BM25)     │  │  search_memory  │  │
 │  │  file + live sync  │  │  + vector cosine │  │  get_context    │  │
 │  │  checkpoint-based  │  │  + RRF fusion    │  │  add_memory     │  │
 │  │  dedup on import   │  │                  │  │  list_sources   │  │
 │  │                    │  └────────┬─────────┘  │  ingest_*       │  │
 │  │                    │           │            │  import_*       │  │
 │  │                    │           │            │  sync_*         │  │
 │  │                    │  ┌────────▼──────────┐ │  refresh_memory │  │
 │  │                    │  │  SQLite Database  │ │  sync_all       │  │
 │  │                    │  │  memories + FTS5  │ └────────┬────────┘  │
 │  └────────────────────┘  │  embeddings BLOB  │          │           │
 │                          │  sync checkpoints │          │           │
 │                          └───────────────────┘          │           │
 └────────────────────────────────────────────────────────┼────────────┘
 │                                                          │ stdio / SSE
                                                          ▼
                                               ┌─────────────────────┐
                                               │    MCP Clients      │
                                               │                     │
                                               │  Any AI assistant   │
                                               │  that speaks MCP    │
                                               └─────────────────────┘

How Hybrid Search Works

Memoreei runs two searches in parallel and fuses the results:

Query: "that weird API rate limit issue"
         │
         ├──▶ FTS5 BM25 keyword search
         │    Matches "API", "rate", "limit" — fast, exact
         │    Returns ranked list of IDs
         │
         └──▶ Vector search (cosine similarity)
              Matches "throttling", "429 errors", "backoff"
              Returns ranked list of IDs
                  │
                  ▼
         Reciprocal Rank Fusion (RRF)
         ─────────────────────────────
         score(item) = Σ  1 / (60 + rank_i)
                        i ∈ {keyword_rank, vector_rank}

         Items in BOTH result sets are boosted.
         Items in only one set still contribute.
         Top N returned, then filtered by source/participant/date.

Why RRF? Rank-based fusion requires no score normalization across different scales. The constant k=60 is the standard default from the original paper and empirically outperforms weighted linear combinations.

Default embedding model: BAAI/bge-small-en-v1.5 via FastEmbed — 384-dimensional vectors, ~23 MB ONNX model, runs fully offline.


Configuration

Copy .env.example to .env and fill in the credentials for the sources you want to use. Unused connectors can be left blank. Or just run memoreei setup and it'll walk you through it.

Core

Variable

Default

Description

EMBEDDING_PROVIDER

fastembed

fastembed (local ONNX, no API key) or openai

OPENAI_API_KEY

Required only if EMBEDDING_PROVIDER=openai

MEMOREEI_DB_PATH

./memoreei.db

SQLite database path

AUTO_SYNC

false

Enable background sync loop on server start

AUTO_SYNC_INTERVAL

3600

Background sync interval in seconds

Discord

Variable

Description

DISCORD_BOT_TOKEN

Bot token from Discord Developer Portal

DISCORD_CHANNEL_ID

Default channel ID for sync_discord

Telegram

Variable

Description

TELEGRAM_BOT_TOKEN

Bot token from @BotFather

TELEGRAM_CHAT_ID

Default chat ID (positive = DM, negative = group)

Matrix

Variable

Description

MATRIX_HOMESERVER

Homeserver URL, e.g. https://matrix.org

MATRIX_ACCESS_TOKEN

User access token

MATRIX_ROOM_ID

Default room ID, e.g. !abc123:matrix.org

Slack

Variable

Description

SLACK_BOT_TOKEN

Bot token (xoxb-...), requires channels:history + users:read

SLACK_CHANNEL_ID

Default channel ID, e.g. C1234567890

Gmail

Variable

Description

GMAIL_EMAIL

Gmail address

GMAIL_APP_PASSWORD

App Password (required if 2FA enabled)

Mastodon

Variable

Default

Description

MASTODON_INSTANCE

https://mastodon.social

Instance URL

MASTODON_HASHTAG

Default hashtag (without #)

MASTODON_ACCESS_TOKEN

OAuth token (optional, for home timeline)

iMessage (macOS only)

Variable

Default

Description

IMESSAGE_DB_PATH

~/Library/Messages/chat.db

Override path to chat.db

Signal Desktop

Variable

Description

SIGNAL_DB_PATH

Override path to Signal's db.sqlite

SIGNAL_CONFIG_PATH

Override path to Signal's config.json


Privacy

Local-first by design.

  • All data stored in a single SQLite file on your machine

  • Default embedding model (FastEmbed) runs entirely offline via ONNX — zero network calls

  • OpenAI embeddings are strictly opt-in (EMBEDDING_PROVIDER=openai)

  • No telemetry, no analytics, no cloud sync

  • Your messages never leave your machine in the default configuration

What requires network access:

  • Live sync connectors (Discord, Telegram, Slack, Matrix, Gmail, Mastodon) make outbound API calls to those services

  • EMBEDDING_PROVIDER=openai sends message text to OpenAI's API for embedding

The .env file and memoreei.db are in .gitignore.


Docker

docker build -t memoreei .
docker run -v ./data:/data -e MEMOREEI_DB_PATH=/data/memoreei.db memoreei serve

Or with docker-compose:

docker-compose up

Contributing

See CONTRIBUTING.md for guidelines on adding new connectors, running tests, and submitting pull requests.


License

MIT

Available Tools

21 tools
add_memoryA

Add a manual memory/note to your personal memory store.

Args: content: The text content to remember source: Source label for this memory (default: 'manual') metadata: Optional key-value metadata to attach

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
sourceNomanual
metadataNo

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description only indicates a write operation without detailing side effects, persistence, auth requirements, or potential limits. Insufficient for full behavioral clarity.

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

Conciseness4/5

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

The description is concise and well-structured with a clear purpose sentence and parameter list. No unnecessary content, though could front-load the first sentence more.

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 simple 3-parameter tool with no output schema, the description covers purpose and parameters but lacks return value info and constraints like content length limits. Adequate but not comprehensive.

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 0%, but the description explains all three parameters: content as text, source with default, and metadata as key-value pairs. Adds meaning beyond the schema, though metadata format could be more precise.

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 it adds a manual memory/note to the personal memory store, and it is distinct from sibling import/sync tools that pull data from external sources.

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 for storing manual notes but provides no explicit guidance on when to use over alternatives or when not to use. Minimal direction for an agent.

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

get_contextA

Get surrounding messages/context for a specific memory.

Args: memory_id: The ID of the memory to get context for before: Number of messages before this one to include (default: 5) after: Number of messages after this one to include (default: 5)

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
beforeNo
afterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided, so description must cover behavioral traits. It states a read operation ('Get') with no side effects, adequate but lacks details like rate limits or source constraints.

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

Conciseness4/5

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

Description is brief with clear purpose first, followed by parameter list; no unnecessary words, though the 'Args:' label could be omitted for greater conciseness.

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?

Tool is simple with 3 parameters, all explained; output schema exists so return values are covered. Description is sufficient for the complexity.

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 0%, but description explains all three parameters (memory_id required, before/after with defaults), adding meaning beyond type and default values.

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?

Description uses specific verb 'Get' and resource 'surrounding messages/context for a specific memory', clearly differentiating from siblings like search_memory or add_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?

Description implies usage when a memory_id is known and contextual messages are needed, but no explicit when-to-use or alternatives are mentioned.

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

import_csv_fileA

Import messages from any CSV file. Provide column names for your data format.

Auto-detects delimiter (comma, tab, semicolon). Supports header rows. Covers LinkedIn exports, any spreadsheet or custom CSV format.

Args: file_path: Path to the CSV, TSV, or delimited file content_column: Column name containing the message text (required) sender_column: Column name containing the sender name (optional) timestamp_column: Column name containing the timestamp (optional, auto-detects format) source_label: Label to tag imported messages with (default: 'csv-import')

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
content_columnYes
sender_columnNo
timestamp_columnNo
source_labelNocsv-import

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral disclosure. It mentions auto-detection of delimiter and support for headers, but lacks details on error handling, file size limits, duplicate handling, or side effects. The description provides moderate transparency.

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

Conciseness4/5

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

The description is well-structured with a summary line, followed by additional details and parameter documentation. It is efficient but slightly verbose in listing example sources. Most sentences add value.

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?

Given 5 parameters (2 required) and no output schema, the description covers parameter usage and general behavior. However, it omits details on return values, success/failure indications, and prerequisites. While adequate, it could be more complete.

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

Parameters5/5

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

The JSON schema has 0% description coverage, but the description's Args section thoroughly explains each parameter, including required ones like content_column and optional like timestamp_column with auto-detection. It adds significant meaning beyond 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 'Import messages from any CSV file,' specifying the action (import) and resource (messages from CSV). It also lists supported formats and provides examples like LinkedIn exports, differentiating it from sibling import tools for other formats.

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 for CSV files and mentions specific sources, but does not explicitly state when to use alternatives (e.g., import_json_file) or provide conditions for not using this tool. Some guidance on exclusion is missing.

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

import_discord_packageA

Import a Discord Data Package (GDPR export). Imports all messages from all channels and DMs.

Request your data at Discord Settings > Privacy & Safety > Request All of My Data. Once downloaded, extract the ZIP or pass it directly — both are supported.

Args: package_path: Path to extracted data package folder or ZIP file

ParametersJSON Schema
NameRequiredDescriptionDefault
package_pathYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains that all messages from all channels and DMs are imported and that both folder and ZIP formats are accepted, but it does not disclose potential side effects like processing time, size limits, or whether the import overwrites existing data.

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 extremely concise—four sentences that get straight to the point. It front-loads the purpose, then provides user guidance, and ends with parameter details. No unnecessary words.

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 single-parameter tool with no output schema, the description covers the essentials: what it does, how to get the data, and the parameter format. It does not explicitly state the outcome (e.g., that data is added to memory), but sibling names like add_memory provide implicit context.

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?

The input schema has 0% description coverage, so the description must compensate. The Args section adds meaning by stating that 'package_path' can be a path to an extracted folder or a ZIP file, clarifying the acceptable formats beyond the schema's minimalist title.

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 verb 'Import' and the resource 'Discord Data Package (GDPR export)', and distinguishes it from sibling tools like import_csv_file or import_messenger by specifying its Discord-specific origin.

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?

It provides context on how to obtain the data (Discord Settings > Privacy & Safety > Request All of My Data) and notes that both extracted folders and ZIP files are supported. However, it does not explicitly state when to use this tool over alternatives or 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.

import_instagramA

Import Instagram DMs from a data download (GDPR export, JSON format). Download at: Instagram Settings > Accounts Center > Your Information > Download Your Information. Args: data_path: Path to the extracted Instagram data folder (containing your_instagram_activity/)

ParametersJSON Schema
NameRequiredDescriptionDefault
data_pathYes

TDQS

A4/5.0
Behavior2/5

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

No annotations; description does not disclose side effects (e.g., overwriting, idempotency), relying only on 'import' as a vague action.

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?

Two sentences plus an args line, no wasted words, efficiently conveys purpose and argument.

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?

Covers source format, acquisition steps, and parameter description; lacks error handling and output behavior, but adequate for a single-parameter import tool.

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?

With 0% schema coverage, the description adds valuable meaning by specifying the data_path as the extracted folder containing 'your_instagram_activity/', beyond just type.

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 it imports Instagram DMs from a GDPR export in JSON format, specifying verb and resource uniquely among siblings.

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?

Provides explicit download instructions and argument format, but lacks explicit when-not-to-use or alternative guidance.

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

import_json_fileA

Import messages from any JSON file. Provide field names for your data format.

Supports JSON arrays, JSON-lines format, and wrapped objects. Covers Google Chat takeout, Google Hangouts exports, LinkedIn data, and any custom JSON format.

Args: file_path: Path to the JSON or JSON-lines file content_field: Field name containing the message text (required) sender_field: Field name containing the sender name (optional) timestamp_field: Field name containing the timestamp (optional, auto-detects format) source_label: Label to tag imported messages with (default: 'json-import')

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
content_fieldYes
sender_fieldNo
timestamp_fieldNo
source_labelNojson-import

TDQS

A4.3/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 burden. It explains what the tool does and parameter roles, but does not disclose whether import is additive or destructive, what happens on failure, or any file size limits. Core behavior is covered, but side effects and error handling are omitted.

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 brief (four sentences plus list), front-loads the core purpose, and uses a clear structure. Every sentence adds value without repetition or fluff.

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?

Given 5 parameters, no output schema, and no annotations, the description covers purpose, format support, and parameter details. It lacks mention of return value or side effects (e.g., whether data is appended or replaced). Considering complexity, it is mostly complete but misses output context.

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

Parameters5/5

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

Schema description coverage is 0%, but the description provides full parameter details in an Args section: purpose, required/optional status, and default values. This adds complete meaning beyond the schema, which only lists names and types.

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 imports messages from JSON files, specifies supported formats (arrays, JSON-lines, wrapped objects), and lists example data sources (Google Chat, Hangouts, LinkedIn). It distinguishes from siblings by focusing on generic JSON import rather than platform-specific formats.

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 implies use for JSON files, especially those from common services, but does not explicitly exclude other formats like CSV (handled by import_csv_file) or state when not to use this tool. It provides context but lacks explicit alternatives or exclusion criteria.

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

import_messengerA

Import Facebook Messenger messages from a data download (GDPR export, JSON format). Download from: Facebook Settings > Your Information > Download Your Information. Args: data_path: Path to the extracted Messenger data folder (containing messages/inbox/)

ParametersJSON Schema
NameRequiredDescriptionDefault
data_pathYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It only states that the tool imports messages, but does not disclose side effects (e.g., whether it overwrites existing data, requires authentication, or has rate limits). With no further behavioral context, the description is insufficient.

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

Conciseness4/5

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

The description is brief (3 sentences) and front-loaded with the purpose. The second sentence provides actionable download instructions, and the third defines the parameter. No redundant information, though the parameter definition could be integrated more seamlessly.

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 simple import tool with one parameter and no output schema, the description covers the essential aspects: what, format, how to obtain data, and expected input. It does not describe the return value, but this is less critical for a straightforward import operation.

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?

The input schema has 0% description coverage, but the description adds meaningful context by explaining that 'data_path' should point to the extracted folder containing 'messages/inbox/'. This compensates well for the schema's lack of detail.

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 specifies exactly what the tool does: import Facebook Messenger messages from a GDPR export in JSON format. It distinguishes itself from sibling import tools (e.g., import_instagram, import_discord_package) by naming the source platform and format.

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?

Provides clear steps for obtaining the required data (Facebook Settings > Download Your Information) and specifies the expected folder structure (messages/inbox/). However, it does not explicitly state when to use this tool over alternatives, though the tool name and context make the context clear.

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

import_sms_backupA

Import SMS/MMS messages from an Android SMS Backup & Restore XML file. Works with the 'SMS Backup & Restore' app (most popular on Google Play).

Args: file_path: Path to the XML backup file

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as whether the import is additive, idempotent, or requires specific permissions. The basic action is stated, but deeper behavior is omitted.

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 sentences plus an Args line. The first sentence front-loads the purpose, and every part is necessary. No wasted words.

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?

Given the tool's simplicity (one parameter, no output schema), the description covers the essentials. However, the lack of behavioral transparency and any usage guidance leaves gaps for an agent to fully understand the tool's implications.

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?

With 0% schema description coverage, the description adds meaning by explaining what 'file_path' is ('Path to the XML backup file'). However, it lacks details like accepted formats, validation rules, or examples, so it only partially compensates.

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 verb 'Import' and the resource 'SMS/MMS messages' from a specific source format (Android SMS Backup & Restore XML). This distinguishes it from sibling import tools for other formats.

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 the tool should be used when users have an Android SMS Backup & Restore XML file, but it does not explicitly state when not to use it or mention alternatives among the many sibling import tools.

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

ingest_whatsappB

Import a WhatsApp chat export .txt file into memory.

Args: file_path: Absolute or relative path to the WhatsApp .txt export file

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only states the import action without mentioning side effects (e.g., whether data is appended or replaced), validation of the .txt format, error handling, or required permissions. This leaves critical behavioral gaps.

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

Conciseness4/5

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

The description is short and front-loaded with the core purpose. The Args formatting adds minor verbosity but overall remains efficient.

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?

Given the simplicity of the tool (single parameter, no output schema, no annotations), the description covers the essential file path requirement but lacks details on file format expectations, success/failure indications, and any limitations. It is adequate but not comprehensive.

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?

With 0% schema description coverage, the description adds necessary context by specifying 'absolute or relative path' and 'WhatsApp .txt export file'. However, it does not detail expected formatting, encoding, or size constraints, leaving some ambiguity.

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 verb (import), resource (WhatsApp chat export .txt file), and destination (into memory). It distinguishes from sibling tools like import_csv_file or import_discord_package by being specific to WhatsApp .txt exports.

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 provides guidance on the file_path parameter (absolute or relative path) but does not give any when-to-use or when-not-to-use instructions relative to alternative sibling tools like import_csv_file or sync_imessage.

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

list_sourcesA

List all data sources and their message counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, and the description only states the basic action without disclosing behavioral traits such as read-only nature, performance implications, or any side effects.

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 sentence that immediately conveys the action and result, with no wasted words.

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?

Given no output schema, the description mentions 'message counts' to hint at return value. It is mostly complete for a simple listing tool, though could specify if any filtering or sorting applies.

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?

There are zero parameters, and schema coverage is 100%. The description adds no parameter info, which is acceptable with no parameters, earning a baseline of 4.

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 all data sources and their message counts, which is a specific verb+resource that distinguishes it from sibling tools that import, sync, or manage 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 for viewing available data sources, but provides no explicit guidance on when to use this tool versus alternatives like sync tools or search.

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

refresh_memoryB

Trigger an immediate sync of all configured sources and return new message count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description must cover behavioral traits. It only states the action and output, omitting details on blocking behavior, duration, side effects, or auth requirements.

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, front-loaded sentence efficiently conveys the purpose, scope, and output without redundant information.

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 simple trigger tool with no parameters and no output schema, the description covers the main elements. However, missing usage context relative to siblings slightly reduces completeness.

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?

The input schema has zero parameters and 100% coverage. The description confirms no inputs are needed, adding minimal but sufficient context for a parameterless tool.

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

Purpose4/5

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

The description clearly states the action ('trigger sync'), scope ('all configured sources'), and output ('return new message count'). However, it does not differentiate from the sibling tool 'sync_all', which likely has similar functionality.

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?

No guidance is provided on when to use this tool versus alternatives like sync_all or individual sync tools. The description lacks context on prerequisites or suitability.

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

search_memoryA

Search your personal memories using hybrid keyword + semantic search.

Args: query: Natural language search query limit: Maximum number of results to return (default: 10) source: Filter by data source (e.g. 'whatsapp:printer_conspiracy', 'discord:1487...') participant: Filter by participant name after: Only return memories after this date (ISO format, e.g. '2026-01-01') before: Only return memories before this date (ISO format, e.g. '2026-12-31')

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
sourceNo
participantNo
afterNo
beforeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions 'hybrid keyword + semantic search' and filtering options, but does not state whether the operation is read-only, rate limits, authentication needs, or side effects. The description is adequate but 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.

Conciseness4/5

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

The description is well-structured with a brief opening line followed by an Args list. It is front-loaded and each line adds value. However, it could be slightly more concise (e.g., removing 'Args:' header for pure conciseness). Still, it is efficient and clear.

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?

Given the output schema exists (not shown but indicated), the description does not need to explain return values. It covers all 6 parameters thoroughly, including defaults and filters. For a search tool, it provides sufficient context for an agent to use it correctly.

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

Parameters5/5

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

Input schema description coverage is 0%, so the description compensates fully. It provides clear, explanatory text for each parameter: 'Natural language search query', 'Maximum number of results to return (default: 10)', filter explanations with examples (e.g., 'whatsapp:printer_conspiracy'), and date formats with examples ('2026-01-01'). This adds significant meaning beyond 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's purpose: 'Search your personal memories using hybrid keyword + semantic search.' It uses a specific verb ('search') and resource ('personal memories'), and distinguishes itself from sibling tools like add_memory and various import/sync tools.

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 implicitly clarifies usage context by contrasting with sibling tools (add, import, sync), but does not explicitly state when to use or avoid this tool. No alternatives are named, but the purpose is clear enough for an AI agent to differentiate.

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

sync_allA

Sync every configured connector and return counts per source.

Iterates over all connectors that have sufficient configuration (Discord, Telegram, Matrix, Slack, email, Mastodon) and syncs each one.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions syncing each connector but does not discuss potential side effects, error handling, or whether the operation is idempotent.

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 two sentences long, front-loaded with the main purpose, and each sentence adds value without redundancy.

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?

Given the tool has no input schema and no output schema, the description provides essential context: iterates over configured connectors and returns counts. It could mention behavior on failure or ordering, but is fairly complete for a batch sync command.

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?

The tool has zero parameters, and the input schema is empty. The description adds no parameter information, which is acceptable since none are needed. Baseline for 0 params is 4.

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 action ('sync every configured connector') and output ('return counts per source'), listing specific connector types, which differentiates it from individual sync sibling tools.

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 implies usage when syncing all configured connectors is desired, and the sibling tools provide clear alternatives for individual syncs. However, it does not explicitly state when not to use or any prerequisites.

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

sync_discordB

Sync recent Discord messages from the configured channel.

Args: channel_id: Discord channel ID to sync (uses DISCORD_CHANNEL_ID env var if not provided)

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNo

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must carry full behavioral burden. It only says 'sync' without disclosing traits like read/write nature, rate limits, permissions, or impact on state. Minimal transparency.

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 extremely concise (two lines) and front-loaded with purpose. Every word adds value.

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?

Given a simple tool with 1 optional param and no output schema, the description covers purpose and parameter usage. However, it omits return value, behavior (does it store or just fetch?), and interaction with the configured channel. Adequate but not fully complete.

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?

With 0% schema description coverage, the description compensates by explaining that channel_id is a Discord channel ID and can default from an env var. This adds meaning beyond the schema's type and default.

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

Purpose4/5

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

The description clearly states it syncs recent Discord messages from a configured channel, which is a specific verb and resource. However, among many sync siblings (sync_email, sync_slack, etc.), it does not differentiate beyond the platform name.

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?

No guidance on when to use this tool vs alternatives (e.g., sync_all, import_discord_package). The description does not provide prerequisites, when-not-to-use, or exclusion criteria.

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

sync_emailA

Sync Gmail messages into memory via IMAP.

Fetches emails from a Gmail folder and stores them for search. Uses a per-folder UID checkpoint to avoid re-ingesting messages on subsequent syncs.

Requires environment variables: GMAIL_EMAIL - Gmail address (e.g. you@gmail.com) GMAIL_APP_PASSWORD - Gmail App Password (required if 2FA is enabled). Create one at https://myaccount.google.com/apppasswords GMAIL_PASSWORD may be used instead for non-2FA accounts, but Google has deprecated plain-password IMAP access.

Args: folder: IMAP folder to sync (default: 'INBOX'). Other options: '[Gmail]/Sent Mail', '[Gmail]/All Mail', etc. max_emails: Maximum number of emails to ingest per sync (default: 200).

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoINBOX
max_emailsNo

TDQS

A4.6/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. It discloses the per-folder UID checkpoint (indicating incremental sync), required environment variables, and the default folder. It does not hide any side effects.

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 divided into a one-sentence summary, a behavioral paragraph, environment variable requirements, and an Args section. Every sentence adds value and there is no redundancy.

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

Completeness5/5

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

Given the simplicity of the tool (2 parameters, no output schema), the description covers all necessary aspects: purpose, behavior (UID checkpoint), prerequisites (env vars), and parameter details. It leaves no ambiguity.

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

Parameters5/5

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

The input schema provides only type and default for folder and max_emails. The description adds meaningful context: folder options with examples like '[Gmail]/Sent Mail', and max_emails as a cap per sync. This fully compensates for the missing schema descriptions.

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 starts with 'Sync Gmail messages into memory via IMAP.', clearly stating the verb (sync), resource (Gmail messages), and mechanism (IMAP). It distinguishes itself from sibling sync tools (e.g., sync_slack, sync_discord) by targeting email, specifically Gmail.

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 mentions that it fetches emails from a Gmail folder and stores them for search, and explains that it uses a UID checkpoint to avoid re-ingesting. It does not explicitly state when not to use it, but the context is clear for Gmail email syncing.

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

sync_imessageA

Sync iMessage/SMS conversations from the local macOS Messages database.

Reads ~/Library/Messages/chat.db in read-only mode. macOS only — returns an error dict on other platforms without raising.

Requires Full Disk Access granted to Terminal (or the app running this server) in System Settings → Privacy & Security → Full Disk Access.

The path to chat.db can be overridden with the IMESSAGE_DB_PATH env var.

Args: chat_name: Optional filter — only sync messages from this chat/contact. Matches against chat_identifier (e.g. '+1234567890') or display name.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_nameNo

TDQS

A4.7/5.0
Behavior5/5

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

No annotations, but the description fully discloses read-only mode, macOS-only nature, error handling (returns error dict without raising), and required permissions.

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?

Every sentence adds value, with clear structure (purpose, prereqs, arg details) and no filler.

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?

Covers all key aspects for a simple tool; lacks mention of return format or database locking, but acceptable given no output schema.

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

Parameters5/5

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

Schema coverage is 0%, but the description explains the only parameter 'chat_name' as optional, filtering by chat_identifier or display name, fully compensating for the schema gap.

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 syncs iMessage/SMS conversations from the local macOS Messages database, distinguishing it from sibling tools like sync_signal and sync_telegram.

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?

It provides prerequisites (macOS, Full Disk Access) and platform behavior, but does not explicitly compare to alternatives or state when not to use.

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

sync_mastodonA

Sync recent Mastodon posts from a public or hashtag timeline into memory.

Uses the Mastodon REST API. Public and hashtag timelines require no authentication. An access token is only needed for home timeline or private accounts.

Optional environment variables: MASTODON_INSTANCE - Mastodon instance URL (default: https://mastodon.social) MASTODON_HASHTAG - default hashtag to sync (without #) MASTODON_ACCESS_TOKEN - access token for authenticated requests (optional)

Args: instance: Mastodon instance base URL (e.g. https://fosstodon.org). Uses MASTODON_INSTANCE env var if not provided. hashtag: Hashtag to sync (without #, e.g. 'python'). Uses MASTODON_HASHTAG env var or public timeline if not provided. access_token: OAuth access token. Uses MASTODON_ACCESS_TOKEN env var if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
instanceNo
hashtagNo
access_tokenNo

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It covers authentication but fails to disclose critical behavioral traits such as whether syncing overwrites or appends to existing memory, potential rate limits, or error handling. The term 'sync' is ambiguous regarding side effects.

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

Conciseness4/5

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

The description is well-structured with sections (purpose, API details, environment, Args). Every sentence adds value, though it could be slightly more concise by merging the environment and args sections.

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?

The description covers authentication and parameter details but lacks information on the sync behavior (e.g., does it merge or replace?), error handling, and rate limits. Given that no output schema exists and the tool imports external data, these gaps reduce completeness.

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?

Despite 0% schema description coverage, the description thoroughly explains each parameter in the Args section, including defaults and environment variable fallbacks. This adds significant meaning beyond the bare JSON Schema, though it could be more precise about input formats.

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 action ('sync'), resource ('Mastodon posts'), and scope ('recent', 'public or hashtag timeline'), making the purpose specific and unambiguous. It distinguishes from sibling tools by explicitly mentioning 'Mastodon', which is unique among the listed sibling tools.

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 on authentication requirements (public/hashtag vs home/private) and environment variable alternatives. While it doesn't explicitly say when to use this tool over alternatives (e.g., sync_all), the sibling tools are clearly for different platforms, so usage is implied.

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

sync_matrixA

Sync Matrix room messages into memory using the Matrix Client-Server API.

Fetches messages from a Matrix room and stores them for search. Uses a per-room pagination token checkpoint to avoid re-ingesting messages.

Requires environment variables: MATRIX_HOMESERVER - e.g. https://matrix.org MATRIX_ACCESS_TOKEN - user access token MATRIX_ROOM_ID - default room to sync (optional if room_id provided)

Args: room_id: Matrix room ID to sync (e.g. !abc123:matrix.org). Uses MATRIX_ROOM_ID env var if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idNo

TDQS

A3.6/5.0
Behavior3/5

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

Without annotations, the description carries the burden of behavioral disclosure. It reveals the use of a pagination token to avoid re-ingesting and the need for environment variables. However, it does not mention potential side effects, idempotency, rate limits, or authorization requirements beyond token provision.

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

Conciseness4/5

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

The description is well-organized with a purpose paragraph and an Args section. It is concise at 8 lines but repeats the environment variable information slightly. The structure is front-loaded with the core action.

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?

Given the low complexity (one optional param, no output schema, no annotations), the description covers the main aspects: purpose, parameter, prerequisites (env vars), and internal mechanism (pagination token). It is complete enough for an agent to use, though it omits details like message limits or rate limits.

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

Parameters5/5

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

The input schema has minimal structure (one optional parameter with title only). The description adds critical meaning: the parameter format (example Matrix ID), fallback to environment variable, and default behavior. This fully compensates for the 0% schema description coverage.

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

Purpose4/5

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

The description clearly states the action (sync Matrix room messages) and the resource (messages stored for search). It distinguishes itself from sibling sync tools by naming the platform 'Matrix', but does not explicitly differentiate its behavior or use case from 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 mentions required environment variables and optional room_id, but provides no guidance on when to use this tool instead of alternatives like sync_slack or sync_discord. There is no indication of prerequisites or 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.

sync_signalB

Sync Signal Desktop messages from the local encrypted database. Requires Signal Desktop to be installed and pysqlcipher3 package.

Reads the Signal SQLCipher database at the default OS location: Linux: ~/.config/Signal/sql/db.sqlite macOS: ~/Library/Application Support/Signal/sql/db.sqlite Windows: %APPDATA%\Signal\sql\db.sqlite

The encryption key is read from config.json in the same Signal directory. Override paths with SIGNAL_DB_PATH and SIGNAL_CONFIG_PATH env vars.

Args: conversation_id: Optional filter for a specific conversation (ID, name, phone number, or profile name).

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idNo

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It does not disclose whether the operation is read-only or destructive, what happens on duplicate syncs, or if it modifies the source database. It lacks details on authorization needs or error conditions.

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

Conciseness4/5

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

The description is organized into clear sections: purpose, prerequisites, database paths, environment variables, and args. It is front-loaded with purpose. While slightly verbose on path details, every sentence adds value without redundancy.

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?

Covers setup requirements and parameter usage, but lacks information on return values, side effects (e.g., data storage location in the study), and what 'sync' entails behaviorally. Given no output schema, the description should clarify outcomes.

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 0%, but the description explicitly explains the single parameter 'conversation_id' as an optional filter that accepts 'ID, name, phone number, or profile name'. This adds significant meaning beyond the schema's bare type definition.

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 'Sync Signal Desktop messages from the local encrypted database', specifying the verb (sync), resource (Signal Desktop messages), and unique scope (local encrypted database). It distinguishes from sibling sync tools (e.g., sync_discord, sync_telegram) by naming Signal specifically and providing platform-specific database paths.

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?

No guidance on when to use this tool versus alternatives like importing data from other sources. It only lists prerequisites (Signal Desktop, pysqlcipher3) but does not mention scenarios where sync_signal is appropriate or when to use other sync/import tools.

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

sync_slackA

Sync recent Slack messages from the configured channel into memory.

Uses the Slack Web API (conversations.history) to fetch messages since the last sync. Requires a bot token with channels:history and users:read scopes.

Requires environment variables: SLACK_BOT_TOKEN - Slack bot token (xoxb-...) SLACK_CHANNEL_ID - default channel to sync (optional if channel_id provided)

Args: channel_id: Slack channel ID to sync (e.g. C1234567890). Uses SLACK_CHANNEL_ID env var if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idNo

TDQS

A3.8/5.0
Behavior2/5

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

No annotations; description mentions API usage and scopes but omits behavior on errors, rate limits, or whether it's read-only (though implied).

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?

Concise, well-structured with clear lead sentence and Args section; no extraneous content.

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?

Covers parameter and requirements but lacks description of return value or side effects (only says 'into memory').

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

Parameters5/5

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

Adds complete meaning to the single parameter with type, example, and fallback behavior, compensating for 0% schema coverage.

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?

Description clearly states it syncs recent Slack messages into memory, distinguishes from siblings by specifying Slack and using Slack Web API.

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?

Provides prerequisites (scopes, env vars) but lacks explicit guidance on when to use vs alternatives (e.g., sync_all) or when not to use.

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

sync_telegramA

Sync new Telegram messages received by the bot into memory.

Uses the Telegram Bot API (getUpdates) to fetch messages sent to the bot since the last sync. Requires TELEGRAM_BOT_TOKEN in environment.

Args: chat_id: Telegram chat ID to filter (positive = user DM, negative = group). Syncs all chats if not provided. Uses TELEGRAM_CHAT_ID env var as default.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo

TDQS

A3.7/5.0
Behavior3/5

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

Description discloses core behavior: uses getUpdates, syncs since last sync, requires token, and filters by chat_id. However, it lacks details on side effects (e.g., memory updates, deduplication), idempotency, error handling, or rate limits. Without annotations, the description carries the burden but covers only essential mechanics.

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

Conciseness4/5

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

Description is structured with a clear purpose line, technical details, and an argument section. It is reasonably concise but could tighten the arg description into fewer sentences. No wasted words.

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?

Given no output schema and no annotations, the description explains the tool's operation and parameter adequately but misses output behavior or return value. It does not mention what the tool returns (e.g., count of synced messages) or error scenarios. Sibling tools might have similar gaps, but for a mutating sync tool, more completeness would help.

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

Parameters5/5

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

The description adds significant meaning beyond the schema: explains chat_id sign convention (positive DM, negative group), default behavior (syncs all chats if omitted), and environment variable fallback (TELEGRAM_CHAT_ID). Schema coverage is 0%, so this full explanation compensates completely.

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?

Description clearly states 'Sync new Telegram messages received by the bot into memory,' providing a specific verb (sync), resource (Telegram messages), and scope (new messages received by bot). It distinguishes from siblings like sync_discord by explicitly naming Telegram and the bot-specific nature.

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?

No explicit guidance on when to use this tool vs alternatives (e.g., import_telegram, other sync tools). It mentions a prerequisite (TELEGRAM_BOT_TOKEN) but does not specify exclusion criteria or recommend alternatives for different use cases.

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. 21 tool updatesv0.2.2
    • First observedadd_memory
    • First observedget_context
    • First observedimport_csv_file
    • First observedimport_discord_package
    • First observedimport_instagram
    • First observedimport_json_file
    • First observedimport_messenger
    • First observedimport_sms_backup
    • First observedingest_whatsapp
    • First observedlist_sources
    • First observedrefresh_memory
    • First observedsearch_memory
    • First observedsync_all
    • First observedsync_discord
    • First observedsync_email
    • First observedsync_imessage
    • First observedsync_mastodon
    • First observedsync_matrix
    • First observedsync_signal
    • First observedsync_slack
    • First observedsync_telegram

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct platform or operation (import, sync, add, search, etc.). No two tools overlap in purpose, making it easy for an agent to select the correct one.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern with snake_case. The only minor deviation is 'ingest_whatsapp' instead of 'import_whatsapp', but overall the naming is clear and predictable.

Tool Count4/5

21 tools is a reasonable number for a comprehensive memory aggregation server. Each major data source has its own import and sync tool, plus core memory operations. The count is justified by the breadth of supported platforms.

Completeness3/5

The tool surface covers importing and syncing from many sources, but lacks update/delete operations for memories and export functionality. This leaves notable gaps in basic CRUD for the memory store.

Maintenance

ActivityInactive
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
    A
    quality
    A
    maintenance
    A local MCP server that gives AI assistants a long-term memory by capturing sessions verbatim and surfacing relevant context automatically.
    15
    855
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A local MCP server for AI assistants to store and retrieve personal memories on disk, with optional semantic search using embeddings.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A self-hosted MCP server that provides a personal semantic memory layer for AI tools. It enables storing, searching, and managing memories using hybrid vector and keyword search, allowing AI assistants to recall information by meaning.
    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/CalebChristiansen/Memoreei'

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