edumem-mcp
Click on "Deploy 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., "@edumem-mcpsave a note that we decided on PostgreSQL for user data"
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.
edumem-mcp
Directory-scoped agent memory using markdown files — an MCP server that gives LLM agents persistent, per-project memory without cluttering their context.
Why edumem-mcp?
Agents forget everything between sessions. Dumping all memories into the context is messy and doesn't scale. edumem-mcp solves this by:
Scoping memory by directory — The agent only sees memories relevant to the workspace it's working in.
Using plain Markdown files — Human-readable, git-friendly, easy to edit or browse manually.
Supporting shared, read-only memories — Configure
--self-memdirectories with global notes, coding conventions, or project knowledge that appear alongside workspace memories.Zero enforced structure — Write any markdown you want; no schemas, no templates, no restrictions.
Related MCP server: mem-persistence
Installation
Note: This package is not yet published to npm. Install directly from the git repository:
Install globally from git
npm install -g github:SkillfulElectro/edumem-mcpOr run with npx (no install)
npx -y github:SkillfulElectro/edumem-mcpClone and build locally
git clone https://github.com/SkillfulElectro/edumem-mcp.git
cd edumem-mcp
npm install
npm run buildConfiguration
Add to your MCP client config (Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"edumem-mcp": {
"command": "npx",
"args": ["-y", "github:SkillfulElectro/edumem-mcp"]
}
}
}⚠️ Important: Do NOT use npm start
When running via an MCP client config, the server communicates over stdin/stdout using JSON-RPC. npm start prints lifecycle banners to stdout (like > edumem-mcp@1.0.0 start), which break the JSON-RPC protocol. Always launch the server directly:
{
"mcpServers": {
"edumem-mcp": {
"command": "npx",
"args": ["-y", "github:SkillfulElectro/edumem-mcp"]
}
}
}Or if running from a local clone:
{
"mcpServers": {
"edumem-mcp": {
"command": "node",
"args": ["/absolute/path/to/edumem-mcp/dist/index.js"]
}
}
}CLI Options
Option | Default | Description |
|
| Name of the per-workspace memory directory |
| (none) | Comma-separated list of absolute paths to directories whose |
| (none) | Default workspace directory. When set, the |
Example with custom options:
{
"mcpServers": {
"edumem-mcp": {
"command": "npx",
"args": [
"-y", "github:SkillfulElectro/edumem-mcp",
"--wname", ".myproject-memory",
"--self-mem", "/Users/alex/global-notes,/Users/alex/team-conventions",
"--workspace", "/Users/alex/projects/myapp"
]
}
}
}How It Works
For any workspace_path the agent is working in, edumem-mcp looks for memory files in:
Workspace memory:
<workspace_path>/.edumem-mcp/*.md(read/write by the agent)Self-mem directories: Any directories passed via
--self-mem(read-only by the agent)
The agent can list, read, write, delete, and search across all sources seamlessly.
Tools
list_memories
List all .md memory files visible from a workspace.
Parameter | Type | Default | Description |
| string | (optional if --workspace set) | The directory to list memories for |
| boolean |
| Include subdirectories of each memory source |
Returns an array of { name, source, size } objects.
read_memory
Read the full content of a memory file by name.
Parameter | Type | Default | Description |
| string | (optional if --workspace set) | Directory context for the read |
| string | (required) | File name (e.g. |
Looks in workspace memory first, then self-mem directories. Returns the raw markdown content.
search_memories
Search across all memory files for a query string (case-insensitive).
Parameter | Type | Default | Description |
| string | (optional if --workspace set) | Directory context for the search |
| string | (required) | Substring to search for |
| boolean |
| Search in subdirectories too |
|
|
| Limit search to a specific source |
Returns an array of { name, source, snippet, line } objects.
write_memory
Create or update a memory file. Only writes to the workspace's own memory directory; cannot modify self-mem files.
Parameter | Type | Default | Description |
| string | (optional if --workspace set) | Where to write the memory |
| string | (required) | File name ( |
| string | (required) | Markdown content to write |
|
|
| Write strategy |
delete_memory
Delete a memory file from the workspace. Cannot delete self-mem files.
Parameter | Type | Default | Description |
| string | (optional if --workspace set) | Where to delete from |
| string | (required) | Name of the file to delete |
Usage Examples
Agent writes a project decision
Tool: write_memory
Args: {
"workspace_path": "/home/alex/projects/myapp",
"memory_name": "decisions/why-postgres",
"content": "## Why PostgreSQL\n\nChose PostgreSQL over MySQL for:\n- Better JSON support\n- Stronger ACID compliance\n- Familiar team experience"
}
Result: Memory "decisions/why-postgres.md" written successfully.Agent recalls past decisions
Tool: list_memories
Args: { "workspace_path": "/home/alex/projects/myapp" }
Result: [
{ "name": "decisions/why-postgres.md", "source": "workspace", "size": 156 },
{ "name": "setup-notes.md", "source": "workspace", "size": 89 }
]
Tool: read_memory
Args: { "workspace_path": "/home/alex/projects/myapp", "memory_name": "decisions/why-postgres.md" }
Result: ## Why PostgreSQL ...Agent searches for anything about "auth"
Tool: search_memories
Args: { "workspace_path": "/home/alex/projects/myapp", "query": "auth" }
Result: [
"[workspace] setup-notes.md:12 — Configured OAuth2 with Google and GitHub",
"[/Users/alex/global-notes] conventions.md:5 — All services must use the auth-gateway"
]Architecture
edumem-mcp/
├── src/
│ ├── index.ts # Entry point: CLI parsing, MCP server, stdio transport
│ ├── memory-service.ts # Core logic: file I/O, path security, source resolution
│ └── tools.ts # MCP tool registrations with Zod schemas
├── dist/ # Compiled JavaScript (published to npm)
├── package.json
├── tsconfig.json
└── README.mdSecurity
All file operations are restricted to allowed memory directories.
Path traversal attacks (e.g.
../../../etc/passwd) are blocked.Self-mem directories are read-only — the agent cannot modify or delete them.
Only
.mdfiles are returned by list/search; other files are ignored.
Development
git clone https://github.com/SkillfulElectro/edumem-mcp.git
cd edumem-mcp
npm install
npm run build # compile TypeScript
npm start # run the compiled server
# or for dev:
npm run dev # run directly with ts-nodeTesting
# Manual stdio test
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | node dist/index.jsLicense
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Hosted MCP memory for coding agents: persistent across sessions, editable markdown, team sharing.
An MCP memory server. One memory your agents share — across models, devices and apps.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.7 npmMIT
- AlicenseNot gradedqualityBmaintenancePersistent memory MCP server that stores and retrieves memories in Markdown files, enabling shared context across multiple AI agents with hybrid search and deduplication.MIT
- AlicenseAqualityAmaintenanceA self-hosted MCP server that gives AI agents shared, long-term memory over a git-backed folder of markdown, enabling persistent knowledge search, read, and write without a database.1622 npm11MIT
- AlicenseAqualityBmaintenanceMCP server for persistent, cross-session, local-first memory for AI agents, storing memories as Markdown files with SQLite indexing for hybrid search.24Apache 2.0