SyncContext
Provides embedding generation using locally-hosted Ollama models, enabling offline semantic memory search.
Provides embedding generation using OpenAI's API, enabling semantic search over team memories.
Provides persistent storage for memories and vectors using PostgreSQL with pgvector for relational and semantic queries.
Provides sub-millisecond vector search using Redis Stack for fast memory retrieval.
Click on "Install 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., "@SyncContextsave: use React with TypeScript for frontend"
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.
SyncContext
Shared team memory for AI coding agents. Sync context, decisions, and knowledge across your entire team via the Model Context Protocol.
The Problem
AI coding agents (Claude Code, Cursor, Windsurf) each maintain isolated context. Developer A's agent knows nothing about Developer B's decisions. This leads to:
Conflicting architecture decisions across team members
Repeated mistakes and lost institutional knowledge
Painful onboarding for new developers
No shared understanding between frontend, backend, and infra
Related MCP server: AIVectorMemory
The Solution
SyncContext provides a shared semantic memory layer that connects your team's AI agents. One token per project, shared brain, unlimited team members.
Developer A (Frontend) --> saves: "Button uses Tailwind, prop X is required"
Developer B (Backend) --> searches: "frontend patterns" --> gets full context
Developer C (New hire) --> runs: get_project_context --> instant onboardingHow It Works
Your team deploys SyncContext (self-hosted or cloud)
Each developer adds the server URL + their project token to their MCP client
On first connection, the project is auto-created in the database
AI agents read and write shared memories scoped to the project
MCP Client (Claude Code, Cursor)
│
│ Authorization: Bearer <project-token>
│ X-Project-Name: "My Project"
│
▼
SyncContext Server (HTTPS)
│
├── New token? → Auto-create project in DB
├── Known token? → Load existing project
│
▼
PostgreSQL + pgvector (semantic search)Quick Start
Option 1: Connect to a hosted instance
Add to your .mcp.json (Claude Code) or MCP settings (Cursor):
{
"mcpServers": {
"synccontext": {
"url": "https://your-synccontext-server.com/mcp",
"headers": {
"Authorization": "Bearer your-project-token",
"X-Project-Name": "My Project"
}
}
}
}That's it. The project is auto-created on first connection.
Option 2: Self-hosted with Docker
git clone https://github.com/infinity-ai-dev/SyncContext.git
cd SyncContext
cp .env.example .env
# Edit .env: set SYNCCONTEXT_GEMINI_API_KEY
docker compose up -dOption 3: Local development (stdio)
# Requires PostgreSQL with pgvector
uv sync
uv run synccontextMCP Client Configuration
Cloud / HTTP mode (recommended)
Works with any MCP client that supports HTTP transport:
{
"mcpServers": {
"synccontext": {
"url": "https://your-server.com/mcp",
"headers": {
"Authorization": "Bearer your-project-token",
"X-Project-Name": "My Project"
}
}
}
}Local / stdio mode
For local development with a direct database connection:
{
"mcpServers": {
"synccontext": {
"command": "uv",
"args": ["--directory", "/path/to/SyncContext", "run", "synccontext"],
"env": {
"SYNCCONTEXT_PROJECT_TOKEN": "my-team-token",
"SYNCCONTEXT_DATABASE_URL": "postgresql://user:pass@localhost:5432/synccontext",
"SYNCCONTEXT_GEMINI_API_KEY": "your-key"
}
}
}
}Tools (14 total)
Memory Management
Tool | Description |
| Store decisions, patterns, bugs, conventions with metadata |
| Retrieve a specific memory by UUID |
| Update content (auto re-embeds if changed) |
| Remove a specific memory |
| Import multiple memories at once |
Search & Discovery
Tool | Description |
| Semantic search across all team knowledge |
| Find context about specific files |
| Discover related memories by similarity |
| Browse recent memories with filters |
Project Overview
Tool | Description |
| Full project summary (onboarding) |
| All knowledge categories with counts |
| Who's contributing knowledge |
Admin
Tool | Description |
| Create a new project (admin token required) |
| List all registered projects (admin token required) |
Architecture
┌─────────────────────────────────────┐
│ Claude Code / Cursor / Windsurf │
│ (MCP Client) │
└──────────┬──────────────────────────┘
│ HTTPS + Bearer Token
┌──────────▼──────────────────────────┐
│ SyncContext MCP Server │
│ ┌────────────┐ ┌───────────────┐ │
│ │ Auth │ │ Per-request │ │
│ │ Middleware │──│ Project Scope │ │
│ └────────────┘ └───────────────┘ │
│ ┌────────────┐ ┌───────────────┐ │
│ │ Embedding │ │ Memory + │ │
│ │ Provider │ │ Search Service│ │
│ └────────────┘ └───────────────┘ │
└──────────┬──────────────────────────┘
│
┌──────────▼──────────────────────────┐
│ PostgreSQL + pgvector │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ projects │ │ memories + │ │
│ │ (tokens) │──│ memory_vectors │ │
│ └──────────┘ └──────────────────┘ │
└─────────────────────────────────────┘Multi-Project Isolation
Each project token maps to an isolated namespace. Multiple teams share the same server with full data isolation:
Token A ("sc_frontend...") → Project "Frontend App" → memories scoped to frontend
Token B ("sc_backend...") → Project "Backend API" → memories scoped to backend
Token C ("sc_infra...") → Project "Infrastructure" → memories scoped to infraEmbedding Providers (auto-detected)
Provider | Dimensions | Cost | Offline | Detected by |
Gemini | 768 | Free (1500 req/min) | No |
|
OpenAI | 1536 | $0.02/1M tokens | No |
|
Ollama | 768 | Free | Yes |
|
Vector Store Backends
Backend | Best For | Persistence |
pgvector (default) | Relational queries + vectors | Disk (durable) |
Redis Stack | Sub-ms latency | AOF + volume (durable) |
Configuration
All settings via environment variables (prefix SYNCCONTEXT_):
Variable | Default | Description |
| — | Default project token (stdio mode) |
| — | Admin token for create/list projects |
|
| PostgreSQL connection string |
|
|
|
|
|
|
| — | Gemini API key |
| — | OpenAI API key |
| — | Ollama server URL |
|
|
|
|
| HTTP bind address |
|
| HTTP port |
Self-Hosted Deployment (Docker Swarm)
Prerequisites
Docker Swarm with Traefik
PostgreSQL with pgvector extension
A domain pointing to your server
1. Prepare the database
# Install pgvector
docker exec $(docker ps -q -f name=postgres) bash -c \
"apt-get update && apt-get install -y postgresql-16-pgvector"
# Create database + extensions
docker exec $(docker ps -q -f name=postgres) psql -U postgres -c "CREATE DATABASE synccontext"
docker exec $(docker ps -q -f name=postgres) psql -U postgres -d synccontext -c \
'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "vector";'2. Deploy the stack
See deploy/swarm-stack.yml for a complete Portainer-ready stack with Traefik integration.
3. Tables are created automatically
On first startup, the container runs migrations and creates all tables. Check logs to confirm.
Development
uv sync --extra dev
uv run pytest tests/ -v # 53 tests
uv run ruff check core/ server/
uv run synccontext # run locally (stdio)Docker Images
Multi-arch images for linux/amd64 and linux/arm64:
docker pull infinitytools/synccontext:latestRoadmap
14 MCP tools (CRUD, search, bulk, admin)
pgvector + Redis backends
Gemini / OpenAI / Ollama embeddings (auto-detected)
Docker multi-arch builds (amd64 + arm64)
Multi-project with per-request auth
Auto-create projects from Bearer token
Auto-migrations on container startup
SyncContext Cloud (managed SaaS)
Web dashboard for memory management
Webhook notifications on memory changes
Memory expiration / archival policies
RAG integration (index entire codebases)
License
MIT — see LICENSE for details.
Available Tools
14 toolsbulk_save_memoriesA
Save multiple memories at once.
Args: memories: List of memory objects with 'content' (required) and optional 'author', 'tags', 'file_path', 'memory_type'
| Name | Required | Description | Default |
|---|---|---|---|
| memories | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Save multiple memories at once' and does not mention atomicity, duplicate handling, permissions, partial failure behavior, or whether existing memories are overwritten. This is a mutation tool, so these gaps are material.
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 compact and front-loaded: one clear purpose sentence followed by a concise args list. Every line earns its place, with no redundant information or boilerplate.
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 parameter, though with nested objects), the presence of an output schema, and the description's explanation of the memory object shape, the agent has enough to structure a correct request. It lacks behavioral context like batch failure semantics, but that is the main remaining gap.
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 is nearly empty ('additionalProperties: true' with no property definitions), so the description's enumeration of memory fields — 'content' as required, with optional 'author', 'tags', 'file_path', 'memory_type' — adds substantial meaning. It compensates for the 0% schema coverage, though it omits types and formats for the optional fields.
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 action ('Save multiple memories') and resource ('memories'), and the phrase 'at once' signals batch behavior, distinguishing it from the singular 'save_memory' sibling. However, it does not explicitly name the alternative or elaborate on what separates it beyond the batch aspect, so it is clear but not fully differentiated.
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 only implied by 'multiple memories at once' — an agent can infer this is for bulk operations, but there is no explicit statement of when to use it vs 'save_memory' or when not to use it. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectB
Create a new project. Returns the generated token.
Args: name: Display name for the project description: Optional project description admin_token: Admin authentication token
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| admin_token | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses one meaningful behavior (returns the generated token) and mentions the admin_token argument, but it does not describe permission requirements, idempotency, side effects, or what happens if admin_token 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 compact, front-loaded with the core purpose, and organizes parameter details in a clean Args block. Every sentence adds value and no wasted words are present.
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 low-complexity create operation, the core purpose, return token, and parameter meanings are present, and the output schema reduces the need to describe return shape in detail. However, auth behavior, usage context, and side-effect expectations are under-specified, leaving moderate 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%, and the Args section compensates by giving each parameter a brief semantic: name is a display name, description is optional, admin_token is an authentication token. The admin_token explanation is terse, but it still adds meaning beyond the raw 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 states a specific operation and resource: 'Create a new project.' It also adds a key outcome ('Returns the generated token'), which clarifies what the tool accomplishes. It does not explicitly contrast itself with sibling tools like list_projects, so it lacks overt sibling 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 provides no guidance on when to use create_project instead of sibling tools, nor does it state prerequisites such as whether admin_token is required or whether the caller needs existing project context. The only implied usage is the obvious 'when you need a new project.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memoryA
Delete a specific memory by its ID.
Args: memory_id: UUID of the memory to delete
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses that the operation deletes a memory, but says nothing about permanence/irreversibility, permissions, effects on associated data, or behavior when the ID doesn't exist. For a destructive mutation, that is a meaningful omission.
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 compact and front-loaded: one clear action sentence followed by a minimal Args block. No filler or redundant restating of 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 single-parameter tool with an output schema, the operational essentials are mostly present: what it deletes and what memory_id means. Still, the missing side-effect/behavioral context and lack of usage guidance leave it slightly short of fully self-sufficient for an AI agent.
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 only exposes memory_id as a string, while the description adds that it is a UUID and explains that it identifies 'the memory to delete.' This compensates for the 0% schema coverage. It is brief but sufficient given only one required parameter.
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 opening sentence 'Delete a specific memory by its ID' identifies the exact operation and target, and the sibling list makes the distinction obvious: this is the only delete operation among get/update/list/save tools. It states a specific verb and resource 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?
There is no guidance about when to choose this tool over alternatives such as update_memory or bulk_save_memories, no prerequisites, and no exclusions. The intended use is only implied by the word 'Delete' rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similarB
Find memories semantically similar to an existing memory.
Args: memory_id: UUID of the source memory top_k: Maximum number of similar memories (default 5)
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | 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?
With no annotations provided, the description carries the full burden. It discloses the core behavior (semantic similarity search) and implies read-only via 'find', but omits useful edge-case details such as whether the source memory itself can appear in the results, how results are ordered, or what happens when the memory_id does not exist.
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?
One clear opening sentence followed by a minimal Args block. No filler, no repetition of schema boilerplate, and the purpose is front-loaded. Every sentence earns its place.
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?
An output schema exists, so return values are already covered. For a simple 2-parameter tool, the definition adequately covers purpose and parameters, but it misses usage context (when to prefer this over other memory tools) and behavioral edge cases. It is minimally viable but leaves 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% — the schema only provides titles ('Top K', 'Memory Id'). The description compensates well by documenting both parameters: memory_id as the UUID of the source memory and top_k as the maximum number of results with its default of 5. This adds real 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 uses a specific verb (find) with a resource (memories) and a distinguishing qualifier ('semantically similar to an existing memory'). This clearly communicates what the tool does and differentiates it from plain memory retrieval, though it doesn't explicitly contrast with 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?
There is no guidance on when to use this tool versus alternatives, no exclusions, and no mention of prerequisites or context (e.g., when semantic search is preferred over keyword/ID-based lookup). The agent must infer usage from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoryA
Get a single memory by its UUID.
Args: memory_id: UUID of the memory to retrieve
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. 'Get' clearly signals a read-only retrieval operation with no destructive side effects, and the UUID argument defines the lookup target. It does not mention not-found behavior, permissions, or returned shape, but for a simple single-resource getter this is adequate.
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 short, purposeful sections with no filler. The main statement is front-loaded, and the parameter note is minimal and directly useful.
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 tool has a single required parameter, an output schema, and a simple read-only purpose, so the description covers the essential invocation details. It is not exhaustive about edge cases or alternative tools, but it is complete enough for an agent to call get_memory correctly when a memory UUID is known.
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. It does so by explaining that memory_id is the UUID of the memory to retrieve, which is the only parameter and is required. The explanation aligns with the schema and gives the agent enough semantic information to invoke the tool correctly.
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 concrete action ('Get'), a specific resource ('a single memory'), and a precise identifier ('by its UUID'). This makes the tool's purpose unambiguous and distinguishes it from sibling tools that search, list, or bulk-save memories.
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 the caller has a UUID and wants exactly one memory record. However, it does not explicitly state when to prefer this over search_memories, list_memories, or find_similar, so the usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextA
Get a summary of the project's shared knowledge base.
Use this when onboarding to a project or when you need an overview of what the team has documented so far.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 behavioral burden. 'Get' and 'summary' imply a safe, read-only operation, and no contradiction exists. However, it does not disclose how the project is selected, whether anything is mutated, or that it relies on an implicitly active project 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 two short sentences with no filler. The main action is front-loaded, and the usage guidance follows naturally 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 zero-parameter tool with an output schema present, this description is complete enough. It states what the tool returns conceptually, when to use it, and no input configuration is needed.
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, so the description does not need to explain parameter behavior. The baseline for zero parameters is 4, and the description adds no unnecessary input details, which is appropriate.
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 identifies a specific verb and resource: 'Get a summary of the project's shared knowledge base.' It is easy to distinguish from memory-level operations like get_memory or list_memories, though it does not explicitly name an alternative or draw a contrast.
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 explicit usage context: 'Use this when onboarding to a project or when you need an overview of what the team has documented so far.' It does not mention when not to use it or point to alternatives, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contributorsA
List all contributors who have saved memories in this project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 burden of behavioral disclosure. It communicates the read-only nature implicitly through 'List' and adds the scope qualifier 'who have saved memories in this project', but does not describe edge cases like deduplication, ordering, or whether all historical contributors are included.
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, tightly written sentence that immediately states the action, resource, and scope. Every word adds value, and there is no redundant or filler 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?
Given that the tool has no parameters and an output schema exists, the description is nearly complete. It could be slightly more explicit about the expected use case among the many list-style sibling tools, but for a zero-parameter listing operation, the core context is sufficiently conveyed.
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, so there are no parameter semantics to explain. The schema coverage is effectively 100%. The description does not need to add parameter-level detail, and the baseline of 4 is appropriate.
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 a specific action ('List') with a specific resource ('contributors') and a scope ('who have saved memories in this project'). It distinguishes itself from sibling tools like list_projects, list_memories, and list_tags by identifying a unique resource type.
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 you need to know which contributors have saved memories in the project, but it does not provide explicit when-to-use guidance or contrast with alternative tools. No exclusions 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.
list_memoriesA
List recent memories from the project.
Args: limit: Maximum number of memories to return (default 20) tag: Filter by tag author: Filter by author memory_type: Filter by type (general, decision, bug, pattern, onboarding)
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| author | No | ||
| memory_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. It correctly communicates a read-only listing operation and documents basic filters, but it does not clarify sorting behavior, what 'recent' means, or how filters combine. This is acceptable but not deeply transparent.
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 main purpose, and uses a clear args list. Every sentence adds value without verbose filler.
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 output schema exists, so return value details are likely covered elsewhere. The description covers the tool's action and all parameters, though it could clarify ordering and filter combination semantics. Overall, it is sufficiently complete for a simple list 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?
Schema description coverage is 0%, and the description compensates well by explaining every parameter: limit as maximum count, tag/author as filters, and memory_type with an explicit enum-like list. This adds meaning well beyond the bare schema properties.
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 action (list) and resource (recent memories from the project), which is clear and unambiguous. It does not explicitly differentiate from siblings like search_memories, but 'list recent memories' does enough to convey the core purpose.
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 phrase 'list recent memories' implies when to use the tool, but there is no explicit guidance about when to choose this over search_memories, get_memory, or list_tags. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all registered projects. Requires admin token.
Args: admin_token: Admin authentication token
| Name | Required | Description | Default |
|---|---|---|---|
| admin_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. 'List' signals a read-only operation, and the admin-token requirement is a useful authorization disclosure. Still, it does not explicitly rule out side effects or mention pagination, rate limits, or how a null/default token is handled.
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 concise and front-loaded: the core purpose appears in the first sentence, followed by the auth requirement and a one-line parameter explanation. There is no redundant or filler 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?
For a simple list tool with one parameter and an output schema, the description covers the essential action, resource, and auth condition. The main gap is the ambiguity between the schema's optional token and the description's 'Requires admin token' statement, which could affect 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?
Schema description coverage is 0%, so the description must compensate. The Args line identifies admin_token as an 'Admin authentication token,' which adds a little meaning beyond the schema's title 'Admin Token' and default null. However, it mostly restates the schema, and the contradiction between 'Requires admin token' and the schema making the parameter optional is left unresolved.
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 opens with 'List all registered projects,' a specific verb and resource that makes the tool's function unmistakable. This clearly distinguishes it from siblings like create_project, get_project_context, and list_memories, which operate on different resources or actions.
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 a clear prerequisite ('Requires admin token') and implies the tool is for retrieving the full project list. However, it provides no guidance on when to use this tool over alternatives like get_project_context or search_by_file, leaving comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List all unique tags used in this project with their usage counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full responsibility for behavioral disclosure. It honestly indicates a read-only listing operation and adds the aggregation detail ('usage counts'), but it does not mention ordering, project-scope assumptions, or whether tag matching is case-sensitive. This is acceptable but not comprehensive.
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, well-structured sentence conveys the action, scope, and return content without unnecessary detail. It is front-loaded and every word contributes meaning.
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 an output schema available, the description is complete: it specifies what is listed and what information is returned. The only implicit assumption is which project is 'this project,' which is typical in a context-aware MCP environment and not a meaningful gap.
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 schema coverage is effectively 100% because no parameters need explanation. The description does not need to elaborate on parameter semantics, so a baseline-4 score is appropriate.
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 ('List'), the resource ('all unique tags'), and the result shape ('with their usage counts'). This is specific and easily distinguishes the tool from sibling list tools like list_projects and list_memories, which operate on different resources.
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 intended use is evident: call this tool when the agent needs an inventory of tags and how often they are used. It does not explicitly discuss when not to use it or name alternatives, but there are no sibling tools that perform a tag-listing function, making the guidance implicitly sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_memoryA
Save a memory to the shared team knowledge base.
Use this to store architecture decisions, patterns, bugs, conventions, or any context useful for team members and AI agents.
Args: content: The memory content to save author: Who is saving this (developer name/email) tags: Categorization tags (e.g. ["auth", "frontend", "decision"]) file_path: Related file path if applicable memory_type: Type: general, decision, bug, pattern, onboarding
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| author | No | ||
| content | Yes | ||
| file_path | No | ||
| memory_type | No | general |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does reveal that the memory goes to a shared team knowledge base visible to team members and AI agents, which is useful. However, it does not mention side effects like creating a new entry, deduplication, overwrite behavior, permissions, or how failures are surfaced.
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 front-loaded purpose statement followed by a compact Args list. Nearly every line adds value, though the list of examples in the second sentence could have been trimmed without losing much.
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 tool has five parameters and no schema-level descriptions, yet the description documents all of them and gives useful examples. An output schema is present, so omitting return-value details is acceptable. The main missing element is explicit routing against sibling tools, but the description is otherwise sufficient for a straightforward 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 description must compensate for parameter meaning. The Args block does this well: it explains content, author, tags with an example, file_path relevance, and memory_type allowed values. This is a meaningful addition over the bare schema property titles 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 opens with a clear verb and object: 'Save a memory to the shared team knowledge base.' It then gives concrete examples of what to store, such as architecture decisions, patterns, bugs, and conventions. It does not explicitly name or contrast siblings like bulk_save_memories or update_memory, so it stops short of full sibling 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 gives explicit usage context: 'Use this to store architecture decisions, patterns, bugs, conventions, or any context useful for team members and AI agents.' This tells an agent when the tool is appropriate. It does not describe when-not-to-use or point to exact alternatives like update_memory or bulk_save_memories, so comprehensive routing guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_fileA
Find all memories related to a specific file path.
Args: file_path: File path to search for (substring match, case-insensitive) limit: Maximum number of results (default 20)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| file_path | Yes |
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 must carry the behavioral burden. It does disclose useful search semantics: substring match, case-insensitive matching, and a default result limit. However, it leaves 'related to a file path' somewhat ambiguous and does not describe sorting, pagination, or no-match behavior.
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 compact, front-loaded with the purpose, and then gives only relevant parameter details. No filler or redundant prose appears.
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 two-parameter search tool with an output schema, the core behavior and parameters are sufficiently covered. The main missing piece is guidance on selecting this tool among sibling search tools, but that is largely a usage-guidance concern.
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 thoroughly documents both parameters. It explains that file_path is a case-insensitive substring search and that limit caps the number of results, adding meaning well beyond the raw schema types 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 uses a specific verb and resource: it finds all memories matching a file path. This clearly distinguishes it from sibling search tools like search_memories and find_similar, whose names suggest broader or similarity-based search.
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 intended use is implied: call this when you need memories related to a file path. However, it does not explicitly say when to prefer this over search_memories or find_similar, and it gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoriesA
Search team memories by semantic similarity.
Use this to find relevant context, decisions, patterns, or conventions that team members have previously documented.
Args: query: Natural language search query top_k: Maximum number of results (default 5) tag: Filter by specific tag author: Filter by specific author
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| query | Yes | ||
| top_k | No | ||
| author | 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 burden of behavioral disclosure. It does convey the semantic retrieval behavior and the source data, but it does not explain limitations, result ordering, filtering behavior, or what the output represents. It is adequate but not rich.
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 appropriately concise: a one-line summary, a short usage note, and a minimal Args listing. Every part earns its place, and the key purpose 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 straightforward search tool with four parameters, the description covers the operation, parameter meanings, and intended context. The presence of an output schema reduces the need to document return values. Minor gaps include lack of combination semantics for filters and no sibling differentiation.
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 has 0% description coverage, so the description must compensate. It does so by explaining each parameter: query as a natural language query, top_k as maximum results, and tag/author as filters. This adds meaningful guidance beyond the bare schema titles.
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 a specific action—'Search team memories by semantic similarity'—and identifies the resource and method. It names what the tool does, though it does not fully distinguish it from siblings like find_similar or search_by_file.
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 an explicit use case: use this to find relevant context, decisions, patterns, or conventions documented by team members. It gives clear context for when to use the tool, but does not mention when not to use it or point to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memoryB
Update an existing memory. Re-embeds automatically if content changes.
Args: memory_id: UUID of the memory to update content: New content (triggers re-embedding if changed) tags: New tags (replaces existing) file_path: New file path memory_type: New memory type
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| content | No | ||
| file_path | No | ||
| memory_id | Yes | ||
| memory_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a valuable non-obvious behavior: 'Re-embeds automatically if content changes.' It also clarifies that tags 'replace existing' rather than merge. However, with no annotations provided, the description carries the full burden for behavioral disclosure and still omits important details such as error handling, what happens when fields are omitted or null, and whether updates are atomic.
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 appropriately sized: a one-line summary front-loads the key behavioral note about re-embedding, followed by a clean, structured Args list. Each line is informative and earns its place; there is no filler or repetition of schema information.
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 tool has an output schema, so return values need not be described. Required and optional parameters are covered. However, a critical gap remains: the semantics of passing null versus omitting fields (e.g., does null clear tags or mean 'no change'?) is unclear, which is essential for a correct update call. The description is 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 schema description coverage at 0%, the description compensates by explaining all five parameters in the Args block. It adds meaningful semantics beyond the schema, such as 'triggers re-embedding if changed' and 'replaces existing.' This is sufficient for basic parameter understanding, though it could be richer about null handling.
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: 'Update an existing memory.' It clearly names the action and target. However, it doesn't explicitly differentiate from the sibling save_memory, which could serve as the creation counterpart; the distinction is implied by 'existing' but not stated.
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 explicit guidance on when to use this tool versus alternatives like save_memory or delete_memory. The phrase 'existing memory' implies it is for modifying already-saved memories, but no context, prerequisites, or exclusions are provided, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v0.1.0- First observed
bulk_save_memories - First observed
create_project - First observed
delete_memory - First observed
find_similar - First observed
get_memory - First observed
get_project_context - First observed
list_contributors - First observed
list_memories - First observed
list_projects - First observed
list_tags - First observed
save_memory - First observed
search_by_file - First observed
search_memories - First observed
update_memory
TDQS
Most tools target distinct resource-action pairs, and descriptions clarify intent. The main overlaps are save_memory/bulk_save_memories and search_memories/find_similar, but their singular vs. bulk and query vs. example-based retrieval differences are reasonably clear.
The dominant verb_noun pattern (save_memory, list_memories, get_memory, delete_memory, update_memory, create_project) is clear and consistent. A couple of names like find_similar and search_by_file deviate from the object-oriented pattern but remain readable and predictable.
14 tools is within a reasonable scope for a shared knowledge base covering memory CRUD, project management, and metadata exploration. The count is slightly higher than necessary because bulk_save_memories and find_similar add convenience rather than essential functionality.
The memory lifecycle is well covered with create, read, update, delete, list, and multiple search modes, plus project overview and tag/contributor metadata. Minor gaps exist around project update/delete and a bulk delete operation, but these are not likely to block core workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP memory server. One memory your agents share — across models, devices and apps.
shared AI-context layer for teams — persistent memory your agents search and update over MCP
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server that provides AI assistants with a shared, persistent SQLite-backed memory for storing and retrieving project context, decisions, and discoveries. It enables cross-session continuity and team-wide knowledge sharing to keep AI coding tools aligned and informed.3MIT
- AlicenseBqualityBmaintenanceMCP server that provides cross-session persistent memory for AI coding assistants using local vector database and semantic search, enabling automatic recall of project context, issues, and tasks.991Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA local MCP server that provides semantic memory storage and retrieval for coding and AI agents, enabling durable context across chat sessions.524-
- AlicenseAqualityDmaintenanceMCP server for semantic code indexing using vector embeddings, enabling AI agents to maintain persistent memory of codebases through natural language queries and intelligent chunking.19764MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/infinitylabs-io/SyncContext'
If you have feedback or need assistance with the MCP directory API, please join our Discord server