Memoreei
Memoreei is a local-first MCP server that gives an AI assistant a searchable memory of your messages and notes across iMessage, WhatsApp, Signal, Discord, Telegram, Slack, Gmail, Instagram and more.
Hybrid search —
search_memoreeiruns BM25 keyword + vector similarity search fused with Reciprocal Rank Fusion, filterable bysource,participant,after,before.Read around a hit —
get_contextreturns the messages before/after a givenmemory_id.Inventory your data —
list_sourceslists every source with its message count.Write notes —
add_memoreeistores a manual memory/note with optional metadata (local clients only).Refresh everything —
syncre-runs the server's configured connectors and re-reads changed import files, no arguments.Per-connector sync — live connectors:
sync_discord,sync_telegram,sync_matrix,sync_slack,sync_email,sync_mastodon,sync_imessage,sync_whatsapp,sync_signal.Bulk sync —
sync_all/refresh_memoreeisync every configured connector and return counts.Import exports —
import_discord_package,import_messenger,import_instagram,import_sms_backup,import_json_file,import_csv_filefor Discord, Messenger, Instagram, Android SMS XML, and any JSON/CSV data.Contacts —
sync_contacts(macOS AddressBook) andimport_contacts_vcfmap phone numbers/emails to names.Access modes — stdio clients on the same machine get every tool; over the network a key grants only
search_memoreei,get_context,list_sourcesandsync(read-only, never file access or writes).
Syncs messages from Discord channels via bot API and imports Discord data packages from GDPR exports.
Syncs emails from Gmail via IMAP.
Syncs iMessage conversations from macOS (beta).
Imports Instagram direct messages from GDPR data exports.
Syncs messages from Mastodon via REST API.
Syncs messages from Matrix rooms using the Client-Server API.
Imports Facebook Messenger messages from GDPR data downloads.
Syncs messages from Signal Desktop (beta).
Syncs messages from Slack via Web API.
Syncs messages from Telegram via bot API.
Imports WhatsApp chat exports (.txt) and indexes messages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Memoreeiwhat did I discuss with John last week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Memoreei
Remember every conversation you've ever had.
Memoreei is an open-source MCP server that gives your AI assistant a searchable memory of your messages: iMessage, WhatsApp, Signal, Discord, Telegram, Slack, Gmail, Instagram and more. It keeps them in one SQLite file on your machine and searches them by keyword and by meaning at once.
"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?"Every assistant starts each conversation knowing nothing about you. With Memoreei, it can look.
Local-first. One SQLite file. The default search model runs offline.
Hybrid search. BM25 keywords and vector similarity, fused with Reciprocal Rank Fusion.
On your network. One always-on machine serves every other one, each client with its own key.
Read-only to the network. A key can search what's stored, never add to it or read a file.
Install
Pick one. Each is the whole server; they differ in how it's packaged.
You have | Get | Includes |
a Mac | Python, the search model, a menu-bar app, iMessage | |
Linux | Python, the search model, a user service | |
anything else |
| Python 3.10 or newer, which you bring |
Everything Memoreei knows lives in one home directory: config.env for settings and
credentials, memoreei.db for the memories. That's ~/Library/Application Support/Memoreei on macOS, ~/.local/share/memoreei on Linux and ~/.memoreei
elsewhere. Point it somewhere else with --home <dir> or MEMOREEI_HOME.
On a Mac: Memoreei.app
Download the DMG from the latest release:
Memoreei-arm64.dmgfor Apple silicon (About This Mac says Chip Apple M…),Memoreei-x86_64.dmgfor Intel. macOS 11 or newer.Drag Memoreei into Applications.
Open it the first time from Finder. The app isn't signed by Apple yet, so a double-click, Launchpad or Spotlight won't open it. On macOS 11–14, right-click → Open, then Open. On macOS 15 and later, double-click once, then System Settings → Privacy & Security → Open Anyway. Once per download.
Full Disk Access, which iMessage needs. macOS gives apps no way to ask, so a window walks you through dragging Memoreei into the list, and notices when it's done.
The firewall may ask whether Memoreei Server may accept incoming connections. Allow, or other machines can't reach it.
The dashboard opens in your browser. Set up iMessage under Sources, and WhatsApp or Signal too if WhatsApp for Mac or Signal Desktop is installed (Signal's Connect asks macOS once for its key: choose Allow). Then create a key under Clients for each machine or app that will search.
Memoreei then lives in the menu bar and starts at login. Open Dashboard signs you in to the dashboard; Quit stops the server too.
Updates. The menu says Update to X…. Download the new DMG and replace the app. Until Memoreei is signed, macOS treats each new version as a stranger and switches its Full Disk Access off; the setup window reopens, and you switch it back on.
Data is in ~/Library/Application Support/Memoreei, logs in ~/Library/Logs/Memoreei
(Show Log in the menu). A pip-installed memoreei on the same Mac shares that data,
so memoreei key list in Terminal shows the app's keys. Don't run both servers at once;
the app will tell you if you try.
On Linux: a package
Ubuntu 20.04, Debian 11, RHEL and Rocky 8, current Fedora, or newer; x86_64 or ARM64.
Download from Releases:
Ubuntu, Debian:
memoreei_X.Y.Z_amd64.deb(arm64on ARM, such as a Raspberry Pi)Fedora, RHEL, Rocky:
memoreei-X.Y.Z.x86_64.rpm(aarch64on ARM)anything else, or without root:
memoreei-X.Y.Z-linux-x86_64.tar.gz(aarch64on ARM)
Install it, by double-clicking it or:
sudo apt install ./memoreei_*.deb # Ubuntu, Debian sudo dnf install ./memoreei-*.rpm # Fedora, RHEL, Rocky tar xzf memoreei-*-linux-*.tar.gz && memoreei-*-linux-*/install.sh # into ~/.local, no rootOpen Memoreei from your applications. It starts the server, sets it to start at login, and opens the dashboard. Create a key under Clients for each machine or app that will search.
Add sources. Signal, if Signal Desktop is set up, is under Sources in the dashboard: Connect reads its key from your desktop's keyring. The other live connectors are set up in a terminal for now, with
memoreei setup, and chat exports withmemoreei import ….
No desktop? The same package, from a terminal:
memoreei service install # start now and at every login; offers to start at boot too
memoreei key create laptop # one key per client
memoreei admin-url # how to reach the dashboard from your own computerThe server is the systemd user unit memoreei.service. Data is in
~/.local/share/memoreei, the program in /opt/memoreei (or ~/.local/opt/memoreei
from the tarball). Settings go in config.env, except MEMOREEI_HOME itself, which
goes in ~/.config/memoreei/env.
Updates. The dashboard says when there's a new release. Install it the same way; a running Memoreei restarts on the new version by itself.
Two people, one computer? The first to start gets port 3679; the second sets
MEMOREEI_PORT=3680 in their config.env.
Coming from pip? Before 0.4, Linux data lived in ~/.memoreei, and nothing moves
it. Either mv ~/.memoreei ~/.local/share/memoreei, or put MEMOREEI_HOME=~/.memoreei
in ~/.config/memoreei/env.
Uninstall with sudo apt remove memoreei, sudo dnf remove memoreei, or
install.sh --uninstall. Your data stays.
Anywhere else: pip
python3 -m venv ~/memoreei-venv && source ~/memoreei-venv/bin/activate
pip install memoreei # --pre for a release candidate
memoreei setup # pick connectors, enter credentials, make the first key
memoreei sync # pull in messagesOn Debian and Ubuntu, sudo apt install python3-venv first. To keep the network server
running in the background (launchd on macOS, a systemd user unit on Linux):
memoreei service install # starts at login, restarts if it crashes
memoreei service status | logs | uninstallOn a headless Linux box, loginctl enable-linger $USER once, so it starts at boot rather
than at your first login. To update: pip install --upgrade memoreei, then
memoreei service install again.
macOS via pip. iMessage needs Full Disk Access for the Python behind your
virtualenv, which is buried somewhere nobody finds by hand. memoreei service grant-access opens System Settings and a Finder window with the right file already
selected; drag it in, switch it on, and it checks the result. The firewall asks about
the same Python the first time the server starts: Allow. The app does all of this
for you, which is the argument for the app.
Related MCP server: Local Brain MCP
Connect a client
On the same machine
The client starts Memoreei itself and talks over stdio: no network, no key, and every
tool, including the imports. For Claude Code, claude mcp add memoreei -- memoreei serve.
Elsewhere (.mcp.json, claude_desktop_config.json):
{
"mcpServers": {
"memoreei": { "command": "memoreei", "args": ["serve"] }
}
}Use the full path (which memoreei) if it's in a virtualenv your client doesn't know.
Over the network
Create a key per client, in the dashboard or with memoreei key create laptop. The key
is shown once, with ready-to-paste setup and this machine's address filled in:
claude mcp add --transport http memoreei http://<server-ip>:3679/mcp \
--header "Authorization: Bearer <key>"or, in a project's .mcp.json, with the key kept in an environment variable:
{
"mcpServers": {
"memoreei": {
"type": "http",
"url": "http://<server-ip>:3679/mcp",
"headers": { "Authorization": "Bearer ${MEMOREEI_KEY}" }
}
}
}Any MCP client with Streamable HTTP and custom headers works the same way. A lost laptop
costs one memoreei key revoke laptop; memoreei key list shows when each key was last
used.
claude.ai connectors call from Anthropic's servers, not your browser, so they can't
reach your home network. They need a public HTTPS URL (below), with the key in an
Authorization: Bearer <key> header.
Run it as a network server
The network server speaks MCP's Streamable HTTP at /mcp on port 3679, and refuses
every request without a key. There is no way to run it open. The app, the Linux package
and memoreei service install all run it for you; by hand, it's memoreei serve --http.
Port 3679 spells DORY on a phone keypad. It is officially registered to the Apple
Newton's dock sync, a device discontinued in 1998, which is not expected to object.
Change it with --port or MEMOREEI_PORT.
What the network can do
Search, and press one refresh button. A network client gets search_memoreei,
get_context, list_sources and sync, and nothing else. Several local tools take a
path on the server, and a key holder shouldn't be able to point one at your SSH keys and
search them back out. Filling the database is a local job.
sync takes no arguments: it runs the connectors configured on the server and re-reads
registered import files that have changed.
The dashboard
/admin shows status, sources, client keys and the log, and switches start-at-login.
It answers only on the server itself, after a one-time sign-in link:
memoreei admin-url # http://localhost:3679/admin/login?token=…The link works once, within five minutes, and signs that browser in for a month. With no
display, admin-url also prints the ssh -L that brings the dashboard to your laptop.
Dashboard sessions and API keys are separate: neither opens the other.
HTTPS
Plain HTTP is fine on a home network or a VPN. For anything public, put HTTPS in front. Caddy gets its own certificate:
memories.example.com {
reverse_proxy <server-ip>:3679
}and MEMOREEI_PUBLIC_URL=https://memories.example.com in config.env makes
key create print that URL. Or, with a certificate already in hand,
memoreei serve --http --tls-cert cert.pem --tls-key key.pem (or MEMOREEI_TLS_CERT and
MEMOREEI_TLS_KEY in config.env).
Sources
Source | How | Status |
iMessage (macOS) | live, from | 🧪 Beta |
WhatsApp (WhatsApp for Mac, or an iPhone backup) | live, from | 🧪 Beta |
Signal (Signal Desktop, macOS and Linux) | live, from Signal Desktop's database | 🧪 Beta |
Gmail (IMAP) | live | ✅ |
Discord (bot) | live | ✅ |
Telegram (bot) | live | ✅ |
Slack (bot) | live | ✅ |
Matrix | live | ✅ |
Mastodon | live | ✅ |
Discord Data Package | import | ✅ |
Facebook Messenger (data download) | import | ✅ |
Instagram DMs (data download) | import | ✅ |
Android SMS Backup & Restore (XML) | import | ✅ |
Any JSON, JSON-lines, CSV or TSV | import | ✅ |
Contacts (vCard, or macOS Contacts) | names for phone numbers | ✅ |
WhatsApp is read from where WhatsApp for Mac keeps the chats it has synced from your
phone: texts, photo and video captions, shared links and document names. Stickers, voice
notes and reactions have no words to search, so they're skipped. Its database has the
same layout as the one in an iPhone backup, so WHATSAPP_DB_PATH can point at that
instead, on any OS. WhatsApp on Windows and Linux is WhatsApp Web, whose local copy is
encrypted with a key held by WhatsApp's servers, so there is nothing there to read.
Signal is read from Signal Desktop's database on the same computer. Its key is sealed by the system keyring (the Keychain on a Mac, GNOME Keyring or KWallet on Linux), so connecting reads it once, when you choose Connect under Sources, and saves it; a Mac asks first. Texts, captions, links, group changes and calls are kept. Reactions and edits follow the message they belong to, with both wordings of an edit searchable, and a message deleted for everyone is marked rather than forgotten. Photos and files become labels, never copies. Disappearing messages are never stored.
Live sources sync incrementally, fetching only what's new. Imports are
remembered: memoreei sync re-reads a file when it changes.
Set up live sources with memoreei setup (or memoreei setup gmail for one), and import
with memoreei import …. memoreei import --help lists the formats.
MCP tools
Tool | Does | Network |
| hybrid search, filtered by | ✅ |
| the messages around a search result | ✅ |
| every source and its message count | ✅ |
| refresh everything configured on the server; no arguments | ✅ |
| store a note | — |
| sync one connector | — |
| sync every configured connector, without import files | — |
| import an export file | — |
| names for phone numbers, from a vCard or macOS Contacts | — |
A local (stdio) client gets all of them. Each tool's parameters are in its MCP description, which your client shows it.
CLI
memoreei setup [connector] # configure connectors; offers the first API key
memoreei serve # stdio, for a local client
memoreei serve --http [--port 3679] [--tls-cert … --tls-key …]
memoreei open # the dashboard, starting Memoreei if needed
memoreei admin-url # a one-time dashboard sign-in link
memoreei key create | list | revoke <name>
memoreei service install | status | logs | uninstall | grant-access
memoreei status # message counts, sources, last sync times
memoreei config # settings, tokens masked
memoreei sync [source] # everything, or one of discord, telegram, matrix,
# slack, email, mastodon, imessage, whatsapp,
# signal
memoreei search "printer issue" --limit 5 --source imessage:+12025550142
memoreei import sms backup.xml # also discord-package, messenger, instagram,
# json, csv, contacts
memoreei import list | forget <id> # the files `sync` re-readsEvery command takes --home <dir>, and --help.
How search works
Every query runs two searches at once, and fuses them:
"that weird API rate limit issue"
├─▶ keyword (SQLite FTS5, BM25) matches "API", "rate", "limit"
└─▶ vector (cosine similarity) matches "throttling", "429 errors", "backoff"
│
▼
Reciprocal Rank Fusion: score = Σ 1 / (60 + rank)Results that both searches found rise to the top; results only one found still count. RRF works on ranks, so the two scores never need to agree on a scale.
The default embedding model is BAAI/bge-small-en-v1.5 via FastEmbed: 384 dimensions,
about 67 MB of ONNX, fully offline. EMBEDDING_PROVIDER=openai swaps in OpenAI's.
Configuration
memoreei setup and the dashboard write config.env; .env.example
lists every setting for editing by hand. The environment wins over a .env in the
current directory, which wins over config.env.
Variable | Default | |
| per platform, above | holds |
|
| |
|
| or |
|
| sync in the background while the server runs |
|
| seconds |
|
| network server address |
|
| network server port |
| — | the URL |
| — | serve HTTPS directly |
Connector settings:
Connector | Variables |
Discord |
|
Telegram |
|
Matrix |
|
Slack |
|
Gmail |
|
Mastodon |
|
iMessage |
|
| |
Signal |
|
API keys aren't settings. They live in the database, hashed.
Privacy
Everything is stored in one SQLite file on your machine. The home directory is readable only by you, and
config.envis mode 600.The default search model runs offline. No telemetry, no analytics, no cloud.
Network traffic happens only when you ask for it: live connectors call their own services, and
EMBEDDING_PROVIDER=openaisends message text to OpenAI.The network server is off until you start it, never runs without a key, and stores only hashes of its keys. Over the network it can search, not add or read files.
Contributing
CONTRIBUTING.md covers building from source, running the tests and adding a connector.
License
MIT
Available Tools
24 toolsadd_memoreeiB
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
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | manual | |
| content | Yes | ||
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It confirms a write/add operation but says nothing about persistence, duplicate handling, permissions, or what the add returns. For an unannotated mutation tool this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the Args block is compact, one line per parameter. There is little waste, though the Args duplication of the schema is somewhat redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param tool with no output schema and no annotations, the description covers the inputs but omits behavioral context an agent would want (persistence, return value, duplicate handling). Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description meaningfully compensates by documenting all three params: content ('text to remember'), source (with its 'manual' default), and metadata ('optional key-value metadata'). The metadata entry is thin (no expected keys or format), so it clarifies the basics but not the details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('add') and resource ('manual memory/note') with the target store ('personal memory store'). It is clear what the tool does, though it does not explicitly distinguish itself from the sibling search_memoreei. The word 'manual' implicitly separates it from the many sync_*/import_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The term 'manual' implies this is for user-entered notes as opposed to synced or imported data, giving implied usage context. However, there is no explicit when-to-use/when-not-to-use guidance and no alternative tool is named, leaving the agent to infer the boundary against the sync/import siblings.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_contacts_vcfA
Import contacts from a vCard (.vcf) file.
Export from macOS Contacts: File → Export → Export vCard. Maps phone numbers and email addresses to display names.
Args: file_path: Path to the .vcf file
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does disclose a meaningful trait beyond the schema — that phone numbers and email addresses get mapped to display names — but says nothing about duplicate handling, whether existing contacts are merged or replaced, or what side effects the import has. That is a notable gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, followed by a focused export tip and a short Args block. No redundant restatement of the tool name; the macOS export hint is arguably optional but earns its place as practical input guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter import with no output schema, the description covers purpose, input format, and one behavioral detail (name mapping). It omits what happens to pre-existing contacts and where the data lands, which an agent would want before invoking a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema documents nothing about the single parameter. The description compensates with an Args block clarifying file_path is a path to the .vcf file, adding format meaning beyond the bare 'string' type. It is minimal but fills the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Import contacts') plus the exact input format (vCard/.vcf), which distinguishes it from import_csv_file and import_json_file in the sibling set. It stops short of explicitly naming those alternatives, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete 'how to produce the input' tip (macOS Contacts export path), which is genuinely useful context. However, it gives no guidance on when to use this versus sync_contacts or the other import_* tools, nor any prerequisites or exclusions.
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')
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| source_label | No | csv-import | |
| sender_column | No | ||
| content_column | Yes | ||
| timestamp_column | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| package_path | Yes |
TDQS
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.
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.
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.
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.
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.
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/)
| Name | Required | Description | Default |
|---|---|---|---|
| data_path | Yes |
TDQS
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.
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.
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.
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.
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.
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')
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| sender_field | No | ||
| source_label | No | json-import | |
| content_field | Yes | ||
| timestamp_field | No |
TDQS
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.
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.
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.
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.
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.
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/)
| Name | Required | Description | Default |
|---|---|---|---|
| data_path | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
list_sourcesA
List all data sources and their message counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_memoreeiB
Trigger an immediate sync of all configured sources and return new message count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It states the tool triggers an outward-facing sync but never says whether it blocks, how long it takes, whether it is rate-limited, whether re-running is safe, or whether it can fail on unreachable sources — meaningful gaps for a network-triggering operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action, scope, and outcome front-loaded in that order. No filler, no restatement of the tool name, nothing that could be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by naming the return value ('new message count'). Combined with zero parameters and a stated scope, an agent has enough to call it, though blocking behavior and failure modes remain undocumented and there are no annotations to cover them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain and the baseline is 4. The description correctly avoids inventing parameters and instead spends its words on scope and return value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Trigger an immediate sync'), its scope ('all configured sources'), and its return value ('new message count'). It is clear what the tool does, but it offers no differentiation from the heavy cluster of sync siblings such as sync_all and sync, which appear to overlap with the same 'sync everything' semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this over sync_all, sync, or the per-platform sync_* tools. The agent is left to infer that a tool literally named for a product refresh is distinct from the near-identical 'sync all configured sources' siblings, with no exclusions or alternatives stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoreeiB
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. 'imessage:+12025550142', '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')
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| query | Yes | ||
| before | No | ||
| source | No | ||
| participant | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the hybrid search strategy but says nothing about read-only status, permission/auth requirements, rate limits, or how results are ranked or returned — significant gaps for a search tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in one sentence, then uses a compact Args block with no filler. A small amount of duplication (restating the limit default already in the schema) costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with an output schema, the description covers the core inputs well and needn't explain return values. The main omission is whether an unfiltered query spans all sources, but overall it is sufficient to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it documents all six parameters, gives concrete source-format examples ('imessage:+12025550142'), states the limit default, and specifies ISO date formats for after/before. Minor gap is that 'source'/'participant' matching semantics (exact vs partial) aren't stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search your personal memories') plus the mechanism ('hybrid keyword + semantic search'). It clearly stands apart from the sibling set, which is dominated by sync/import tools, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of alternatives among the sync/import siblings. The description only enumerates parameters, leaving the agent to infer that this is the retrieval tool versus the ingestion tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
syncB
Refresh memory from the sources configured on the server.
Runs every connector set up in the server's config, and re-reads any import files that were registered on the server and have changed since. Takes no arguments: it can only refresh what the server's owner has already set up.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says the tool refreshes memory and re-reads changed files, but it does not disclose side effects, idempotency, permissions, whether existing memory is overwritten or merged, or what happens on partial failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, and no wasted wording. The no-argument constraint is stated directly and reinforces the scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema and no annotations, the description explains the basic scope but omits sibling differentiation and sufficient behavioral detail for a refresh operation. An agent can call it correctly, but cannot confidently choose it over sync_all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which sets the baseline at 4. The description appropriately confirms this by stating it takes no arguments and can only refresh what the server owner has already configured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation: refresh memory from configured sources, run every server connector, and re-read changed import files. It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools like sync_all or the per-source sync_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by saying it refreshes everything already configured and takes no arguments, so it cannot target arbitrary sources. However, it does not state when to use this instead of sync_all or individual sync_* tools, nor does it name any alternatives.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_contactsA
Sync contacts from macOS AddressBook into the contacts table.
Maps phone numbers and email addresses to display names so that search results and source listings show contact names instead of raw identifiers. macOS only — returns an empty result on other platforms.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the source, target table, name-mapping behavior, and platform-specific empty-result behavior, but it does not say whether existing contacts are overwritten or merged, whether permissions are required, or how repeated syncs behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the primary action, and structured into purpose, mapping effect, and platform caveat. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless sync tool with no output schema and no annotations, the description covers the source, target, mapping effect, and platform behavior. It leaves some mutation semantics unstated, but it is nearly complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to clarify. The schema coverage is listed at 100%, and the description correctly adds no unnecessary parameter detail beyond the tool's operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (sync), resource (contacts), and source (macOS AddressBook), and states the effect of writing into the contacts table. It is clearly distinguishable from generic sync siblings by its macOS-specific source, though it does not explicitly contrast itself with import_contacts_vcf or other contact-import tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an implied usage context: syncing native macOS AddressBook contacts. It also states a platform constraint (macOS only; empty result elsewhere). However, it never says when to choose this over siblings such as import_contacts_vcf, nor does it describe prerequisites or exclusions beyond the platform note.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | INBOX | |
| max_emails | No |
TDQS
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.
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.
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.
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.
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.
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 for the program running this server, granted in System
Settings → Privacy & Security → Full Disk Access (memoreei service grant-access
opens it with the right file shown).
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it discloses read-only access, platform restriction ('returns an error dict on other platforms without raising'), the Full Disk Access prerequisite, and the IMESSAGE_DB_PATH override. It omits idempotency/incremental behavior and whether existing synced data is replaced, which for a sync tool would matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then platform/prerequisite details, then the argument. Every sentence carries information, though the Full Disk Access sentence is somewhat long and the parenthetical remediation command is more operational than agent-facing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-param tool with no output schema, the definition covers platform, prerequisites, path override, and filter semantics adequately. The return shape is only hinted at ('error dict'), so an agent has a mild gap on what a successful sync produces, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: chat_name is explained as an optional filter matching against chat_identifier (with the '+1234567890' example) or display name. This adds real matching semantics the bare 'Chat Name' property name does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Sync iMessage/SMS conversations from the local macOS Messages database') and names the exact data source (chat.db). It clearly distinguishes itself from siblings like sync_signal, sync_telegram, and import_sms_backup by anchoring to the local macOS Messages store rather than another provider or an import path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: macOS-only, read-only, and the Full Disk Access requirement with a concrete remediation command. It does not, however, tell the agent when to prefer this over sync_all or import_sms_backup, so the alternative-selection guidance is implied rather than stated.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hashtag | No | ||
| instance | No | ||
| access_token | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | No |
TDQS
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.
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.
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.
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.
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.
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_signalA
Sync Signal from Signal Desktop's database on this computer.
Needs Signal connected first (the dashboard's Sources page, or memoreei setup signal), which reads Signal's database key from the system keyring once. Texts,
captions, links, group changes and calls are kept, reactions and edits follow
the message they belong to, and disappearing messages are never stored.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well. It discloses the required Signal connection and keyring read, exactly what data is kept (texts, captions, links, group changes, calls), how reactions/edits are handled, and that disappearing messages are never stored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: purpose first, then prerequisite/setup, then retention behavior. Every sentence adds useful information and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, the description covers purpose, setup requirements, and data handling policies thoroughly. An agent has enough context to know when and how to invoke it without needing additional structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics for the description to clarify. The baseline for a parameterless tool is 4, and the description appropriately does not invent or omit parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Sync Signal from Signal Desktop's database on this computer.' It names the source platform and local database, which distinguishes it from sibling sync tools for WhatsApp, Discord, Telegram, etc. without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite: Signal must be connected first via the dashboard Sources page or `memoreei setup signal`. This tells the agent when the tool can actually be used, but it does not explicitly contrast this tool with alternatives like sync_all or other sync_* 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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | No |
TDQS
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.
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.
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.
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.
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.
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.
sync_whatsappA
Sync WhatsApp chats from WhatsApp for Mac's database on this machine.
Reads ChatStorage.sqlite read-only: WhatsApp for Mac's, or the file WHATSAPP_DB_PATH names, such as the one in an iPhone backup. Texts, captions, shared links and document names are kept; stickers, voice notes and reactions have no words to keep.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does notable work: it discloses read-only access to ChatStorage.sqlite, the WHATSAPP_DB_PATH override, the iPhone-backup case, and exactly which content is retained versus dropped. It omits dedup/repeat-sync behavior and any auth or rate-limit notes, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the data source, then the retention rule. Every clause carries information, though the kept/dropped enumeration is slightly verbose for a 0-param tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless sync tool with no annotations and no output schema, the description covers source selection and retention policy well. It stops short of saying where synced chats land or how repeat runs behave, which would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter surface to document; the baseline for a no-param tool is 4. The description usefully explains the implicit input (WHATSAPP_DB_PATH or the default Mac database) even though no schema field exists for it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (sync WhatsApp chats) and pins the source precisely: WhatsApp for Mac's database on this machine. Among a large family of sync_* and import_* siblings, naming the exact source distinguishes it clearly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the source-specific phrasing, but the description never states when to pick this over siblings like import_messenger or sync_imessage, nor any prerequisites such as WhatsApp for Mac being installed or an iPhone backup existing. Adequate but leaves the when-to-use decision to inference.
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.
9 tool updates
v0.4.4- Added
add_memoreei - Removed
add_memory - Removed
ingest_whatsapp - Added
refresh_memoreei - Removed
refresh_memory - Added
search_memoreei - Removed
search_memory - Changed
sync_signal1 field changed- removed
Input schema / properties / conversation_idRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Conversation Id" -}
- Added
sync_whatsapp
3 tool updates
v0.4.1- Added
import_contacts_vcf - Added
sync - Added
sync_contacts
21 tool updates
v0.2.2- First observed
add_memory - First observed
get_context - First observed
import_csv_file - First observed
import_discord_package - First observed
import_instagram - First observed
import_json_file - First observed
import_messenger - First observed
import_sms_backup - First observed
ingest_whatsapp - First observed
list_sources - First observed
refresh_memory - First observed
search_memory - First observed
sync_all - First observed
sync_discord - First observed
sync_email - First observed
sync_imessage - First observed
sync_mastodon - First observed
sync_matrix - First observed
sync_signal - First observed
sync_slack - First observed
sync_telegram
TDQS
Scored across 24 tools
Most source-specific sync and import tools are distinct, but refresh_memoreei, sync, and sync_all all appear to trigger broad synchronization with overlapping semantics, making global refresh actions easy to confuse. The individual source tools are clear, but the presence of several near-duplicate global sync entry points creates ambiguity.
Nearly all tools use consistent snake_case verb_noun naming such as sync_whatsapp, import_csv_file, and list_sources. Minor deviations like the branded *_memoreei suffix and the bare sync tool are readable but slightly less predictable than the rest.
24 tools is on the heavy side, but the count is largely justified by the many distinct message sources and import formats supported. Each sync/import tool maps to a separate connector or data format, so the surface is broad rather than redundant overall.
The server covers ingestion, search, context retrieval, source listing, contacts sync, and many imports, but the memory lifecycle is missing update and delete operations. An agent can add, search, and inspect memories, but cannot edit or forget them, which is a notable gap for a personal memory store.
Maintenance
Related MCP Connectors
- EngramOAuthapp.getengram
Persistent, verbatim, searchable memory for AI assistants — one memory across every MCP client.
Persistent personal memory for AI assistants — save, search, and recall across every MCP client.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Related MCP Servers
- AlicenseAqualityAmaintenanceA local MCP server that gives AI assistants a long-term memory by capturing sessions verbatim and surfacing relevant context automatically.15901MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server for AI assistants to store and retrieve personal memories on disk, with optional semantic search using embeddings.-
- FlicenseNot gradedqualityDmaintenanceAn MCP server for managing persistent AI memory using hybrid search (keyword + semantic vector) with SQLite storage and offline-first local embeddings.-
- AlicenseNot gradedqualityBmaintenanceA 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