Memsolus MCP Server
OfficialClick 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., "@Memsolus MCP ServerWhat did we decide about the database schema in our last meeting?"
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.
@memsolus/mcp
MCP Server for Memsolus — persistent memory, knowledge graphs, and semantic search for AI agents
Documentation | npm | GitHub | memsolus.com
What is Memsolus?
Memsolus is a persistent memory platform for AI agents. It lets your AI assistant remember context across conversations, track decisions, search past knowledge, and navigate entity relationships through a knowledge graph.
This package exposes the full Memsolus API as an MCP (Model Context Protocol) server, so any MCP-compatible AI client — Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, Zed, and others — can store and retrieve memories, query knowledge, and traverse entity graphs without custom integration code.
Related MCP server: BuildAutomata Memory MCP Server
Prerequisites
A Memsolus account (sign up)
An API key (see Getting an API Key below)
Node.js 18+ or Bun
Getting an API Key
Sign up or log in at app.memsolus.com
Go to Settings > API Keys
Click Create API Key
Give it a name (e.g.,
Claude Desktop)Select permissions: at minimum
MemoryReadandMemoryWrite. For full access, also enableKnowledgeReadandDashboardReadCopy the key — it starts with
msk_and you will not be able to see it again after closing the dialogSet the key as the
MEMSOLUS_API_KEYenvironment variable or paste it directly into your client config
Installation
Choose the section that matches your AI client. All configurations use npx -y @memsolus/mcp, which runs the latest published version without a local install step.
Claude Code
Run this command in your terminal:
claude mcp add memsolus -- npx -y @memsolus/mcpTo pass the API key inline without setting an environment variable:
claude mcp add memsolus -e MEMSOLUS_API_KEY=msk_your_key_here -- npx -y @memsolus/mcpAfter adding, restart Claude Code or run /mcp to confirm that memsolus appears in the server list.
Claude Desktop
Locate and open your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the following entry inside mcpServers:
{
"mcpServers": {
"memsolus": {
"command": "npx",
"args": ["-y", "@memsolus/mcp"],
"env": {
"MEMSOLUS_API_KEY": "msk_your_key_here"
}
}
}
}Save the file and restart Claude Desktop. The Memsolus tools will appear in the tools panel on the next launch.
Cursor
Create or edit .cursor/mcp.json in your project root (or the global Cursor MCP config at ~/.cursor/mcp.json for workspace-independent access):
{
"mcpServers": {
"memsolus": {
"command": "npx",
"args": ["-y", "@memsolus/mcp"],
"env": {
"MEMSOLUS_API_KEY": "msk_your_key_here"
}
}
}
}Reload Cursor or run the MCP: Restart Servers command from the command palette.
Windsurf
Open your Windsurf MCP configuration (~/.codeium/windsurf/mcp_config.json) and add:
{
"mcpServers": {
"memsolus": {
"command": "npx",
"args": ["-y", "@memsolus/mcp"],
"env": {
"MEMSOLUS_API_KEY": "msk_your_key_here"
}
}
}
}Restart Windsurf to apply the changes.
VS Code (GitHub Copilot)
Add a .vscode/mcp.json file to your workspace:
{
"mcpServers": {
"memsolus": {
"command": "npx",
"args": ["-y", "@memsolus/mcp"],
"env": {
"MEMSOLUS_API_KEY": "msk_your_key_here"
}
}
}
}Alternatively, add the same block to your VS Code user settings.json under "mcp" to enable it globally. Reload the VS Code window after saving.
Zed
Open your Zed settings (~/.config/zed/settings.json) and add a context_servers entry:
{
"context_servers": {
"memsolus": {
"command": {
"path": "npx",
"args": ["-y", "@memsolus/mcp"],
"env": {
"MEMSOLUS_API_KEY": "msk_your_key_here"
}
}
}
}
}Restart Zed to pick up the new server.
Using an Environment Variable Instead
If you prefer not to embed your API key in config files, export it in your shell profile (~/.bashrc, ~/.zshrc, or equivalent):
export MEMSOLUS_API_KEY=msk_your_key_hereWith the variable set globally, all client configs can omit the env block:
{
"mcpServers": {
"memsolus": {
"command": "npx",
"args": ["-y", "@memsolus/mcp"]
}
}
}Configuration
The server is configured entirely through environment variables. No config file is needed.
Variable | Required | Default | Description |
| Yes | — | Your API key (starts with |
| No |
| Override the API endpoint (e.g., for self-hosted deployments) |
| No | — | Target a specific workspace. Omit to use the default workspace associated with your API key |
Available Tools
The server exposes 17 tools across four categories. Which tools are available depends on your plan — see Plan-Based Tool Availability.
Memory Tools
These tools are available on all plans that include MCP access.
add_memory
Store a new persistent memory. Use when the user shares a fact, preference, decision, or any context worth remembering across future conversations.
Parameter | Type | Required | Description |
| string | Yes | Content of the memory to store |
| string | No | Associate the memory with a specific user |
| string | No | Associate the memory with a specific agent |
| string | No | Associate the memory with a specific session |
| string | No | JSON string with arbitrary key-value metadata |
| string | No |
|
search_memories
Search stored memories by relevance. Supports semantic, keyword, and hybrid search modes.
Parameter | Type | Required | Description |
| string | Yes | Natural language search query |
| string | No | Restrict results to a specific user |
| string | No | Maximum number of results (default: |
| string | No |
|
Use hybrid for general queries. Use keyword when searching for exact names, IDs, or technical terms.
get_memories
List memories in chronological order. Use when you want to browse all stored memories rather than search by relevance.
Parameter | Type | Required | Description |
| string | No | Filter by user ID |
| string | No | Filter by agent ID |
| string | No | Page number (default: |
| string | No | Results per page (default: |
get_memory
Retrieve a single memory by its ID.
Parameter | Type | Required | Description |
| string | Yes | ID of the memory to retrieve |
update_memory
Update the content or priority of an existing memory. Prefer this over creating a duplicate when the user corrects or refines information that is already stored.
Parameter | Type | Required | Description |
| string | Yes | ID of the memory to update |
| string | No | New content |
| string | No | New priority: |
delete_memory
Permanently delete a memory. Use when the user explicitly asks to forget something, or when a memory is clearly outdated. Search first if you do not have the ID.
Parameter | Type | Required | Description |
| string | Yes | ID of the memory to delete |
promote_memory
Promote a temporary memory to permanent status. Memories stored as task-scoped (with an expiration) can be made permanent with this tool when the context proves to be persistently relevant.
Parameter | Type | Required | Description |
| string | Yes | ID of the memory to promote |
submit_feedback
Submit quality feedback on a memory. Positive and negative signals improve memory quality over time.
Parameter | Type | Required | Description |
| string | Yes | ID of the memory to rate |
| string | Yes |
|
| string | No | Optional explanation of the feedback |
get_memory_history
Retrieve the full event history of a memory: creation, updates, promotions, and feedback signals. Use to understand how a memory evolved or diagnose unexpected behavior.
Parameter | Type | Required | Description |
| string | Yes | ID of the memory |
| string | No | Maximum number of events (default: |
Knowledge Tools
These tools require a plan that includes Knowledge Graph access (Pro or above).
get_knowledge
Get the consolidated knowledge profile built from processed memories. Set merged=true (the default) to receive a complete Markdown profile. Set merged=false to paginate through individual knowledge entries.
Parameter | Type | Required | Description |
| string | No | Filter knowledge by user |
| string | No | Filter by knowledge category |
| string | No |
|
Call this at the start of a conversation to load the full context profile for a user before responding.
get_knowledge_entry
Retrieve a specific knowledge entry by ID, including the source memory IDs that contributed to it.
Parameter | Type | Required | Description |
| string | Yes | ID of the knowledge entry |
Graph Tools
These tools require a plan that includes Knowledge Graph access (Pro or above).
graph_search
Search for entities in the knowledge graph. Entities include people, organizations, places, and things mentioned across memories.
Parameter | Type | Required | Description |
| string | Yes | Text query to search for entities |
| string | No | Filter entities by user |
| string | No |
|
| string | No | Maximum number of results (default: |
graph_traverse
Navigate relationships starting from a known entity. Useful for exploring who an entity is connected to — colleagues, projects, organizations. Use graph_search first if you need to find the entity ID.
Parameter | Type | Required | Description |
| string | Yes | ID of the starting entity |
| string | No |
|
| string | No | Traversal depth between 1 and 3 (default: |
graph_query
Answer a natural language question using the knowledge graph. Returns an answer with a confidence score and the entities used to construct it.
Parameter | Type | Required | Description |
| string | Yes | Natural language question (e.g., "What projects is João involved in?") |
Utility Tools
These tools are available on all plans that include MCP access.
get_dashboard_summary
Get workspace KPIs — total memories stored, searches performed, and tokens consumed — with a comparison to the previous period.
Parameter | Type | Required | Description |
| string | No | Time window in days (default: |
get_memory_profile
Get a summarized profile of a user built from their stored memories: key topics, entity count, and a narrative summary.
Parameter | Type | Required | Description |
| string | Yes | ID of the user to profile |
list_entities
List all users and agents in the workspace with their memory counts. Use to discover who has memories stored or to compare activity across entities.
This tool takes no parameters.
Resources
Resources are read-only data endpoints that MCP clients can load as context. They are accessible via URI.
URI | Name | Description | MIME Type |
| Workspace Summary | KPIs and current workspace state |
|
| Merged Knowledge | Complete merged knowledge base in Markdown |
|
| Memory by ID | Single memory retrieved by its ID |
|
| Entities | All users and agents with memory counts |
|
memsolus://knowledge/merged is only available on plans with Knowledge Graph access.
Prompts
Prompts are pre-built interaction templates that combine tool calls with structured output. Clients that support MCP prompts can invoke them by name.
recall-context
Retrieve and format relevant context before starting a task. Searches memories and loads the knowledge profile for a given topic, returning both in a single response.
Argument | Required | Description |
| Yes | Topic to search for in stored memories |
session-handoff
Save relevant context at the end of a session. Stores the provided summary as a high-priority persistent memory so it is available in future conversations.
Argument | Required | Description |
| Yes | Summary of what was accomplished in the session |
decision-log
Record a decision as a high-priority persistent memory, including the alternatives that were considered and the reasoning behind the final choice.
Argument | Required | Description |
| Yes | The decision that was made |
| No | Alternative options that were considered |
| No | Justification for why this option was chosen |
Plan-Based Tool Availability
The server checks your plan entitlements at startup and registers only the tools your plan includes. This is done automatically — you do not need to configure anything.
Feature set | Tools included | Required plan |
Memory |
| Any plan with MCP access |
Utilities |
| Any plan with MCP access |
Knowledge + Graph |
| Pro plan or above |
If a tool does not appear in your client's tool list, it is because your current plan does not include that feature. Upgrade at app.memsolus.com/settings/billing.
If the server cannot reach the Memsolus API at startup to verify your entitlements, it registers all tools by default and lets the API enforce access. This prevents startup failures caused by temporary network issues.
Examples
Storing a decision
Tell your assistant:
"Remember that we decided to use PostgreSQL instead of MongoDB for the user service. The reason was strong consistency requirements for financial transactions."
The assistant calls add_memory with priority HIGH, and the decision is stored as a permanent memory associated with your workspace.
Searching past context
Ask your assistant:
"What do you remember about our authentication architecture?"
The assistant calls search_memories with query "authentication architecture" in hybrid mode, retrieves ranked results, and summarizes what Memsolus knows on that topic.
Exploring the knowledge graph
Ask your assistant:
"Who are the main people involved in the billing module and how are they connected?"
The assistant calls graph_search to find entities related to the billing module, then calls graph_traverse on the most relevant entity to map its relationships. It can also use graph_query directly:
"What projects is the backend team involved in?"
graph_query takes the natural language question, answers it using the knowledge graph, and returns the result with a confidence score.
Loading context at the start of a conversation
For clients that support MCP prompts, invoke recall-context with the topic you are about to work on:
prompt: recall-context
arguments:
topic: "billing refactor"This runs a memory search and loads the full knowledge profile in a single step, giving the assistant the full context before it responds.
Saving context at the end of a session
Invoke session-handoff before closing the conversation:
prompt: session-handoff
arguments:
summary: "Reviewed billing module. Decided to split the invoice service into two microservices. Deferred payment retry logic to next sprint."The summary is stored as a high-priority memory and will be available when you return.
Troubleshooting
Tools do not appear in my client
Confirm that
MEMSOLUS_API_KEYis set and starts withmsk_Confirm that your plan includes MCP access — check app.memsolus.com/settings/billing
Restart your MCP client after changing the config
On Claude Desktop, check
~/Library/Logs/Claude/for server startup errors
Knowledge and graph tools are missing
These tools require a Pro plan or above. If you are on a free or starter plan, only memory and utility tools are registered. Upgrade at app.memsolus.com/settings/billing.
UNAUTHORIZED error when calling a tool
Your API key is invalid or has expired. Generate a new key at app.memsolus.com/settings/api-keys and update your config.
ENTITLEMENT_NOT_AVAILABLE error
The tool or feature you are trying to use is not included in your plan. The server registered the tool because entitlements could not be confirmed at startup, but the API rejected the call. Upgrade your plan or check that your API key belongs to the correct workspace.
RATE_LIMIT error
You have exceeded the request rate for your plan. Wait a few seconds and retry. If you are hitting rate limits consistently, consider batching calls or upgrading to a plan with higher limits.
The server fails to start with MEMSOLUS_API_KEY environment variable is required
The environment variable is not visible to the MCP server process. Make sure the env block in your client config includes the key explicitly, or that the variable is exported in the shell environment that launches your client.
Related Packages
TypeScript SDK: @memsolus/sdk — programmatic access to the Memsolus API
Claude Code Plugin: memsolus/claude-plugin — deeper Claude Code integration
Documentation: docs.memsolus.com
Website: memsolus.com
License
MIT
Available Tools
14 toolsadd_memoryA
Store a new persistent memory. Use when the user shares a fact, preference, decision, or any context worth remembering across conversations.
When to use: User states a preference ("I prefer dark mode"), shares a fact ("Our API runs on port 3000"), makes a decision ("We chose PostgreSQL"), or says "remember this". When NOT to use: Temporary info, greetings, acknowledgments, or things that only matter for the current conversation.
The memory enters an async pipeline: extraction → embedding → consolidation → knowledge compilation. It becomes searchable within seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| memory | Yes | A clear, self-contained statement. Write as a complete sentence, e.g. "Prefers TypeScript over JavaScript for backend" or "O projeto usa NestJS 11 com Fastify". Use the SAME LANGUAGE the user spoke in. | |
| user_id | No | End-user ID to scope this memory. Without it, memory is global to the workspace. | |
| agent_id | No | Agent ID storing this memory. For multi-agent setups. | |
| session_id | No | Current session ID. Groups memories from the same conversation. | |
| metadata | No | JSON string with structured data, e.g. '{"source": "chat", "topic": "infrastructure"}'. | |
| priority | No | LOW = supplementary, may be summarized. MEDIUM (default) = standard facts. HIGH = critical rules the user explicitly emphasized ("always", "never", "must"). | |
| pool_id | No | UUID of a shared pool. Prefer add_memory_to_pool for clearer intent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It explains the async pipeline process (extraction → embedding → consolidation → knowledge compilation) and latency ('becomes searchable within seconds'), which are important behavioral traits not inferable from the schema alone. It doesn't cover error conditions or permissions, keeping it from a perfect score.
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 clear sections (purpose, usage guidelines, behavioral details) and every sentence adds value. It's front-loaded with the core purpose, avoids redundancy, and maintains an efficient length for the complexity of the 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 tool with 7 parameters, no annotations, and no output schema, the description provides strong contextual coverage. It explains purpose, usage, behavioral process, and latency. The main gap is lack of information about return values or error handling, which would be helpful given the absence of output schema.
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 100%, so the schema already documents all 7 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, but it does provide overall context about what constitutes a good 'memory' value, which slightly enhances understanding. Baseline 3 is appropriate when schema does the heavy lifting.
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's purpose with specific verb ('Store') and resource ('persistent memory'), and distinguishes it from siblings by specifying it's for storing new memories rather than retrieving, updating, or deleting them. The opening sentence establishes the core function unambiguously.
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 explicit guidance with dedicated 'When to use' and 'When NOT to use' sections, listing concrete examples of appropriate scenarios (preferences, facts, decisions) and exclusions (temporary info, greetings). It also references sibling tool 'add_memory_to_pool' as an alternative for specific use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_memory_to_poolA
Store a memory in a shared pool, visible to all pool members. Use instead of add_memory when info is relevant to a team/group, not just one user.
When to use: Team decisions, shared project facts, group preferences. Example: "The team agreed to use PostgreSQL for all new services." When NOT to use: Personal preferences or individual context (use add_memory).
| Name | Required | Description | Default |
|---|---|---|---|
| pool_id | Yes | UUID of the target pool (get from list_pools). | |
| memory | Yes | Clear, self-contained statement. Same language as the user. | |
| user_id | No | User contributing this memory. | |
| agent_id | No | Agent contributing this memory. | |
| priority | No | Priority level. | |
| metadata | No | JSON string with structured data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool's key behavioral trait: memories are 'visible to all pool members' (shared visibility). It doesn't cover other potential behavioral aspects like error conditions, rate limits, or authentication requirements, but provides solid core context.
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 perfectly structured and front-loaded with the core purpose, followed by usage guidelines. Every sentence earns its place with no wasted words, and the bullet-point style for usage guidelines enhances readability without sacrificing 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?
For a write operation with no annotations and no output schema, the description provides strong contextual completeness by clearly explaining the tool's purpose, usage context, and key behavioral trait (shared visibility). It could be more complete by mentioning what happens on success/failure or return values, but covers the essential context well.
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 100% schema description coverage, the schema already documents all 6 parameters thoroughly. The description adds minimal parameter-specific context beyond the schema (only implying 'memory' should be team-relevant information), meeting the baseline 3 for high 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?
The description clearly states the specific action ('Store a memory in a shared pool') and resource ('shared pool'), and explicitly distinguishes it from the sibling tool 'add_memory' by specifying it's for team/group relevance rather than individual user context. This provides excellent differentiation from alternatives.
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 explicit guidance with dedicated 'When to use' and 'When NOT to use' sections, including concrete examples ('Team decisions, shared project facts, group preferences') and a clear alternative ('use add_memory'). This gives the agent perfect context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memoryA
Permanently remove a memory by ID. Also removes it from vector index and knowledge graph.
When to use: Info is completely wrong, user explicitly says "forget this" or "remove that". When NOT to use: Info just needs correction (use update_memory instead).
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | UUID of the memory to delete. Search first if you only have the memory text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the operation is permanent ('permanently remove'), has side effects on related data structures ('removes it from vector index and knowledge graph'), and requires a specific identifier ('by ID'). However, it doesn't mention potential errors (e.g., invalid ID), permissions, or rate limits, leaving some gaps.
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 front-loaded with the core purpose in the first sentence, followed by clear usage guidelines in bullet-like sections. Every sentence earns its place by adding critical information without redundancy, making it highly efficient and well-structured.
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 complexity (destructive operation with side effects), no annotations, and no output schema, the description does well by covering purpose, usage, and parameter guidance. However, it lacks details on error handling or return values, which could be important for a deletion tool, leaving minor gaps in 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?
The schema description coverage is 100%, so the schema already documents the single parameter 'memory_id' as a UUID. The description adds value by emphasizing the need to 'search first if you only have the memory text,' providing practical guidance beyond the schema's technical definition.
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 ('permanently remove'), the resource ('a memory by ID'), and the scope of the operation ('also removes it from vector index and knowledge graph'). It distinguishes this tool from its sibling 'update_memory' by emphasizing permanent deletion versus correction.
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 explicitly provides 'When to use' scenarios (info is completely wrong, user explicitly says 'forget this' or 'remove that') and 'When NOT to use' guidance (info just needs correction, use update_memory instead). It names a specific alternative tool, making it clear when to choose this over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_knowledgeA
Retrieve the user's consolidated knowledge profile — a structured Markdown document compiled automatically from their memories.
When to use: START OF EVERY CONVERSATION. Call with merged=true to load the full user context before responding. This is the most efficient way to understand who the user is and what they care about. When NOT to use: Looking for specific info (use search_memories). Knowledge may not exist yet for brand-new users — fall back to search_memories if this returns empty.
Knowledge is compiled from memories through the processing pipeline: individual memories → consolidation → grouped topics → knowledge base. It maintains versions and gets richer as more memories are added.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | User whose knowledge to load. Defaults to "default". | |
| category | No | Filter to one category (e.g. "preferences", "work", "projects"). Omit for all. | |
| merged | No | true = single Markdown document with all categories (RECOMMENDED for context loading). false = categories returned separately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it retrieves a consolidated knowledge profile compiled from memories through a processing pipeline, maintains versions, and gets richer over time. It also mentions that knowledge may not exist for new users and suggests a fallback. However, it doesn't detail potential rate limits, authentication needs, or exact response format beyond 'structured Markdown document.'
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 and appropriately sized. It front-loads the purpose, followed by usage guidelines and behavioral context. Each sentence adds value: the first defines the tool, the second provides usage rules, the third gives behavioral details. There's minimal redundancy, though the explanation of the processing pipeline could be slightly more concise.
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 complexity (consolidated knowledge with a processing pipeline) and the absence of both annotations and an output schema, the description does a good job of providing context. It explains what the tool returns, when to use it, and how it relates to other tools. However, without an output schema, it could benefit from more detail about the exact structure of the Markdown document or example output to fully compensate for the missing structured data.
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 schema description coverage is 100%, so the schema already documents all three parameters. The description adds some semantic context: it explains that 'merged=true' is 'RECOMMENDED for context loading' and that the knowledge is 'compiled from memories through the processing pipeline.' However, it doesn't provide additional meaning beyond what's in the schema descriptions for user_id or category parameters. The baseline of 3 is appropriate when the schema does most of the work.
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's purpose: 'Retrieve the user's consolidated knowledge profile — a structured Markdown document compiled automatically from their memories.' It specifies the verb ('retrieve'), resource ('knowledge profile'), and format ('structured Markdown document'), distinguishing it from sibling tools like search_memories or get_memories that handle individual memories rather than consolidated knowledge.
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 explicit usage guidelines: 'When to use: START OF EVERY CONVERSATION. Call with merged=true to load the full user context before responding.' It also specifies when not to use: 'When NOT to use: Looking for specific info (use search_memories).' and mentions fallback behavior: 'Knowledge may not exist yet for brand-new users — fall back to search_memories if this returns empty.' This clearly differentiates it from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoriesA
List stored memories chronologically with pagination. Unlike search_memories, this does NOT rank by relevance.
When to use: Browsing, auditing, or when you need to see everything — not find something specific. When NOT to use: Looking for specific info (use search_memories) or loading user profile (use get_knowledge).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Filter to one user. | |
| agent_id | No | Filter to one agent. | |
| page | No | Page number (starts at 1). | |
| page_size | No | Items per page (default 10, max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: chronological ordering, pagination support, and the absence of relevance ranking. However, it doesn't mention potential rate limits, authentication requirements, or error conditions, leaving some behavioral aspects uncovered.
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 efficiently structured with two brief paragraphs: one stating the core functionality and differentiation, and another providing clear usage guidelines. Every sentence adds value without redundancy, and key information is front-loaded.
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 read-only list tool with no output schema, the description provides good context about ordering, pagination, and sibling differentiation. However, it doesn't describe the return format (e.g., what fields memories include) or potential limitations like maximum result sets, leaving minor gaps in 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?
The schema description coverage is 100%, providing full parameter documentation. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain interactions between user_id and agent_id filters). This meets the baseline expectation when schema coverage is high.
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's purpose with specific verbs ('List stored memories chronologically with pagination') and explicitly distinguishes it from its sibling 'search_memories' by noting it 'does NOT rank by relevance.' This provides clear differentiation from alternatives.
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 includes explicit 'When to use' and 'When NOT to use' sections, naming specific alternatives ('search_memories' and 'get_knowledge') and providing clear contexts ('Browsing, auditing, or when you need to see everything' vs. 'Looking for specific info' or 'loading user profile'). This offers comprehensive guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoryA
Retrieve a single memory by ID. Use when you have an ID from search results and need full details (timestamps, metadata, categories).
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | UUID of the memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions retrieving 'full details (timestamps, metadata, categories)', which adds useful context about the return format. However, it doesn't disclose other behavioral traits like error handling, permissions needed, or rate limits, leaving some gaps for a tool with no 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?
The description is two sentences that are front-loaded with the core purpose and usage guidelines. Every word earns its place, with no redundancy or unnecessary elaboration, making it highly efficient and easy to parse.
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 low complexity (1 parameter, no nested objects) and high schema coverage, the description is mostly complete. It covers purpose, usage, and some return details. However, with no output schema and no annotations, it could benefit from more behavioral context like error cases or response structure, slightly reducing 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?
Schema description coverage is 100%, so the schema already documents the 'memory_id' parameter as a UUID. The description adds minimal value beyond this by implying the ID comes from search results, but doesn't provide additional syntax or format details. This meets the baseline for high 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?
The description clearly states the tool's purpose with a specific verb ('Retrieve') and resource ('a single memory by ID'), and distinguishes it from siblings like 'get_memories' (plural) and 'search_memories' by specifying it's for single-item retrieval when you already have an ID. This provides precise differentiation.
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 explicitly states when to use this tool ('Use when you have an ID from search results and need full details'), providing clear context for its application. It implies alternatives like 'search_memories' for when you don't have an ID, making the guidance comprehensive and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_queryA
Ask a natural language question about the knowledge graph and get an AI-generated answer. Most powerful graph tool — uses LLM to interpret relationships and compose an answer.
When to use: Complex relationship questions. Examples: "Who on the team knows Kubernetes?", "What technologies does Project Alpha use?", "How are João and TechCorp connected?" When NOT to use: Simple entity lookup (use graph_search — cheaper). Simple memory retrieval (use search_memories — faster). This tool consumes LLM tokens for answer generation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language question about entities and relationships. Be specific. | |
| user_id | No | Scope to one user's graph data. | |
| limit | No | Max entities to consider (default 10). Higher = more complete but slower. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: the tool uses LLM for interpretation and answer generation, consumes tokens (implying cost/rate limits), and has performance characteristics (slower with higher limits). However, it doesn't mention permissions, error handling, or response format, leaving some gaps.
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 and front-loaded, with the core purpose stated first, followed by usage guidelines and examples. Every sentence adds value—no wasted words—and it efficiently communicates essential information in a compact form.
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 complexity (LLM-based querying) and lack of annotations or output schema, the description does a good job covering purpose, usage, and behavioral traits. However, it doesn't explain the return format or potential errors, which could be important for an AI agent. It's mostly complete but has minor 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 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema—it implies natural language input for 'query' but doesn't provide additional syntax or format details. Baseline 3 is appropriate as the schema does the heavy lifting.
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's purpose with specific verbs ('ask a natural language question', 'get an AI-generated answer') and distinguishes it from siblings by emphasizing its unique capability ('Most powerful graph tool — uses LLM to interpret relationships and compose an answer'). It explicitly differentiates from graph_search and search_memories, making its role distinct.
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 explicit guidance on when to use ('Complex relationship questions') and when not to use ('Simple entity lookup', 'Simple memory retrieval'), naming specific alternatives (graph_search and search_memories) and explaining trade-offs (cost and speed). This gives clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_searchA
Search the knowledge graph for entities (people, organizations, technologies, projects, etc.) by semantic similarity. Entities and relationships are automatically extracted from memories.
When to use: Discover who/what is mentioned in memories, find entities by concept ("frontend tools", "team members"), or check if an entity exists before traversing. When NOT to use: Looking for memory content (use search_memories). Looking for relationship paths (use graph_traverse after finding the entity here).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Name, role, technology, or concept. E.g. "frontend developers", "NestJS", "João". | |
| user_id | No | Scope to one user's entities. | |
| type | No | Filter: PERSON, ORGANIZATION, LOCATION, TECHNOLOGY, PROJECT, ROLE, EVENT, CONCEPT. | |
| limit | No | Max entities (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains the tool's function (semantic similarity search), scope (entities extracted from memories), and constraints (conceptual matching rather than exact text). It doesn't mention rate limits, authentication needs, or detailed output format, but provides solid operational context for a search tool.
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 perfectly structured with three focused sentences: purpose statement, when-to-use guidance, and when-not-to-use guidance. Every sentence earns its place by providing distinct value. It's front-loaded with the core functionality and efficiently addresses usage context.
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 4 parameters (100% schema coverage) and no output schema, the description provides excellent operational context. It clearly explains what the tool does, when to use it, and how it differs from alternatives. The main gap is the lack of output format information, but given the tool's relatively straightforward search nature and good parameter documentation, this is a minor limitation.
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 100% description coverage, so the schema already documents all parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema descriptions. This meets the baseline expectation when schema coverage is complete.
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 specific action ('search the knowledge graph for entities'), the resource ('entities like people, organizations, technologies'), and the mechanism ('by semantic similarity'). It distinguishes this tool from siblings like search_memories and graph_traverse by specifying it's for entity discovery rather than memory content or relationship paths.
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 explicit 'When to use' guidance with three specific scenarios (discover mentions, find by concept, check existence) and 'When NOT to use' guidance with two clear alternatives (search_memories for content, graph_traverse for paths). This gives comprehensive context for tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_traverseA
Walk relationships from a starting entity, bidirectionally, up to 3 hops deep.
When to use: You found an entity via graph_search and want to discover connections. E.g. from a person → their organization, projects, technologies. From a technology → who uses it, what depends on it. When NOT to use: You don't have an entity ID yet (use graph_search first). You want a natural language answer (use graph_query).
Typical workflow: graph_search("João") → get entity ID → graph_traverse(from=id) → see all connections.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | UUID of starting entity (from graph_search results). | |
| depth | No | Hops to follow (default 2, max 3). Higher = more connections but more data. | |
| relationship_type | No | Only this relationship type: WORKS_AT, USES, KNOWS, MANAGES, DEPENDS_ON, etc. Omit for all. | |
| entity_type | No | Only target entities of this type: PERSON, ORGANIZATION, TECHNOLOGY, PROJECT, etc. | |
| limit | No | Max connected nodes (default 50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the tool traverses relationships bidirectionally, has a depth limit (3 hops), and provides concrete examples of relationship discovery. However, it doesn't mention performance characteristics like rate limits or potential data volume impacts, which would be helpful for a traversal tool.
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 perfectly structured and concise: it starts with the core functionality, then provides clear usage guidelines with 'When to use'/'When NOT to use' sections, and ends with a workflow example. Every sentence adds value with zero wasted words, and the information is front-loaded appropriately.
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 graph traversal tool with 5 parameters, 100% schema coverage, but no annotations or output schema, the description provides excellent contextual completeness. It covers purpose, usage guidelines, behavioral context, and workflow examples. The only minor gap is the lack of information about return format or structure, which would be helpful since there's no output schema.
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 100%, so the schema already documents all 5 parameters thoroughly. The description doesn't add significant parameter semantics beyond what's in the schema - it mentions the 'from' parameter in the workflow example but doesn't provide additional context about parameter interactions or usage patterns. The baseline of 3 is appropriate when the schema does the heavy lifting.
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's purpose with specific verbs ('walk relationships', 'discover connections') and resources ('starting entity', 'bidirectionally', 'up to 3 hops deep'). It distinguishes this tool from sibling tools like graph_search (prerequisite) and graph_query (alternative for natural language queries).
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 explicit guidance on when to use ('You found an entity via graph_search and want to discover connections'), when NOT to use ('You don't have an entity ID yet', 'You want a natural language answer'), and alternatives ('use graph_search first', 'use graph_query'). It includes a typical workflow example that reinforces proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entitiesA
List all users and agents that have stored memories, with memory count per entity. Use to discover who is in the system before scoping searches.
| 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 full burden. It describes the tool's behavior (listing entities with memory counts) but doesn't disclose important behavioral traits like whether this is a read-only operation, potential rate limits, authentication requirements, or pagination behavior. The description provides basic functionality but lacks operational details.
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 perfectly concise with two sentences that each serve distinct purposes: the first defines the tool's function, the second provides usage guidance. Every word earns its place with zero redundancy or unnecessary elaboration.
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 tool with no annotations, no output schema, and 0 parameters, the description provides adequate basic information about what the tool does and when to use it. However, it doesn't describe the return format (what the list looks like, structure of entities with memory counts) or address potential limitations, which would be helpful given the lack of structured output documentation.
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 parameters and 100% schema description coverage, the baseline is 4. The description appropriately doesn't discuss parameters since there are none, and the schema fully documents the empty input structure.
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 specific action ('List all users and agents'), the target resource ('that have stored memories'), and includes a distinguishing feature ('with memory count per entity'). It precisely defines what the tool does without being tautological.
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 explicitly provides usage guidance: 'Use to discover who is in the system before scoping searches.' This tells the agent when to use this tool (for discovery before more targeted operations) and implies alternatives like search_memories or get_memories for more specific queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_poolsA
List all shared memory pools in the workspace. Pools are collaborative spaces where multiple users/agents contribute and read memories. Returns name, access level, member count, and memory count per pool.
| 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 burden. It discloses that this is a read operation (lists pools) and describes the return format (name, access level, member count, memory count), but doesn't mention potential limitations like pagination, rate limits, or authentication requirements.
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 with zero waste: the first states the action and resource, the second adds context about pools and specifies the return data. Every sentence adds value beyond what's obvious from the tool name.
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 list tool with 0 parameters and no output schema, the description is reasonably complete: it explains what the tool does, what pools are, and what data is returned. However, without annotations or output schema, it could benefit from more behavioral context (e.g., pagination, sorting).
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 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on the tool's purpose and output.
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 ('List') and resource ('all shared memory pools in the workspace'), specifying what information is returned (name, access level, member count, memory count). It distinguishes from siblings like 'search_pool' by indicating this lists ALL pools without filtering.
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 context by stating it lists 'all shared memory pools in the workspace' and describes pools as 'collaborative spaces where multiple users/agents contribute and read memories.' However, it doesn't explicitly state when to use this vs. alternatives like 'search_pool' or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoriesA
Find relevant memories by meaning, keywords, or both. This is the primary retrieval tool.
When to use: You need context about a topic, want to recall stored info, or the user asks "what do you know about X?". When NOT to use: You need the full user profile (use get_knowledge instead) or want to browse chronologically (use get_memories).
Search modes:
hybrid (default): combines semantic + keyword — best for most queries
semantic: finds conceptually related memories even with different wording — use for "how does X work?"
keyword: exact term matching — use for names, IDs, file paths, specific technical terms
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query. Be specific: "user preferences for code style" > "preferences". Use the same language the memories were stored in. | |
| user_id | No | Scope to one user. Omit to search all users in workspace. | |
| agent_id | No | Scope to one agent. | |
| limit | No | Max results (default 10, max 100). Start with 10. | |
| mode | No | Search strategy. Default: hybrid. | |
| priority | No | Filter to one priority level only. | |
| pool_id | No | Restrict to a specific shared pool. | |
| include_pool_memories | No | Also include memories from pools the user belongs to. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool's primary retrieval function and search modes. It could improve by mentioning potential limitations (e.g., search accuracy, performance characteristics) or authentication requirements, but covers core behavioral aspects adequately for a retrieval tool.
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 clear sections (purpose, usage guidelines, search modes), front-loaded with the core purpose, and every sentence adds value. No wasted words while maintaining comprehensive coverage.
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 retrieval tool with 8 parameters, 100% schema coverage, and no output schema, the description provides excellent context about when to use, search modes, and sibling differentiation. It could slightly improve by mentioning what the output looks like (memory objects with scores?) since there's no output schema, but otherwise very 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?
Schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description adds value by explaining the three search modes (hybrid, semantic, keyword) with usage examples, but doesn't provide additional parameter semantics beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does heavy lifting.
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's purpose: 'Find relevant memories by meaning, keywords, or both' and identifies it as 'the primary retrieval tool.' It distinguishes from siblings like get_knowledge (full user profile) and get_memories (chronological browsing), providing specific verb+resource differentiation.
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 explicitly provides 'When to use' scenarios (need context, recall stored info, user asks about X) and 'When NOT to use' with named alternatives (get_knowledge for full profile, get_memories for chronological browsing). It also includes guidance on search mode selection with specific examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_poolA
Search within a specific shared pool. Like search_memories but scoped to one pool. Use for team/project context.
| Name | Required | Description | Default |
|---|---|---|---|
| pool_id | Yes | UUID of the pool to search. | |
| query | Yes | Natural language query in the same language as pool memories. | |
| limit | No | Max results (default 10). | |
| mode | No | Search strategy. Default: hybrid. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions scoping to one pool, it doesn't describe what gets returned (formats, structure), whether results are paginated, authentication requirements, rate limits, or error conditions. For a search tool with no annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just two sentences that each serve a clear purpose: the first defines the tool's function, and the second provides usage guidance. There's zero wasted language or 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?
For a search tool with 4 parameters, 100% schema coverage, but no annotations and no output schema, the description provides adequate basic context about purpose and scoping. However, it doesn't address what the search returns (formats, structure) or behavioral aspects like error handling, which would be important for a tool with no output schema.
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 schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter information beyond what's already in the schema descriptions. This meets the baseline expectation when schema coverage is complete.
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 searches within a specific shared pool, which is a specific verb+resource combination. It distinguishes from sibling 'search_memories' by specifying the scoping to one pool, though it doesn't fully differentiate from other search-related siblings like 'graph_search' or 'graph_query'.
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 for when to use this tool ('for team/project context') and explicitly mentions the alternative 'search_memories' for comparison. However, it doesn't specify when NOT to use it or mention other potential alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memoryA
Replace an existing memory with new text. Triggers re-processing (new embedding, re-categorization, re-consolidation).
When to use: User corrects a fact, a preference changed, or info is outdated. PREFER this over delete+add when fixing existing info. When NOT to use: The info is completely wrong and should just be removed (use delete_memory).
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | UUID of the memory to update. | |
| memory | Yes | New memory text that fully replaces the existing one. Write as a complete, self-contained statement. | |
| priority | No | Optionally change priority. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the mutation nature ('Replace'), consequences (triggers re-processing including embedding, categorization, consolidation), and operational preferences (prefer over delete+add). However, it lacks details on permissions, error handling, or rate limits, which would elevate it to 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?
The description is front-loaded with the core purpose, followed by structured usage guidelines. Every sentence earns its place by providing essential operational or contextual information without redundancy, making it highly efficient and well-organized.
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 mutation complexity and lack of annotations or output schema, the description is largely complete for tool selection—it covers purpose, usage, and behavioral effects. However, it omits details on return values or error responses, which would be needed for full invocation support, preventing a perfect score.
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 100%, so the schema already documents all parameters thoroughly. The description does not add any additional meaning or context beyond what the schema provides for memory_id, memory, or priority, resulting in a baseline score of 3.
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 specific action ('Replace an existing memory with new text') and resource ('memory'), distinguishing it from siblings like delete_memory (removal) and add_memory (creation). It explicitly mentions triggering re-processing, which adds operational context beyond basic replacement.
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 explicit 'When to use' scenarios (correcting facts, preference changes, outdated info) and 'When NOT to use' guidance (completely wrong info, directing to delete_memory). It also advises preferring this tool over delete+add for fixing existing info, offering clear alternatives.
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.
14 tool updates
v0.3.0- First observed
add_memory - First observed
add_memory_to_pool - First observed
delete_memory - First observed
get_knowledge - First observed
get_memories - First observed
get_memory - First observed
graph_query - First observed
graph_search - First observed
graph_traverse - First observed
list_entities - First observed
list_pools - First observed
search_memories - First observed
search_pool - First observed
update_memory
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose with minimal overlap. For example, add_memory vs. add_memory_to_pool differentiate personal vs. shared storage, while search_memories, get_memories, and get_knowledge serve different retrieval needs (semantic search, chronological listing, and consolidated profile). The descriptions explicitly guide when to use and not use each tool, preventing confusion.
Tool names follow a consistent verb_noun pattern throughout, such as add_memory, delete_memory, get_knowledge, search_memories, and graph_query. All tools use snake_case without deviation, making them predictable and easy to understand at a glance.
With 14 tools, the server offers comprehensive coverage for memory management without being overwhelming. The count aligns well with the domain's scope, including operations for storing, retrieving, updating, deleting, and analyzing memories, as well as graph-based queries and pool management, ensuring each tool has a clear role.
The tool set provides complete CRUD/lifecycle coverage for memory management (add, get, update, delete) and extends to advanced features like semantic search, knowledge graph traversal, and pool collaboration. There are no obvious gaps; tools like get_knowledge and graph_query handle high-level needs, while search_memories and graph_search cover specific retrievals, enabling smooth agent workflows.
Maintenance
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Persistent memory for AI agents. Search and store durable facts, preferences and decisions.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceProvides AI agents with persistent memory and knowledge management through a comprehensive knowledge graph platform. Enables storing, searching, and managing entities, relationships, and observations with advanced features like trending analysis and smart ranking.3-
- FlicenseNot gradedqualityDmaintenanceProvides AI agents with persistent, searchable memory that survives across conversations using semantic search, temporal versioning, and smart organization. Enables long-term context retention and cross-session continuity for AI assistants.14-
- AlicenseAqualityDmaintenanceEnables AI agents with persistent semantic memory, including semantic recall, knowledge graphs, and instant domain expertise via pre-built Intelligence Packs.1038 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent knowledge graph memory for AI agents, enabling them to store, recall, and query facts about people, projects, and relationships across sessions.MIT