MemoryMesh is a knowledge graph server designed for AI models, with a focus on text-based RPGs and interactive storytelling. It helps AI maintain consistent, structured memory across conversations, enabling richer and more dynamic interactions. The project is based on the Knowledge Graph Memory Server from the MCP servers repository and retains its core functionality. v0.3.0 Update: The MCP SDK ha
Add this skill
npx mdskills install CheMiguel23/memorymeshWell-documented knowledge graph MCP server with schema-driven tools and strong visualization support
MemoryMesh is a knowledge graph server designed for AI models, with a focus on text-based RPGs and interactive storytelling. It helps AI maintain consistent, structured memory across conversations, enabling richer and more dynamic interactions.
The project is based on the Knowledge Graph Memory Server from the MCP servers repository and retains its core functionality.
v0.3.0 Update: The MCP SDK has been updated from v1.0.4 to v1.25.2 to comply with the current Model Context Protocol specification (2025-11-25). This is a major update that brings compatibility with the latest MCP clients including Claude Desktop, ChatGPT, Cursor, Gemini, and VS Code. After updating, run npm install to fetch the new dependencies.
Since v0.2.7 the default location of schemas was changed to dist/data/schemas.
This location is not expected to change in the future, but if you are updating from a previous version, make sure to move your schema files to the new location.
MemoryMesh is a local knowledge graph server that empowers you to build and manage structured information for AI models. While particularly well-suited for text-based RPGs, its adaptable design makes it useful for various applications, including social network simulations, organizational planning, or any scenario involving structured data.
Nodes represent entities or concepts within the knowledge graph. Each node has:
name: A unique identifier.nodeType: The type of the node (e.g., npc, artifact, location), defined by your schemas.metadata: An array of strings providing descriptive details about the node.weight: (Optional) A numerical value between 0 and 1 representing the strength of the relationship, defaulting to 1.Example Node:
{
"name": "Aragorn",
"nodeType": "player_character",
"metadata": [
"Race: Human",
"Class: Ranger",
"Skills: Tracking, Swordsmanship",
"Affiliation: Fellowship of the Ring"
]
}
Edges represent relationships between nodes. Each edge has:
from: The name of the source node.to: The name of the target node.edgeType: The type of relationship (e.g., owns, located_in).{
"from": "Aragorn",
"to": "Andúril",
"edgeType": "owns"
}
Schemas are the heart of MemoryMesh. They define the structure of your data and drive the automatic generation of tools.
Place your schema files (.schema.json) in the dist/data/schemas directory of your built MemoryMesh project. MemoryMesh will automatically detect and process these files on startup.
File name: [name].schema.json. For example, for a schema defining an 'npc', the filename would be add_npc.schema.json.
name - Identifier for the schema and node type within the memory. IMPORTANT: The schema’s name must start with add_ to be recognized.description - Used as the description for the add_ tool, providing context for the AI. (The delete and update tools have a generic description)properties - Each property includes its type, description, and additional constraints.
property
type - Supported values are string or array.description - Helps guide the AI on the entity’s purpose.required - Boolean. If true, the AI is forced to provide this property when creating a node.enum - An array of strings. If present, the AI must choose one of the given options.relationship - Defines a connection to another node. If a property is required and has a relationship, the AI will always create both the node and the corresponding edge.
edgeType - Type of the relationship to be created.description - Helps guide the AI on the relationship’s purpose.additionalProperties - Boolean. If true, allows the AI to add extra attributes beyond those defined as required or optional.{
"name": "add_npc",
"description": "Schema for adding an NPC to the memory" ,
"properties": {
"name": {
"type": "string",
"description": "A unique identifier for the NPC",
"required": true
},
"race": {
"type": "string",
"description": "The species or race of the NPC",
"required": true,
"enum": [
"Human",
"Elf",
"Dwarf",
"Orc",
"Goblin"
]
},
"currentLocation": {
"type": "string",
"description": "The current location of the NPC",
"required": true,
"relationship": {
"edgeType": "located_in",
"description": "The current location of the NPC"
}
}
},
"additionalProperties": true
}
Based on this schema, MemoryMesh automatically creates:
MemoryMesh includes 11 pre-built schemas designed for text-based RPGs, providing a ready-to-use foundation for game development.
MemoryMesh includes a SchemaManager tool to simplify schema creation and editing. It provides a visual interface, making it easy to define your data structures without writing JSON directly.
MemoryMesh simplifies interaction with your knowledge graph through dynamic tools. These tools are not manually coded but are automatically generated directly from your schema definitions. This means that when you define the structure of your data using schemas, MemoryMesh intelligently creates a set of tools tailored to work with that specific data structure.
Think of it like this: You provide a blueprint (the schema), and MemoryMesh automatically constructs the necessary tools to build, modify, and remove elements based on that blueprint.
MemoryMesh has an intelligent system that reads your schema definitions. It analyzes the structure you've defined, including the properties of your entities and their relationships. Based on this analysis, it automatically creates a set of tools for each entity type:
add_: A tool for creating new instances of an entity.update_: A tool for modifying existing entities.delete_: A tool for removing entities.These tools are then made available through a central hub within MemoryMesh, ensuring they can be easily accessed and used by any connected client or AI.
In essence, MemoryMesh's dynamic tool system provides a powerful and efficient way to manage your knowledge graph, freeing you to focus on the content and logic of your application rather than the underlying mechanics of data manipulation.
By default, data is stored in a JSON file in dist/data/memory.json.
The Memory Viewer is a separate tool designed to help you visualize and inspect the contents of the knowledge graph managed by MemoryMesh. It provides a user-friendly interface for exploring nodes, edges, and their properties.
The Memory Viewer is a standalone web application. Memory Viewer discussion
memory.json file (located in dist/data/memory.json by default).For optimal results, use Claude's "Projects" feature with custom instructions. Here's an example of a prompt you can start with:
You are a helpful AI assistant managing a knowledge graph for a text-based RPG. You have access to the following tools: add_npc, update_npc, delete_npc, add_location, update_location, delete_location, and other tools for managing the game world.
When the user provides input, first process it using your available tools to update the knowledge graph. Then, respond in a way that is appropriate for a text-based RPG.
You can also instruct the AI to perform specific actions directly in the chat.
Experiment with different prompts to find what works best for your use case!
Add a couple of cities, some npcs, couple locations around the city to explore, hide an artifact or two somewhere
Clone the Repository:
git clone https://github.com/CheMiguel23/memorymesh.git
cd memorymesh
Install Dependencies:
npm install
Build the Project:
npm run build
This command compiles the TypeScript code into JavaScript in the dist directory and copies sample schema and data files into it as well.
Verify File Copy (Optional):
data folder to dist.dist/data exists and contains .json files. Also verify that dist/data/schemas exists and contains .schema.json files.Configure Claude Desktop:
Open your Claude Desktop configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonmemorymesh to the mcpServers section. You can choose one of the following configuration options:"mcpServers": {
"memorymesh": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/YOUR/PROJECT/memorymesh/dist/index.js"]
}
}
/ABSOLUTE/PATH/TO/YOUR/PROJECT/ with the actual absolute path to your memorymesh project directory."command": "node",
"args": ["/Users/yourusername/Projects/memorymesh/dist/index.js"]
"command": "node",
"args": ["C:\\Projects\\memorymesh\\dist\\index.js"]
Restart Claude Desktop: Completely restart Claude Desktop for the changes to take effect.
add_npc, update_npc, etc.), your server is working and exposing tools correctly.Before updates, make sure to back up your dist/data directory to avoid losing your memory data.
Server not appearing in Claude:
claude_desktop_config.json. Make sure they are absolute paths and correct.dist directory exists and contains the compiled JavaScript files, including index.js.~/Library/Logs/Claude/mcp-server-memorymesh.log (and mcp.log)Logs folder under %AppData%\Claude)Tools not showing up:
npm run build command completed without errors.dist/data/schemas and follow the correct naming convention (add_[entity].schema.json).MemoryMesh offers several ways to customize its behavior beyond the basic setup:
You can override default settings using in /config/config.ts
dist/data/memory.json)dist/data/schemas/memory.json)Node Deletion: The AI may be hesitant to delete nodes from the knowledge graph. Encourage it through prompts if needed.
Conflicting Knowledge: MemoryMesh currently uses a "last write wins" approach for handling data. If conflicting information is provided about the same entity, the most recent update will overwrite previous values. Here are strategies for managing conflicting information:
Current Approaches:
"Source: Character testimony" or "Source: Official records" to track where information came from."As of Chapter 3") in metadata to track when information was valid.rumor_about_villain vs truth_about_villain).weight property on edges (0-1 range) to indicate confidence or reliability of relationships.Example - Tracking uncertain information:
{
"name": "VillainOrigin_Rumor",
"nodeType": "information",
"metadata": [
"Source: Tavern gossip",
"Reliability: Low",
"Claims: Villain came from the northern mountains"
]
}
Future Considerations: For applications requiring sophisticated conflict resolution, consider implementing a custom layer that:
Contributions, feedback, and ideas are welcome! This project is a personal exploration into integrating structured data with AI reasoning capabilities. Contributions, feedback, and ideas are welcome to push it further or inspire new projects.
Install via CLI
npx mdskills install CheMiguel23/memorymeshMemoryMesh is a free, open-source AI agent skill. MemoryMesh is a knowledge graph server designed for AI models, with a focus on text-based RPGs and interactive storytelling. It helps AI maintain consistent, structured memory across conversations, enabling richer and more dynamic interactions. The project is based on the Knowledge Graph Memory Server from the MCP servers repository and retains its core functionality. v0.3.0 Update: The MCP SDK ha
Install MemoryMesh with a single command:
npx mdskills install CheMiguel23/memorymeshThis downloads the skill files into your project and your AI agent picks them up automatically.
MemoryMesh works with Claude Code, Claude Desktop, Cursor, Vscode Copilot, Windsurf, Continue Dev, Codex, Gemini Cli, Amp, Roo Code, Goose, Opencode, Trae, Qodo, Command Code, Chatgpt. Skills use the open SKILL.md format which is compatible with any AI coding agent that reads markdown instructions.