MCP Memory SQLite
Provides a personal knowledge graph and memory system using SQLite for local storage, enabling persistent memory across conversations with entity management, relationship tracking, and vector-based semantic search capabilities.
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., "@MCP Memory SQLiteremember that I'm working on a React project called TaskFlow"
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.
mcp-memory-sqlite
A personal knowledge graph and memory system for AI assistants using SQLite with optimized text search. Perfect for giving Claude (or any MCP-compatible AI) persistent memory across conversations!
Why Use This?
Give your AI assistant a memory! This tool lets Claude (or other AI assistants) remember entities, concepts, and their relationships across conversations. Perfect for:
📚 Personal Knowledge Management - Build your own knowledge graph
🤖 AI Assistant Memory - Help Claude remember important information about your projects, preferences, and context
đź”— Relationship Tracking - Connect ideas, people, projects, and concepts
🔍 Smart Text Search - Find information using flexible, relevance-ranked text search
Related MCP server: MCPMem
Features
100% Local & Private: All your data stays on your machine
Easy Setup: Works out-of-the-box with Claude Desktop
Flexible Text Search: Case-insensitive search with fuzzy matching that handles different naming conventions
Relevance Ranking: Results prioritized by name match > type match > observation match
Smart Deduplication: Automatically prevents duplicate relationships
Context-Optimized: Designed specifically for LLM context efficiency - no unnecessary data bloat
Simple API: Intuitive tools for creating, searching, and managing your knowledge graph
Quick Start
For Claude Desktop users (recommended):
Add this to your Claude Desktop config:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "mcp-memory-sqlite"]
}
}
}That's it! Claude can now remember things across conversations.
Installation
If you want to use it in your own project:
npm install mcp-memory-sqlite
# or
pnpm add mcp-memory-sqliteConfiguration
Optional: Customize the database location with an environment variable:
SQLITE_DB_PATH: Where to store your data (default:./sqlite-memory.db)
MCP Tools
create_entities
Create or update entities with observations.
Parameters:
entities: Array of entity objectsname(string): Unique entity identifierentityType(string): Type/category of the entityobservations(string[]): Array of observation strings
Example:
{
"entities": [
{
"name": "Claude",
"entityType": "AI Assistant",
"observations": [
"Created by Anthropic",
"Focuses on being helpful, harmless, and honest"
]
}
]
}search_nodes
Search for entities and their relations using text search with relevance ranking.
Parameters:
query(string): Text to search forlimit(number, optional): Maximum results to return (default: 10, max: 50)
Example:
{
"query": "AI Assistant",
"limit": 5
}Text Search Features:
Case-insensitive: Searches ignore case differences
Flexible matching: Automatically handles variations in spacing, underscores, and hyphens
"JavaScript framework" will match "javascript_framework"
"web-development" will match "web_development" or "web development"
Searches across: Entity names, entity types, and all observations
Relevance ranking: Results prioritized by where match occurs (name > type > observation)
read_graph
Get recent entities and their relations (returns last 10 entities by default).
Parameters: None
create_relations
Create relationships between entities. Duplicate relations (same source, target, and type) are automatically ignored.
Parameters:
relations: Array of relation objectssource(string): Source entity nametarget(string): Target entity nametype(string): Relationship type
Example:
{
"relations": [
{
"source": "Claude",
"target": "Anthropic",
"type": "created_by"
}
]
}Note: If you attempt to create the same relation multiple times, only the first one will be stored. This prevents duplicate relationships in your knowledge graph.
delete_entity
Delete an entity and all associated data (observations and relations).
Parameters:
name(string): Entity name to delete
delete_relation
Delete a specific relation between entities.
Parameters:
source(string): Source entity nametarget(string): Target entity nametype(string): Relationship type
get_entity_with_relations
Get an entity along with all its relations and directly connected entities. Perfect for exploring the knowledge graph around a specific concept.
Parameters:
name(string): Entity name to retrieve
Returns:
entity: The requested entityrelations: All relations where this entity is source or targetrelatedEntities: All entities connected to this one
Example:
{
"name": "Claude"
}Usage with Claude Desktop
Add to your Claude Desktop configuration:
Minimal configuration (uses default ./sqlite-memory.db):
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "mcp-memory-sqlite"]
}
}
}With custom database path:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "mcp-memory-sqlite"],
"env": {
"SQLITE_DB_PATH": "/path/to/your/memory.db"
}
}
}
}Database Schema
The tool uses pure SQLite for fast, reliable storage:
Tables
entities: Stores entity metadata (name, type, creation time)
observations: Stores observations linked to entities
relations: Stores relationships between entities (with unique constraint to prevent duplicates)
All queries use optimized SQLite indexes for fast text search and relationship traversal.
Development
# Install dependencies
pnpm install
# Build
pnpm run build
# Run in development mode
pnpm run dev
# Run tests
pnpm testHow It Works
Under the hood, this uses:
SQLite for fast, reliable local storage
better-sqlite3 for Node.js integration
Optimized text search with relevance ranking and fuzzy matching
Your data is stored in a single .db file on your computer - no
cloud, no external services, completely private.
License
MIT
Credits
Built with:
better-sqlite3 - Fast SQLite driver
tmcp - MCP server framework
Available Tools
7 toolscreate_entitiesCreate or update entities with observationsC
Create or update entities with observations
| Name | Required | Description | Default |
|---|---|---|---|
| entities | 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. While 'Create or update' suggests upsert semantics, it fails to specify merge behavior (observations appended or replaced?), side effects, return values, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief (6 words), but this conciseness results from under-specification rather than efficient information density. It wastes the opportunity to provide essential context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested object structure (entities with name/entityType/observations), zero schema descriptions, and no output schema, the description is inadequate. It omits critical details about the data model and operation results.
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%, yet the description does not compensate by explaining the entities array structure, the semantic meaning of observations, or valid values for entityType. It merely mentions 'observations' without elaborating.
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?
Tautological: description restates name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives (e.g., when to create entities vs. relations), nor any prerequisites or conditions for the update behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_relationsCreate relations between entitiesD
Create relations between entities
| Name | Required | Description | Default |
|---|---|---|---|
| relations | 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 of behavioral disclosure but provides none. It omits idempotency, error handling (e.g., duplicate relations), side effects, and return values.
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?
While brief (4 words), this represents under-specification rather than efficient conciseness. As with the calibration example 'Process', brevity here signals inadequacy, not clarity.
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?
Completely inadequate for a tool with nested object parameters and no output schema. Missing essential context: whether entities must exist first, valid relation types, and what the operation returns.
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 fails to compensate. It does not explain the 'relations' array structure or the semantics of 'source', 'target', and 'type' fields, leaving critical parameters undocumented.
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?
Tautological: description restates name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives (e.g., 'create_entities'), prerequisites (whether source/target entities must exist), or expected workflow. The description offers zero usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entityDelete entity and associated dataC
Delete entity and associated data
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden of behavioral disclosure. It mentions 'associated data' will be deleted (implying cascade), but fails to disclose critical safety information: whether deletion is permanent, what happens to relations (orphaned vs cascade), or required permissions for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While brief at only five words, this is under-specification rather than effective conciseness. For a destructive tool with zero annotation coverage, the description fails to earn its place by providing necessary safety and usage context within a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely inadequate for a destructive operation. No annotations, no output schema, 0% parameter coverage, and a 5-word description provides insufficient context for safe invocation. Missing: irreversibility warnings, relation handling behavior, and parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for the 'name' parameter, the description fails to compensate by explaining what 'name' refers to (entity ID, display name, or unique identifier), its expected format, or how to obtain it. The parameter is completely undocumented.
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?
Tautological: description restates name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives like 'delete_relation' or whether to use 'get_entity_with_relations' first to inspect the entity. No prerequisites or warnings about irreversibility are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_relationDelete relation between entitiesC
Delete relation between entities
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| target | Yes | ||
| type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full disclosure burden for this destructive operation. It fails to mention whether deletion is permanent, if it cascades to related entities, required permissions, or rate limits. The word 'Delete' implies mutation but lacks critical safety 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?
While brief at only four words, this represents under-specification rather than effective conciseness. The single sentence fails to earn its place because it adds no information beyond what is already in the tool name, offering no value to the agent.
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 destructive graph operation with three parameters, no annotations, and no output schema, the description is grossly incomplete. It lacks explanation of the relation model (source-target-type triplet), deletion behavior, return values, or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate by explaining the parameter semantics. It completely omits what 'source', 'target', and 'type' represent (likely entity IDs and relation type), leaving all three parameters undocumented and ambiguous.
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?
Tautological: description restates name/title.
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 this tool versus alternatives like 'delete_entity' or how it interacts with the graph structure. There are no prerequisites, warnings about orphaned entities, or references to the creation tool 'create_relations' mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_with_relationsGet an entity along with all its relations and related entities. Useful for exploring the knowledge graph around a specific entity.C
Get an entity along with all its relations and related entities. Useful for exploring the knowledge graph around a specific entity.
| Name | Required | Description | Default |
|---|---|---|---|
| name | 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 of behavioral disclosure but offers minimal details. It mentions retrieving 'all' relations but does not specify traversal depth (immediate neighbors only? transitive closure?), response format, or error behavior when the named entity 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?
The description is a single sentence that efficiently restates the title. While not verbose, it is underspecified for the complexity of graph traversal operations—every sentence earns its place, but critical information is missing that should have been included.
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 complexity of knowledge graph traversal, zero schema descriptions, no annotations, and no output schema, the description is inadequate. It does not hint at the return structure (e.g., nested entity objects vs. edge lists), pagination behavior, or relation depth limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'name' parameter, and the description completely fails to compensate. It does not indicate whether 'name' refers to a unique identifier, display label, or URI format, leaving the agent without guidance on how to construct valid inputs.
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?
Tautological: description restates name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives like 'search_nodes' (for finding entities) or 'read_graph' (for bulk access). Does not mention prerequisites such as needing to know the entity name in advance, nor does it warn about performance implications of fetching 'all' relations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_graphGet recent entities and their relationsC
Get recent entities and their relations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden but offers minimal behavioral context. It does not specify the return format, pagination limits, what 'recent' quantifies, or whether this is a safe read-only operation despite the 'Get' verb implying so.
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?
While the single-sentence structure avoids verbosity, the extreme brevity constitutes under-specification rather than efficient communication. The sentence fails to earn its place by adding value beyond 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 graph query tool with no output schema, the description inadequately explains return values. It mentions 'entities and their relations' but omits structure, depth of relation traversal, result count limits, and the definition of 'recent'—critical gaps for a retrieval 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?
Input schema contains zero parameters. Per scoring guidelines, zero-parameter tools receive a baseline score of 4 since there are no parameter semantics to describe beyond the schema itself.
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?
Tautological: description restates name/title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this versus alternatives. Given siblings include specific entity retrieval (get_entity_with_relations) and search (search_nodes), the description should clarify that this returns unfiltered recent activity rather than targeted queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_nodesSearch entities and relations by text query. Returns up to limit results (default 10, max 50) ordered by relevance.C
Search entities and relations by text query. Returns up to limit results (default 10, max 50) ordered by relevance.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully communicates pagination constraints (default 10, max 50) and result ordering (by relevance), but omits safety profile information (e.g., read-only status) or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence, but it is identical to the title, adding zero new information. This redundancy prevents a higher score despite the lack of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains return behavior (result count limits and ordering) which partially compensates for the missing output schema. However, it lacks details on the structure of returned entities/relations or filtering capabilities, leaving gaps for a tool with 0% schema coverage.
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%, requiring the description to compensate. It implicitly documents the 'query' parameter as a 'text query' and the 'limit' parameter with specific bounds (default 10, max 50), providing adequate but not comprehensive semantic context.
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?
Tautological: description restates name/title.
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 this tool versus alternatives like 'get_entity_with_relations' or 'read_graph'. It fails to indicate that text-based search is appropriate when the entity ID is unknown.
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.
7 tool updates
v0.0.4- First observed
create_entities - First observed
create_relations - First observed
delete_entity - First observed
delete_relation - First observed
get_entity_with_relations - First observed
read_graph - First observed
search_nodes
TDQS
Each tool has a clearly distinct purpose: create_entities and create_relations handle creation of different graph components, delete_entity and delete_relation handle deletion of different components, get_entity_with_relations focuses on a specific entity's context, read_graph provides a general overview, and search_nodes enables text-based discovery. There is no overlap in functionality that would cause confusion.
All tools follow a consistent verb_noun pattern with snake_case: create_entities, create_relations, delete_entity, delete_relation, get_entity_with_relations, read_graph, and search_nodes. The naming is predictable and readable throughout the set.
With 7 tools, this is well-scoped for a knowledge graph management server. Each tool earns its place by covering essential operations like creation, deletion, retrieval, and search, without being overly sparse or bloated.
The tool set provides complete CRUD/lifecycle coverage for entities and relations in a knowledge graph domain: create, read (via get_entity_with_relations, read_graph, search_nodes), update (implied via create_entities for updates), and delete. There are no obvious gaps that would hinder agent 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
Persistent memory for AI agents. Search and store durable facts, preferences and decisions.
- ContextaOAuthcc.contexta
Persistent memory and knowledge graph for AI assistants — keyword + vector + graph search.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Persistent memory for AI agents. Search, store, and recall across sessions.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceProvides persistent local memory functionality for AI assistants, enabling them to store, retrieve, and search contextual information across conversations with SQLite-based full-text search. All data stays private on your machine while dramatically improving context retention and personalized assistance.3-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to store and retrieve memories with semantic search capabilities using vector embeddings. Provides persistent memory storage with SQLite backend for context retention across conversations.771MIT
- AlicenseNot gradedqualityFmaintenanceProvides persistent memory functionality for AI conversations by creating, managing and querying entities and relationships in a knowledge graph. Features SQLite storage, advanced search capabilities, and Windows auto-start integration for long-term AI memory retention.18MIT
- AlicenseNot gradedqualityDmaintenanceProvides LLMs with persistent memory across conversations using a knowledge graph that stores entities, relationships, and observations with support for PostgreSQL or SQLite backends.5925MIT
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/spences10/mcp-memory-sqlite'
If you have feedback or need assistance with the MCP directory API, please join our Discord server