Skip to main content
Glama
AojdevStudio

Simple Memory MCP Server

by AojdevStudio

Simple Memory MCP Server

A lightweight Model Context Protocol (MCP) server that provides persistent knowledge graph storage for AI assistants. Enables AI agents to maintain memory across sessions through entity-relationship storage with JSON file persistence.

๐Ÿš€ Features

  • Persistent Memory: Knowledge graph storage with automatic persistence to JSON files

  • Entity Management: Create, read, update, and delete entities with typed observations

  • Relationship Tracking: Manage relationships between entities with type annotations

  • Search Capabilities: Full-text search across entity names, types, and observations

  • MCP Compliant: Full Model Context Protocol v2025-06-18 compatibility

  • Simple Architecture: Lightweight, single-file implementation with minimal dependencies

Related MCP server: Hippocampus

๐Ÿ“‹ Table of Contents

๐Ÿ›  Installation

# Bash installer with interactive configuration
curl -fsSL https://raw.githubusercontent.com/your-username/simple-memory-mcp/main/install.sh | bash

What it does:

  • ๐Ÿ” Auto-detects your Obsidian vaults

  • ๐Ÿ“ Configures custom memory storage location

  • โš™๏ธ Sets up Claude Desktop/Cursor automatically

  • ๐Ÿ—‚๏ธ Optional Obsidian auto-export configuration

Interactive Setup Flow:

๐Ÿ“ Memory Storage Configuration
Where should memory be stored? [~/.cursor/memory.json]: 

๐Ÿ—‚๏ธ Obsidian Integration  
Do you use Obsidian? (y/n) [n]: y

๐Ÿ“š Found Obsidian vaults:
  1. My Knowledge Base (/Users/you/Documents/MyVault)
  2. Work Notes (/Users/you/Desktop/WorkVault)
Choose vault (1-2) or enter custom path [1]: 1

Enable auto-export after entity creation? (y/n) [n]: y
Export format (markdown/dataview/canvas/all) [markdown]: all

Manual Installation

Prerequisites

  • Node.js v18.x or higher

  • npm or pnpm package manager

Install Dependencies

npm install

Environment Setup

The server automatically saves memory to:

  • ~/.cursor/memory.json (default)

  • Custom path via MEMORY_PATH environment variable

# Optional: Set custom memory file location
export MEMORY_PATH="/path/to/your/memory/directory"

๐Ÿš€ Quick Start

1. Start the Server

npm start
# or
node index.js

2. Test with MCP Inspector

# Install and run MCP Inspector
npx @modelcontextprotocol/inspector

# Configure server in Inspector:
# Command: node
# Args: /path/to/your/simple-memory-mcp/index.js

3. Basic Usage Example

// Create entities
await client.callTool({
  name: "create_entities",
  arguments: {
    entities: [{
      name: "john-doe",
      entityType: "person",
      observations: ["Software engineer", "Works remotely", "Enjoys hiking"]
    }]
  }
});

// Create relationships
await client.callTool({
  name: "create_relations",
  arguments: {
    relations: [{
      from: "john-doe",
      to: "acme-corp",
      relationType: "works_for"
    }]
  }
});

// Search entities
await client.callTool({
  name: "search_nodes",
  arguments: {
    query: "engineer"
  }
});

๐Ÿ“š API Reference

Tools Overview

Tool

Description

Input

Output

create_entities

Create multiple entities

{entities: Entity[]}

Created entities

create_relations

Create relationships

{relations: Relation[]}

Created relations

add_observations

Add observations to entities

{observations: Observation[]}

Updated observations

delete_entities

Delete entities and relations

{entityNames: string[]}

Deleted entities

delete_observations

Remove specific observations

{deletions: Deletion[]}

Deleted observations

delete_relations

Remove relationships

{relations: Relation[]}

Deleted relations

read_graph

Get complete knowledge graph

{}

Full graph data

search_nodes

Search entities by query

{query: string}

Matching entities

open_nodes

Get specific entities

{names: string[]}

Requested entities

export_to_obsidian

Export graph to Obsidian vault

{vaultPath: string, format?: string}

Export result

Data Types

Entity

interface Entity {
  name: string;           // Unique identifier
  entityType: string;     // Type classification
  observations: string[]; // Array of observation texts
}

Relation

interface Relation {
  from: string;          // Source entity name
  to: string;            // Target entity name
  relationType: string;  // Relationship type
}

Observation

interface Observation {
  entityName: string;    // Target entity name
  contents: string[];    // New observations to add
}

Deletion

interface Deletion {
  entityName: string;      // Target entity name
  observations: string[];  // Observations to remove
}

Detailed Tool Documentation

create_entities

Creates multiple new entities in the knowledge graph.

Input Schema:

{
  "entities": [
    {
      "name": "entity-name",
      "entityType": "person|organization|concept|etc",
      "observations": ["observation1", "observation2"]
    }
  ]
}

Example:

{
  "entities": [
    {
      "name": "alice-johnson",
      "entityType": "person",
      "observations": ["Data scientist", "PhD in Computer Science", "Lives in San Francisco"]
    },
    {
      "name": "tech-startup-xyz",
      "entityType": "organization", 
      "observations": ["AI/ML company", "Founded in 2023", "Series A funding"]
    }
  ]
}

Response:

[
  {
    "name": "alice-johnson",
    "entityType": "person",
    "observations": ["Data scientist", "PhD in Computer Science", "Lives in San Francisco"]
  }
]

create_relations

Creates relationships between existing entities.

Input Schema:

{
  "relations": [
    {
      "from": "source-entity",
      "to": "target-entity", 
      "relationType": "relationship-type"
    }
  ]
}

Example:

{
  "relations": [
    {
      "from": "alice-johnson",
      "to": "tech-startup-xyz",
      "relationType": "works_for"
    }
  ]
}

search_nodes

Search entities using full-text search across names, types, and observations.

Input Schema:

{
  "query": "search-term"
}

Example:

{
  "query": "data scientist"
}

Response: Array of matching entities with complete data.

read_graph

Returns the complete knowledge graph with all entities and relations.

Input Schema:

{}

Response:

{
  "entities": [
    {
      "name": "alice-johnson",
      "entityType": "person",
      "observations": ["Data scientist", "PhD in Computer Science"]
    }
  ],
  "relations": [
    {
      "from": "alice-johnson",
      "to": "tech-startup-xyz", 
      "relationType": "works_for"
    }
  ]
}

export_to_obsidian

Export the knowledge graph to an Obsidian vault in various formats.

Input Schema:

{
  "vaultPath": "/path/to/obsidian/vault",
  "format": "markdown",
  "autoIndex": true
}

Parameters:

  • vaultPath (required): Path to the Obsidian vault directory

  • format (optional): Export format - "markdown", "dataview", "canvas", or "all" (default: "markdown")

  • autoIndex (optional): Whether to create index files (default: true)

Example:

{
  "vaultPath": "/Users/username/Documents/MyVault",
  "format": "all",
  "autoIndex": true
}

Response:

{
  "success": true,
  "vaultPath": "/Users/username/Documents/MyVault",
  "format": "all",
  "entityCount": 42,
  "relationCount": 18,
  "timestamp": "2024-01-15T10:30:00.000Z"
}

โš™๏ธ Configuration

Environment Variables

Variable

Default

Description

MEMORY_PATH

~/.cursor/memory.json

Custom memory file location

NODE_ENV

development

Runtime environment

OBSIDIAN_AUTO_EXPORT

false

Enable automatic Obsidian export after entity creation

OBSIDIAN_VAULT_PATH

-

Path to Obsidian vault for auto-export

OBSIDIAN_EXPORT_FORMAT

markdown

Export format for auto-export

Memory File Structure

The server persists data in JSON format:

{
  "entities": [
    {
      "name": "entity-name",
      "entityType": "type",
      "observations": ["obs1", "obs2"]
    }
  ],
  "relations": [
    {
      "from": "entity1",
      "to": "entity2",
      "relationType": "relationship"
    }
  ]
}

MCP Client Configuration

For Claude Desktop, add to your MCP settings:

{
  "mcpServers": {
    "simple-memory": {
      "command": "node",
      "args": ["/path/to/simple-memory-mcp/index.js"],
      "env": {
        "MEMORY_PATH": "/custom/path/to/memory/directory"
      }
    }
  }
}

๐Ÿงช Testing

Running Tests

# Run comprehensive server test
node test-server.js

Expected Test Output

๐Ÿงช Testing Simple Memory MCP Server...
โœ… Connected successfully!
โœ… Found 9 tools: create_entities, create_relations, ...
โœ… All tests passed! Server is working correctly.

Manual Testing with Inspector

  1. Start MCP Inspector: npx @modelcontextprotocol/inspector

  2. Configure server connection

  3. Test each tool with sample data

  4. Verify persistence by restarting server

Integration Testing

Test with actual MCP clients:

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const transport = new StdioClientTransport({
  command: "node",
  args: ["index.js"]
});

const client = new Client({
  name: "test-client",
  version: "1.0.0"
}, {
  capabilities: {}
});

await client.connect(transport);

๐Ÿ”ง Troubleshooting

Common Issues

Server Won't Start

Error: Cannot read properties of undefined (reading 'method')

Solution: Ensure you're using the correct MCP SDK version and schema imports:

import {
  ListToolsRequestSchema,
  CallToolRequestSchema,
  ListPromptsRequestSchema,
  ListResourcesRequestSchema
} from '@modelcontextprotocol/sdk/types.js';

Missing Capabilities Error

Error: Server does not support prompts (required for prompts/list)

Solution: Declare all capabilities in server configuration:

const server = new Server(
  { name: 'simple-memory-mcp', version: '1.1.0' },
  {
    capabilities: {
      tools: {},
      prompts: {},
      resources: {}
    }
  }
);

Memory File Permissions

Error: EACCES: permission denied

Solution: Ensure write permissions to memory directory:

mkdir -p ~/.cursor
chmod 755 ~/.cursor

Tool Not Found

Error: Unknown tool: create_entities

Solution: Verify tool registration matches the schema names exactly.

Debug Mode

Enable detailed logging:

console.error("Debug info:", JSON.stringify(data, null, 2));

Performance Issues

For large knowledge graphs (>10,000 entities):

  1. Consider implementing pagination for read_graph

  2. Add indexing for search operations

  3. Implement lazy loading for entity details

๐Ÿ›  Development

Project Structure

simple-memory-mcp/
โ”œโ”€โ”€ index.js              # Main server implementation
โ”œโ”€โ”€ package.json          # Dependencies and scripts
โ”œโ”€โ”€ test-server.js        # Comprehensive test suite
โ”œโ”€โ”€ inspector-config.json # MCP Inspector configuration
โ”œโ”€โ”€ CLAUDE.md             # AI development protocols
โ””โ”€โ”€ README.md             # This documentation

Architecture

graph TD
    A[MCP Client] --> B[StdioServerTransport]
    B --> C[Simple Memory Server]
    C --> D[Entity Manager]
    C --> E[Relation Manager]
    C --> F[Search Engine]
    D --> G[JSON File Storage]
    E --> G
    F --> G

Core Classes

SimpleMemoryServer

Main server class handling:

  • Memory persistence (loadMemory(), saveMemory())

  • Entity operations (CRUD)

  • Relationship management

  • Search functionality

Key Methods:

  • createEntities(entities) - Batch entity creation

  • createRelations(relations) - Relationship creation

  • searchNodes(query) - Full-text search

  • readGraph() - Complete graph export

Extending the Server

Adding New Tools

  1. Define tool schema in tools/list handler

  2. Implement logic in tools/call handler

  3. Add method to SimpleMemoryServer class

  4. Update documentation

Custom Storage Backends

Replace JSON file storage:

class DatabaseMemoryServer extends SimpleMemoryServer {
  async saveMemory() {
    // Custom database implementation
  }
  
  async loadMemory() {
    // Custom database loading
  }
}

Contributing

  1. Fork the repository

  2. Create feature branch: git checkout -b feature-name

  3. Run tests: node test-server.js

  4. Commit changes: git commit -m "Description"

  5. Push branch: git push origin feature-name

  6. Create Pull Request

๐Ÿ“„ License

MIT License - see LICENSE file for details.

๐Ÿ“š Additional Documentation

๐Ÿค Support


Built with โค๏ธ using the Model Context Protocol

Available Tools

10 tools
add_observationsB

Add new observations to existing entities in the knowledge graph

ParametersJSON Schema
NameRequiredDescriptionDefault
observationsYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits on its own. It only states that it adds observations, without detailing whether observations are appended or replaced, what happens if the entity does not exist (e.g., error or auto-creation), or any other side effects. The tool is clearly a write operation, but critical safety and behavior information is missing.

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, concise sentence that immediately conveys the tool's core function. There is no fluff or redundant phrasing, and the primary verb and object are front-loaded. It earns a high score for efficiency.

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

Completeness2/5

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

Given that there are no annotations and no output schema, the description must provide comprehensive context on its own. However, it only gives a high-level statement and lacks necessary details about input requirements, validation, error handling, or effect on existing data. This leaves significant gaps in the agent's understanding of the tool's full behavior.

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?

The schema has zero coverage for the top-level parameter, and the description does not compensate by explaining the parameter structure. Although the nested schema properties describe entityName and contents, the description adds no semantic value beyond the schema, and the agent must rely solely on the schema to understand that observations is an array of objects with those fields. This is insufficient given the low schema coverage.

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

Purpose5/5

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

The description uses a specific verb 'Add' and identifies the resource 'observations' and the target 'existing entities' within the knowledge graph. This clearly distinguishes it from sibling tools like create_entities (which creates entities) and delete_observations (which removes observations), making the tool's purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies that this tool is used when adding observations to existing entities, but it does not explicitly state when to use it over alternatives or provide any comparison with sibling tools. There is no mention of constraints such as 'only for existing entities' or guidance about creating entities first. Thus, the usage context is implied rather than explicitly outlined.

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

create_entitiesB

Create multiple new entities in the knowledge graph

ParametersJSON Schema
NameRequiredDescriptionDefault
entitiesYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it creates entities, but does not mention potential duplicate handling, overwrite behavior, validation rules, or whether the operation is atomicโ€”information an agent would need for a mutating tool.

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, front-loaded sentence that communicates the core purpose with no filler. It is appropriately concise for a simple tool.

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

Completeness2/5

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

Given the absence of annotations, an output schema, and limited schema coverage, the description should offer more context about usage, side effects, or return behavior. It does not, leaving significant gaps for an agent to make assumptions about how the tool behaves.

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?

The schema's top-level 'entities' parameter has no description (coverage 0%), and the tool description does not explain what constitutes an entity (name, type, observations). The description adds no value beyond the bare phrase 'multiple new entities,' failing to compensate for the schema gap.

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

Purpose5/5

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

The description uses a specific verb ('Create') and a specific resource ('multiple new entities in the knowledge graph'), clearly distinguishing this from sibling tools like create_relations and add_observations. It is explicit and unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention create_relations, add_observations, or any exclusions, leaving the agent to infer selection based solely on the name.

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

create_relationsB

Create multiple new relations between entities in the knowledge graph. Relations should be in active voice

ParametersJSON Schema
NameRequiredDescriptionDefault
relationsYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states 'create' and offers an active-voice guideline, but does not mention idempotency, validation of from/to entities, behavior on duplicates, or error handling.

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 a brief second clause. Every word earns its place and the main purpose is front-loaded.

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

Completeness2/5

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

For a mutation tool with no annotations or output schema, the description is too sparse. It omits critical details such as whether from/to entities must already exist, how duplicates are handled, and whether creation is atomic for the batch.

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% at the top level, so the description needed to compensate. It adds the active-voice guideline but does not explain the structure of the relations array or the meaning of from/to/relationType, which the schema already partially covers.

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 (create), the object (multiple new relations), and the context (knowledge graph). It distinguishes from siblings like delete_relations and create_entities.

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

Usage Guidelines3/5

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

The description implies this tool is for creating relations, but it does not explicitly state when to use it versus alternatives or mention any prerequisites. The active-voice guideline is a style note, not usage guidance.

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

delete_entitiesA

Delete multiple entities and their associated relations from the knowledge graph

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNamesYesAn array of entity names to delete

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose that associated relations are deleted as part of the operation, which is a useful behavioral detail. However, it does not mention irreversibility, permissions, or whether observations are affected, leaving gaps in transparency.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the action and scope with no unnecessary words. Every word contributes to understanding the tool's purpose.

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

Completeness3/5

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

For a simple one-parameter destructive tool with no output schema, the description conveys the core purpose but omits behavioral details such as error handling, atomicity, and return values. Given the lack of annotations, it is moderately complete but has room for improvement.

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?

The input schema has 100% coverage of the parameter 'entityNames' with a description, so the baseline is 3. The tool description does not add any additional parameter semantics beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the tool deletes multiple entities and their associated relations, using a specific verb ('Delete') and resource ('entities' and 'relations'). It distinguishes itself from sibling tools like delete_relations, which only handle relations, and delete_observations, which handles observations.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as delete_relations or delete_observations. It does not state any exclusions, prerequisites, or scenarios where another tool would be more appropriate.

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

delete_observationsB

Delete specific observations from entities in the knowledge graph

ParametersJSON Schema
NameRequiredDescriptionDefault
deletionsYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states the action without mentioning permanence, side effects, required permissions, or return format. As a mutation tool, this is insufficient.

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

Conciseness5/5

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

The description is a single sentence that directly conveys the core action, with no unnecessary words. It is well-structured and front-loaded.

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

Completeness2/5

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

The tool has a non-trivial parameter schema and no output schema or annotations. The description is too minimal to fully inform usage, lacking details on how to specify deletions and what to expect in response.

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?

The description does not explain the 'deletions' parameter structure. Schema coverage is 0% for the top-level parameter, and the description adds no semantic meaning beyond the schema's nested field descriptions.

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

Purpose5/5

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

The description clearly states the function: deleting specific observations from entities in a knowledge graph. It distinguishes itself from sibling tools like delete_entities and add_observations by specifying the granularity ('specific observations').

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as delete_entities or when not to use it. The description lacks any context or conditions for usage.

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

delete_relationsA

Delete multiple relations from the knowledge graph

ParametersJSON Schema
NameRequiredDescriptionDefault
relationsYesAn array of relations to delete

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must convey behavioral traits, but it only says 'Delete' without mentioning consequences such as irreversibility, partial failure handling, or permissions. For a mutating operation, this is a significant gap.

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

Conciseness5/5

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

The description is a single sentence that is direct and front-loaded. Every word earns its place, and there is no redundant information.

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 is simple with one well-specified parameter and no output schema, so the core purpose is covered. However, behavioral details like error handling, atomicity, or effects on related entities are absent, which leaves some ambiguity for an agent.

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?

The input schema fully describes the 'relations' parameter and its nested properties (from, to, relationType), so the description adds little beyond what is already structured. The phrase 'multiple' aligns with the array type but does not provide extra meaning.

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 a specific action ('Delete') on a specific resource ('relations'), and the plural 'multiple relations' distinguishes this from sibling tools like delete_entities and delete_observations. It is concise and unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for deleting one or more relations, but it does not explicitly state when to prefer this over alternatives, nor does it mention any exclusions or prerequisites. It provides only minimal contextual guidance.

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

export_to_obsidianB

Export the knowledge graph to Obsidian vault in various formats

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoThe export format - markdown (individual files), dataview (business intelligence), canvas (visual network), or all formatsmarkdown
autoIndexNoWhether to automatically create index files
vaultPathYesThe path to the Obsidian vault directory

TDQS

B3.4/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden. It does not mention potential side effects like overwriting files, directory creation, permissions, or whether the operation is reversible. This is a significant gap for a write/export operation.

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 of 11 words, front-loaded with the verb and destination, with no redundant phrases. Every word earns its place.

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

Completeness2/5

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

For a tool with no output schema and no annotations, the description is too thin. It lacks information about what happens on export, return values, prerequisites, and format implications. The complete schema coverage mitigates param gaps, but overall behavior is unexplained.

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?

The schema already describes all three parameters at 100% coverage, so the description adds little meaning beyond naming 'various formats'. It does not elaborate on format-specific behavior or index creation beyond what the schema states, keeping this at baseline.

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 identifies the action ('Export'), the resource ('knowledge graph'), and destination ('Obsidian vault'), and distinguishes from sibling tools that manage entities/relations rather than exporting. It is specific and unambiguous.

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?

No explicit guidance on when to use this tool versus alternatives, nor any exclusions or best practices. The usage context is only implied by the tool's name and purpose, making it merely the minimum viable guidance.

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

open_nodesC

Open specific nodes in the knowledge graph by their names

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYesAn array of entity names to retrieve

TDQS

C2.9/5.0
Behavior2/5

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. It only says 'open', which implies read-only retrieval, but does not explicitly state that it is non-mutating, what it returns, or how missing names are handled. This leaves significant ambiguity.

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, efficiently worded sentence that directly states the action and resource. It contains no filler or redundant information.

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

Completeness2/5

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

The tool has no output schema and the description does not clarify what 'open' returns (e.g., node attributes, observations, relations). For an agent to invoke the tool and interpret results correctly, this missing information is a notable gap.

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?

The input schema has 100% coverage, already describing 'names' as 'An array of entity names to retrieve'. The tool description merely restates 'by their names', adding no extra semantic detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description uses the specific verb 'Open' and identifies the resource 'nodes in the knowledge graph', scoped by 'names', making it clear this is a direct retrieval by exact names. It implicitly differentiates from search_nodes (searching) and read_graph (full graph), but does not explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus siblings. The description does not state that it should be used when exact node names are known, nor does it exclude using search_nodes for lookup or read_graph for broader context.

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

read_graphB

Read the entire knowledge graph

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure, but it only states that the graph is read. It does not mention that the operation is read-only, whether it requires permissions, or that the response may be very large. The word 'read' implies non-destructive behavior, but no details are given.

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, concise sentence that directly states the tool's purpose with no redundancy. It is well-structured and every word contributes to the meaning.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description should explain what reading the graph returns or any caveats (e.g., large payloads). It does not, and it also fails to differentiate this tool from search_nodes for partial reads. The tool is simple, but the description is still incomplete for an agent to use it confidently.

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

Parameters4/5

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

The tool has zero parameters and the schema is empty, so there is nothing to document. The baseline for zero parameters is 4, and the description correctly indicates that no inputs are needed, without adding unnecessary detail.

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

Purpose4/5

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

The description uses a specific verb 'read' and identifies the resource 'the entire knowledge graph,' clearly distinguishing it from sibling tools that create or delete entities. However, it is brief and doesn't elaborate on the output format or how it differs from export_to_obsidian, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool over alternatives like search_nodes or open_nodes. It is only implied that this is for reading the whole graph, with no mention of filtering or use cases.

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

search_nodesA

Search for nodes in the knowledge graph with relevance scoring and fuzzy matching. Returns results sorted by relevance with detailed match metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
fuzzyNoEnable fuzzy matching for typo tolerance (default: true)
limitNoMaximum number of results to return (default: 50, max: 200)
queryYesThe search query to match against entity data
fieldsNoWhich fields to search in (default: all fields)
minScoreNoMinimum relevance score (0-100) to include in results (default: 0)
fuzzyThresholdNoSimilarity threshold for fuzzy matching (0-1, default: 0.7)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It discloses ordering (sorted by relevance), the presence of match metadata, and the use of fuzzy matching, but it does not explicitly state that the operation is read-only or has no side effects. This is a moderate level of transparency for a search tool.

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

Conciseness5/5

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

The description is two sentences, both informative and free of fluff. It front-loads the core action and adds a concise note about output characteristics, making it easy to parse and use.

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

Completeness4/5

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

Given the tool's moderate complexity (6 parameters, no output schema, no annotations), the description provides essential context: what it searches, how results are ordered, and that metadata is included. It does not detail the exact metadata fields, but the parameter schema covers invocation details well, leaving only a minor gap in return-structure specificity.

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?

The input schema covers 100% of parameters with detailed descriptions, including defaults and ranges. The tool description does not add additional meaning beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb ('Search') and resource ('nodes in the knowledge graph'), and distinguishes it from siblings by mentioning relevance scoring and fuzzy matching. It also describes the output (results sorted by relevance with metadata), making its purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for targeted searching rather than reading the whole graph, but it does not explicitly state when to prefer this over alternatives like 'read_graph' or 'open_nodes'. There is no mention of exclusions or trade-offs, so the guidance is implicit rather than direct.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv1.1.0
    • First observedadd_observations
    • First observedcreate_entities
    • First observedcreate_relations
    • First observeddelete_entities
    • First observeddelete_observations
    • First observeddelete_relations
    • First observedexport_to_obsidian
    • First observedopen_nodes
    • First observedread_graph
    • First observedsearch_nodes

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct role: creating entities/relations, adding/deleting observations, deleting entities/relations, reading the whole graph, searching, opening, and exporting. No two tools appear to overlap in purpose.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (create_entities, delete_relations, search_nodes, etc.). The naming is uniform and predictable.

Tool Count5/5

10 tools is well-suited for a knowledge graph memory server, covering CRUD operations, search, and export without excessive or redundant tools.

Completeness5/5

The tool set provides complete lifecycle coverage: create entities and relations, add/delete observations (updates), delete entities/relations, read the full graph, search, and export. No obvious missing operations for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    An MCP server that gives AI assistants persistent memory across sessions. It stores project context, decisions, and progress in structured markdown files as well as a knowledge graph and sequential thinking for better memory storage.
    36
    14
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Open-source MCP memory server providing persistent, cross-platform context for AI tools via a knowledge graph with encrypted storage.
    4
    13
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    A universal MCP server providing persistent, structured memory through a knowledge graph with graph storage, semantic vector search, and multi-hop traversal for AI agents and IDEs.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Knowledge-graph memory server for MCP-compatible AI tools, providing persistent, connected memory with typed relationships and auto-consolidation.
    71
    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/AojdevStudio/simple-memory-mcp'

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