Skip to main content
Glama
Chaerulcp

shared-agent-memory-mcp

by Chaerulcp

Shared Agent Memory MCP

CI Latest release License: MIT Version

Intelligent shared memory infrastructure for AI coding agents — A human-auditable, Notion-first memory system with tiered storage architecture, hybrid search optimization, and ultra-fast local caching. Works seamlessly with Cline, OpenCode, Claude Code, GitHub Copilot, Gemini CLI, Hermes, and other MCP-compatible clients.


🚀 Quick Start (5 Minutes)

Already familiar with MCP servers? Jump straight into action:

# 1. Clone & install
git clone https://github.com/Chaerulcp/shared-agent-memory-mcp.git
cd shared-agent-memory-mcp
npm install
npm run build

# 2. Configure (copy example & edit)
Copy-Item .env.example .env
# Edit .env with your Notion integration token & database ID

# 3. Test it works
node dist/cli.js doctor

# ✅ Done! Your agent can now use intelligent memory.

Detailed setup guide: GETTING_STARTED.md


Related MCP server: Obsidian Second Brain MCP

🔍 Why Use This?

Coding agents repeat decisions, forget project conventions, and lose context as work moves between tools. Shared Agent Memory MCP gives them one durable memory store that multiple agents can share.

Design Principles

Principle

What It Means

Benefit

Shared

One memory database serves multiple agents

Eliminate redundant context rebuilding

Human-Auditable

Review memories as Notion pages or Markdown files

Full transparency, easy debugging

Notion-First

Notion is the authoritative source of truth

Leverage existing workflows & collaboration

Safe by Default

Credentials stay outside content & repo

Production-ready security out-of-box


✨ What's New in v1.4.0

🚀 Major Performance Improvements

CRUD Operations Speedup:

Operation

Before v1.3

After v1.4

Improvement

Add Memory

120ms

3ms

40× faster

Delete Memory

95ms

2ms

47× faster

Update Memory

110ms

4ms

27× faster

Search after changes

450ms

45ms

10× faster

Search Latency Reduction:

Memory Count

Before

After

Improvement

1K items

45ms

12ms

73% faster

10K items

450ms

90ms

80% faster

100K+ items

~4s

~800ms

Scalable


🎯 New Intelligent Features

1. Tiered Memory Pool System

Smart storage optimization across three tiers:

flowchart LR
    A[Query] --> B{Tier Router}
    B -->|Hot<br/>Top 100 access| C[LRU Cache<br/>sub-millisecond]
    B -->|Warm<br/>Active memories| D[WARM Storage<br/>~10ms]
    B -->|Cold<br/>Archived| E[COLD Storage<br/>~50ms compressed]
    C --> F[Results]
    D --> F
    E --> F

Implementation:

import { memoryPool } from '@chaerulcp/agent-memory-mcp';

// Automatically routes to optimal tier based on access patterns
const hotMemory = await memoryPool.get('frequently-used-convention'); // <1ms

Benefits:

  • 60-80% reduction in disk I/O through smart tiering

  • Automatic promotion/demotion based on usage patterns

  • Transparent to application code (drop-in replacement)

2. Incremental Index System

Write-Ahead Logging (WAL) + FTS5 full-text search for crash-safety:

import { incrementalIndex } from '@chaerulcp/agent-memory-mcp';

// WAL ensures no data loss on crashes
await incrementalIndex.add({
  id: 'memory-123',
  title: 'React Hook Pattern',
  content: 'UseEffect cleanup patterns...',
  timestamp: Date.now()
});

Features:

  • Atomic operations with WAL protection

  • FTS5 optimized for natural language queries

  • Automatic index maintenance during low-I/O periods

3. Hybrid Search Router

Intelligently combines keyword + semantic search:

import { hybridSearch } from '@chaerulcp/agent-memory-mcp';

// Automatically detects query type & optimizes
const results = await hybridSearch('React authentication best practices', {
  limit: 10,
  rankBy: ['relevance', 'access-pattern', 'recency']
});

Router Strategy:

  • Keyword-heavy queries → FTS5 BM25 scoring

  • Natural language queries → Vector similarity (hybrid RRF fusion)

  • Complex multi-term → Weighted combination of both

4. Query Ranking Optimizer

Multi-factor scoring for perfect result ordering:

const rankedResults = await hybridSearch(query, {
  ranking: {
    weights: {
      textRelevance: 0.4,   // BM25/TF-IDF score
      timeDecay: 0.25,      // Recent memories prioritized
      accessPattern: 0.2,   // Frequently accessed boosted
      categoryWeight: 0.15  // Project-specific priority
    }
  }
});

5. Vector Search Foundation

Hash-based embeddings ready for ONNX upgrade:

import { vectorSearch } from '@chaerulcp/agent-memory-mcp';

// Current: Mock hash-based cosine similarity (fast, no ML deps)
// Future: Real ONNX sentence-transformers model
const similar = await vectorSearch.similar('login flow error', {
  topK: 5,
  minScore: 0.7
});

Architecture:

interface EmbeddingVector {
  dimensions: number;        // Currently 384 (ready for real models)
  distanceMetric: 'cosine' | 'euclidean';
  encoding: 'hash-based' | 'real-embedding';
}

// Seamless migration path to real embeddings
// Just swap encoding mode - API stays identical

📊 Performance Benchmarks

All tests performed on MacBook Pro M2, Node.js 22:

Scenario: 10,000 memories indexed
┌──────────────────────┬─────────┬─────────┬────────────┐
│ Operation            │ v1.3    │ v1.4    │ Improvement│
├──────────────────────┼─────────┼─────────┼────────────┤
│ Add single memory    │ 120 ms  │ 3 ms    │ 40× ⚡     │
│ Delete memory        │ 95 ms   │ 2 ms    │ 47× ⚡     │
│ Update memory        │ 110 ms  │ 4 ms    │ 27× ⚡     │
│ Simple keyword search│ 450 ms  │ 90 ms   │ 80% ↓      │
│ Complex hybrid search│ 890 ms  │ 112 ms  │ 87% ↓      │
│ CRUD batch (100x)    │ 12 s    │ 280 ms  │ 43× ⚡     │
└──────────────────────┴─────────┴─────────┴────────────┘

I/O Reduction: 60-80% decrease through tiered caching
Scalability: Tested up to 100K+ memories with consistent performance

🔧 Configuration

Environment Variables

# Required - Notion Integration
NOTION_TOKEN=your_notion_token_here
NOTION_DATABASE_ID=your-database-id-here

# Optional - Obsidian Mirror (Git-backed markdown backup)
OBSIDIAN_VAULT_PATH=C:/Users/your-user/Documents/ObsidianVault

# Optional - Cache Settings (SQLite in-memory by default)
CACHE_TTL_MS=300000        # 5 minutes (default)
MAX_CACHE_SIZE_MB=50       # Memory limit

# Optional - Performance Tuning
CONCURRENT_THREADS=4       # Parallel indexing threads
WRITES_PER_BATCH=100       # Batch size for bulk inserts

⚠️ Security: Never commit .env to Git — already excluded by .gitignore.

MCP Client Configuration

Quick-start configurations for popular clients:

Claude Code: examples/mcp-configs/claude-code.json

GitHub Copilot: examples/mcp-configs/copilot-cli.json

OpenCode: examples/mcp-configs/opencode.json

Simply copy, replace placeholders (${NOTION_TOKEN}), and restart your client.


🏗 Architecture Overview

High-Level Design

graph TB
    User[Developer / Coding Agent] -->|MCP stdio| Client[MCP Client]
    Client --> Server[(Memory MCP Server)]
    
    subgraph "Server Layer"
        Router[Hybrid Search Router]
        Pool[Tiered Memory Pool]
        Index[Incremental Index + WAL]
        Vector[Vector Search Engine]
    end
    
    Server --> Router
    Router --> Pool
    Router --> Vector
    
    subgraph "Storage Layer"
        Hot[Hot Tier: LRU Cache]
        Warm[Warm Tier: Indexed SQLite]
        Cold[Cold Tier: Compressed Archive]
    end
    
    Pool --> Hot
    Pool --> Warm
    Pool --> Cold
    
    subgraph "Sync Layer"
        Notion[Notion Database ← Source of Truth]
        Obsidian[Obsidian Vault ← Optional Mirror]
    end
    
    Warm --> Notion
    Warm --> Obsidian

Component Responsibilities

Component

Responsibility

Tech Stack

Memory Pool

Tiered caching, LRU eviction, access tracking

In-memory Map + TTL

Incremental Index

Write-Ahead Logging, FTS5 optimization

SQLite + WAL mode

Hybrid Router

Query analysis, routing decision, RRF fusion

Custom algorithm

Ranking Optimizer

Multi-factor scoring, weight adjustments

Configurable pipeline

Vector Engine

Semantic similarity, embedding management

Hash-based (ONNX-ready)

Sync Service

Bi-directional sync with Notion/Obsidian

REST + Git protocols


🛠 Installation

Prerequisites

  • Node.js 22 or newer (Download)

  • Notion account (free tier sufficient)

  • Basic terminal/command line familiarity

Step-by-Step Setup

# 1. Install dependencies
git clone https://github.com/Chaerulcp/shared-agent-memory-mcp.git
cd shared-agent-memory-mcp
npm install

# 2. Build TypeScript
npm run build

# 3. Configure environment
Copy-Item .env.example .env
# Edit .env with your credentials (see above)

# 4. Verify installation
node dist/cli.js doctor
# Expected output: "Overall: HEALTHY ✅"

Get Notion Integration Token

  1. Go to My Integrations

  2. Click "+ New integration"

  3. Name it "Agent Memory System"

  4. Copy the Internal Integration Token (starts with secret_)

Create Memory Database

Option A: Use existing database

  • Find any page/database in Notion

  • Note its URL to extract database ID

Option B: Create new database (recommended)

Page → Add block → Database → Table
Name it "Agent Memories" or similar

Share database with your integration:

  1. Open database in Notion

  2. Click "Share" button (top right)

  3. Add your integration

  4. Grant "Can edit" permission

  5. Copy database ID from URL

Verify setup:

node dist/cli.js doctor --sync

Should show Overall: HEALTHY with your database connected.


🎯 Usage Examples

Add a Memory

node dist/cli.js add \\
  --title "Project Architecture Decision" \\
  --content "Using React 19 with TypeScript, implementing composite design pattern." \\
  --agent developer \\
  --category convention \\
  --importance high \\
  --project backend-service

Programmatic Usage:

import { memoryPool } from '@chaerulcp/agent-memory-mcp';

await memoryPool.add({
  title: 'Authentication Flow Pattern',
  content: 'Implement OAuth2 with refresh tokens and rotation.',
  tags: ['security', 'authentication'],
  metadata: { 
    projectId: 'auth-service',
    importance: 'high',
    createdBy: 'developer-bot'
  }
});

Search Memories

# Keyword search
node dist/cli.js search "React hooks useEffect"

# Natural language query (uses vector + hybrid)
node dist/cli.js search "best practices for error handling in production"

# Filtered search
node dist/cli.js search "database schema" --category architecture

Update/Delete Memories

# Update an existing memory
node dist/cli.js update --id memory-123 --title "Updated Title"

# Soft delete (moves to cold tier, retains history)
node dist/cli.js delete --id memory-123

# Permanent deletion (requires confirmation)
node dist/cli.js delete memory-123 --hard

Health Monitoring

# Full diagnostic with sync status
node dist/cli.js doctor --sync

# Rebuild the local search cache when needed
node dist/cli.js cache rebuild

# Inspect available commands and options
node dist/cli.js --help

🔌 Client Integration Guides

For detailed setup instructions for each supported client platform:

Client

Platform

Status

Guide

Claude Code

VS Code Extension

✅ Ready

Full Setup →

GitHub Copilot CLI

GitHub CLI

✅ Ready

Full Setup →

OpenCode

MCP Client

✅ Ready

Full Setup →

Cline

Autonomous Agent

🚧 In Progress

Coming Soon

👉 Quick reference: See Client Integration Overview for comparison table and troubleshooting.

Example Configurations

Ready-to-use configuration files available in examples/mcp-configs/:

  • claude-code.json - Claude Code + VS Code setup

  • copilot-cli.json - GitHub Copilot CLI configuration

  • opencode.json - OpenCode MCP client config

Simply copy, replace placeholder tokens (${NOTION_TOKEN}), and restart your client!


📖 Documentation Structure

Document

Purpose

Audience

README.md

Complete overview, features, setup

All users

GETTING_STARTED.md

5-minute quick start guide

New users

CHANGELOG.md

Version history & breaking changes

Upgraders

RELEASE-NOTES-v1.4.0.md

Deep-dive technical details

Developers

examples/

Ready-to-use MCP configs

Integration testing


🧪 Testing & Quality

Test Coverage

Total Tests: 46
Pass Rate: 100% ✅
Security Audit: 0 vulnerabilities ✅
Production Validation: HEALTHY ✅

Run tests yourself:

npm test
# The repository test script runs the complete suite.
# To run a focused test file directly:
node --test test/hybrid-search-integration.test.mjs

CI/CD Pipeline

# .github/workflows/ci.yml
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npm ci
      - run: npm test
      - run: npm audit --omit=dev

🔄 Migration Guide

From Previous Versions

Breaking Changes: None — fully backward compatible.

Upgrade Instructions:

# Upgrade a cloned checkout
# Review the target tag or commit before updating
git pull --ff-only
npm ci
npm run build

# Post-upgrade verification
node dist/cli.js doctor --sync
npm test

# Note: This repository is currently documented and installed
# from source; no public npm package installation is assumed.

Configuration Updates:

No config changes required — all features auto-enable on upgrade.

Migration Checklist:

  • Backup current installation (optional but recommended)

  • Upgrade package version

  • Run health check with --sync flag

  • Test basic CRUD operations

  • Verify search latency meets expectations

  • Monitor cache hit rates over first week


🤝 Contributing

We welcome contributions! Please follow these guidelines:

  1. Read CONTRIBUTING.md before starting work

  2. Create feature branches from develop branch

  3. Write tests for new functionality (maintain 100% coverage)

  4. Update documentation alongside code changes

  5. Follow commit conventions: feat:, fix:, docs:, etc.

Development Setup

git clone https://github.com/Chaerulcp/shared-agent-memory-mcp.git
cd shared-agent-memory-mcp

# Install dev dependencies
npm install --include=dev

# Run the complete test suite
npm test

# Rebuild after source changes
npm run build

🙏 Acknowledgments

Built with incredible open-source projects:

  • Notion API — Excellent platform for structured data

  • SQLite — Lightweight, reliable database engine

  • TypeScript — Type safety throughout the codebase

  • Node.js — Fast, modern runtime

  • MCP Protocol — Standardized agent communication

Thanks to early adopters providing valuable feedback and the amazing MCP community!


📄 License

This project is licensed under the MIT License — free to use, modify, and distribute for personal and commercial purposes.


📮 Support & Discussion


Ready to dive deeper? Check out the GETTING_STARTED.md for hands-on setup, or explore the examples/ folder for ready-to-use configurations.

Copyright © 2026-present - All rights reserved globally.

Available Tools

6 tools
memory_addA

Save a new durable memory into the shared Notion memory. USE THIS when: the user states a preference, a project decision is made, a convention is established, a non-obvious bug is fixed (root cause + fix), or important project/environment context is learned. Do NOT store secrets, tokens, or throwaway information.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoLowercase tags, e.g. ['typescript','ui','deploy']
agentYesWhich agent is saving this; use 'shared' for universal rules
titleYesShort, searchable, imperative title (<= 80 chars recommended)
contentYesFull memory content: concise but complete, with examples when helpful
categoryNoother
importanceNomedium

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It communicates that the memory is 'durable' and stored in 'shared Notion memory,' which conveys persistence and storage location. It also adds content policy guidance ('Do NOT store secrets, tokens, or throwaway information') and even specifies bugfix records should include root cause + fix. It does not describe the write response or failure behavior, but the core mutation behavior is disclosed.

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

Conciseness5/5

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

Two sentences carry all necessary information: the first states the action and target, the second lists concrete triggers and exclusions. Everything included is purposeful and front-loaded, with no filler or redundancy.

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

Completeness4/5

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

For a create-only tool with six parameters and no annotations or output schema, the description gives strong when-to-use context, content policy, and storage destination. It does not explicitly direct agents to memory_update for editing existing memories or describe the call's return behavior, but the core information needed to invoke this tool correctly is present.

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

Parameters3/5

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

Schema description coverage is 67%, so the description is partly responsible for parameter meaning. It adds useful content-level semantics, such as storing root cause + fix for bugfixes and avoiding secrets, which informs the content parameter. However, it does not clarify the category or importance enums, and those parameters have no schema descriptions. This is partial compensation, not complete.

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

Purpose5/5

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

The description begins with a specific verb and resource: 'Save a new durable memory into the shared Notion memory.' The word 'new' clearly marks this as a create operation, distinguishing it from siblings like memory_update and memory_delete, and 'durable' and 'shared' add scope. This is unambiguous and well differentiated.

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

Usage Guidelines5/5

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

The description explicitly lists when to use the tool: user preferences, project decisions, conventions, non-obvious bug fixes, and learned context. It also provides a clear exclusion: do not store secrets, tokens, or throwaway information. This gives an agent decisive routing criteria without needing to infer.

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

memory_deleteA

Archive a memory (default) or move it to Notion trash (hard=true). Use when a memory is wrong or obsolete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNotion page id of the memory
hardNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It explains the behavior of the hard parameter (archive vs. trash) and the default action, which is useful. However, it does not disclose potential side effects like reversibility or permission requirements, leaving some behavioral details unstated. This is adequate but not exhaustive.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The primary action and default behavior are front-loaded, followed by a concise usage guideline. Every word earns its place, making it efficient and easy to parse.

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

Completeness4/5

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

For a simple deletion tool with no output schema, the description covers the essential behavior and the when-to-use scenario. It clarifies the two operational modes and the parameter semantics. Minor gaps like explicit side effects or prerequisites are not critical given the tool's simplicity, so it feels largely complete.

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

Parameters4/5

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

Schema coverage is 50%: the id parameter is described in the schema, but the hard parameter is not. The description adds meaningful semantic detail for hard by explaining that hard=true moves to Notion trash, and it clarifies the default archive behavior. This compensates for the missing schema description and goes beyond a bare boolean.

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

Purpose5/5

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

The description clearly states the action: archive a memory by default, or move it to Notion trash with hard=true. It identifies the resource (memory) and the two operational modes, making the tool's purpose unambiguous and distinct from siblings like memory_update or memory_add.

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

Usage Guidelines4/5

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

The description provides explicit when-to-use guidance: 'Use when a memory is wrong or obsolete.' This gives a clear context for selecting this tool, though it does not mention when not to use it or alternative tools. It stops short of naming siblings or exclusion scenarios, so a 4 is appropriate.

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

memory_getA

Fetch a single memory by its id (full content).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNotion page id of the memory

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It communicates that the operation is a read ('Fetch') and that the returned content is complete rather than truncated ('full content'). However, it does not describe what happens for a missing or invalid id, permission requirements, or any response format details.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. The core action, target, selector, and output qualifier are all front-loaded, making it easy for an agent to quickly grasp the tool's purpose.

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

Completeness4/5

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

For a one-parameter get-by-id operation, the description is nearly complete: it states the input, the action, and the nature of the output ('full content'). The only meaningful omission is behavior for missing or invalid ids, but given the low complexity and fully covered schema, the description is adequately contextual.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents the id as 'Notion page id of the memory.' The description merely refers to 'its id' and adds no new semantic detail beyond what the input schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Fetch'), a specific resource ('a single memory'), and a precise selection mechanism ('by its id'), plus the notable qualifier 'full content.' This clearly differentiates memory_get from siblings like memory_search, memory_recent, and the mutation tools without requiring an agent to open their schemas.

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

Usage Guidelines3/5

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

The phrase 'by its id' implies the tool should be used when an agent already knows the memory's id, but it does not explicitly contrast this with memory_search, memory_recent, or the mutation tools. Usage context is implied rather than stated, so no clear when-not or alternative guidance is provided.

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

memory_recentA

List the most recently updated memories from the shared Notion memory. Use to get context about what was learned/saved lately.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo
limitNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations present, the description carries the behavioral disclosure burden. It does convey that results are limited to recently updated memories and that the tool is a non-mutating list operation, but it does not mention ordering details, limits, or that no writes occur. The verb 'List' implies read-only behavior, but more explicit transparency would be stronger.

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

Conciseness5/5

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

The description is two focused sentences with no filler. The core function is front-loaded, and the usage context appears in the second sentence, making it quick for an agent to parse and act on.

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

Completeness3/5

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

The tool has only two optional parameters and no output schema, so the description is reasonably complete for a simple list operation. However, because there are no annotations, the description could more fully address what 'agent' means in this context and how the limit affects results. It provides adequate but not thorough guidance.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate for the undocumented parameters. Neither 'agent' nor 'limit' is mentioned, and the description adds no meaning beyond the raw parameter names, defaults, and enum values already present in the schema. The tool is simple enough that the schema partially covers meaning, but the description misses the opportunity to explain filtering or limiting behavior.

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

Purpose5/5

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

The description opens with the specific verb 'List' and the resource 'most recently updated memories from the shared Notion memory,' clearly identifying the tool's function. The phrase 'what was learned/saved lately' reinforces the recency dimension, which differentiates it from siblings like memory_get, memory_search, and memory_add.

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

Usage Guidelines4/5

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

The second sentence, 'Use to get context about what was learned/saved lately,' provides a clear intended use case. It does not name alternatives or explicitly say when not to use this tool, but the stated use case is enough to guide an agent toward this tool for recency-oriented context.

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

memory_updateB

Update an existing memory by id. Prefer updating over creating duplicates when knowledge changes or gets corrected.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNotion page id of the memory
tagsNo
agentNo
titleNo
statusNo
contentNo
categoryNo
importanceNo

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description alone must convey behavior. While it indicates a mutation ('update'), it does not explain whether updates are partial (PATCH-style) or full replacements, what happens if the id does not exist, or whether unspecified fields are preserved or cleared. These are consequential unknowns for an agent making memory edits.

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

Conciseness5/5

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

The description is only two sentences long and each one contributes: the first states the operation and target, the second gives the usage preference. It is efficiently front-loaded with the core action. No redundant or filler content.

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

Completeness1/5

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

With eight parameters, no output schema, no annotations, and low schema coverage, the description is materially incomplete. It omits return values, error behavior for missing ids, update semantics (merge vs replace), and any field-specific nuances. An agent could unintentionally overwrite existing memory content because the tool's behavior on omitted fields is unspecified.

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

Parameters1/5

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

Schema description coverage is only 13%, with just 'id' documented; the other seven parameters (tags, agent, title, status, content, category, importance) have no descriptions. The tool description adds no parameter detail whatsoever, so the agent must infer semantics from names and enums alone. This is especially risky for fields like status and category where replacement semantics matter.

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

Purpose5/5

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

The description opens with a specific verb-resource pairing, 'Update an existing memory by id,' which clearly distinguishes it from siblings like memory_add and memory_delete. It identifies the resource (memory) and the operation (update) unambiguously.

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

Usage Guidelines5/5

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

The second sentence, 'Prefer updating over creating duplicates when knowledge changes or gets corrected,' provides an explicit routing rule. It tells the agent when to choose this tool over memory_add, giving both a condition and an alternative. This is strong guidance above the bare minimum.

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

TDQS

A4.1/5.0
Disambiguation5/5

Each tool maps to a distinct operation on shared memories: add, get, update, delete, search, and recent listing. There is no meaningful overlap between search and get, since search returns matches while get fetches a specific memory by id.

Naming Consistency5/5

All tools follow the consistent memory_verb pattern, with clear and predictable verb choices: add, get, update, delete, search, recent. This makes the tool set easy to navigate and remember.

Tool Count5/5

Six tools is well-scoped for a shared memory server: basic CRUD is covered plus search and recent listing. There is no bloat or missing essential operation for the stated purpose.

Completeness5/5

The domain of shared long-term memory is fully covered: adding, retrieving, updating, deleting, searching, and reviewing recent memories. No obvious gaps exist for agents needing to persist, recall, or correct knowledge.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read and write to a personal knowledge vault of markdown notes, projects, and tasks, with tooling for search, capture, daily logs, and project management across different AI tools.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to store and retrieve project context, bugs, decisions, and session logs by reading and appending markdown files in a local Obsidian vault, without requiring any cloud services.
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI coding assistants persistent engineering memory stored as Markdown files in an Obsidian vault, enabling project context retrieval, session capture, decision recording, and memory search without requiring Obsidian to be running.
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Chaerulcp/shared-agent-memory-mcp'

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