Persistent memory and knowledge graphs for AI agents that survive across sessions. Exposes 17 tools including store, recall, search for memory operations, connect and explore for building knowledge graphs, and awaken/reflect for loading context at session start. Uses hybrid search combining BM25, vector, and graph traversal. Syncs across Claude, Cursor, Windsurf, Gemini CLI, and other MCP clients through a remote server at mcp.penfield.app. Reach for this when you need your agent to remember decisions, preferences, and investigation threads between conversations, or when building compound knowledge over time instead of starting cold every session.
Public tool metadata for what this MCP can expose to an agent.
awaken⚡ CALL THIS TOOL FIRST IN EVERY NEW CONVERSATION ⚡ Loads your personality configuration and user preferences for this session. This is how you learn WHO you are and HOW the user wants you to behave. Returns your awakening briefing containing: - Your persona identity (who you a...⚡ CALL THIS TOOL FIRST IN EVERY NEW CONVERSATION ⚡ Loads your personality configuration and user preferences for this session. This is how you learn WHO you are and HOW the user wants you to behave. Returns your awakening briefing containing: - Your persona identity (who you a...
No parameter schema in public metadata yet.
searchSearch for memories. Returns results with proper citation support (id, title, url, text fields). Args: query: Search query limit: Maximum results (default 10) ctx: MCP context Returns: Dict with 'results' array containing id, title, url, text fields2 paramsSearch for memories. Returns results with proper citation support (id, title, url, text fields). Args: query: Search query limit: Maximum results (default 10) ctx: MCP context Returns: Dict with 'results' array containing id, title, url, text fields
limitintegerquerystringfetchFetch memory by ID. Returns a single memory with proper citation support (id, title, url, text fields). Args: id: Memory UUID to fetch ctx: MCP context Returns: Dict with id, title, url, text, metadata fields1 paramsFetch memory by ID. Returns a single memory with proper citation support (id, title, url, text fields). Args: id: Memory UUID to fetch ctx: MCP context Returns: Dict with id, title, url, text, metadata fields
idstringstoreStore important information from your work. Write detailed, complete thoughts with context, reasoning, and evidence. **Always use the connect tool** to link related items - this builds knowledge graphs for better recall. ## Memory Types (auto-detected, but be aware): - **FACT*...3 paramsStore important information from your work. Write detailed, complete thoughts with context, reasoning, and evidence. **Always use the connect tool** to link related items - this builds knowledge graphs for better recall. ## Memory Types (auto-detected, but be aware): - **FACT*...
tagsvaluecontentstringimportancevalueupdate_memoryUpdate an existing memory. Modifies properties of a stored memory by its UUID. Args: memory_id: UUID of memory to update content: New content (optional) importance: New importance score (optional, 0.0-1.0) tags: New tags (optional, replaces existing tags) ctx: MCP context (aut...4 paramsUpdate an existing memory. Modifies properties of a stored memory by its UUID. Args: memory_id: UUID of memory to update content: New content (optional) importance: New importance score (optional, 0.0-1.0) tags: New tags (optional, replaces existing tags) ctx: MCP context (aut...
tagsvaluecontentvaluememory_idstringimportancevalueconnectConnect memories to build knowledge graphs. After using 'store', immediately connect related memories using these relationship types: ## Knowledge Evolution - **supersedes**: This replaces → outdated understanding - **updates**: This modifies → existing knowledge - **evolution...4 paramsConnect memories to build knowledge graphs. After using 'store', immediately connect related memories using these relationship types: ## Knowledge Evolution - **supersedes**: This replaces → outdated understanding - **updates**: This modifies → existing knowledge - **evolution...
strengthvalueto_memorystringfrom_memorystringrelationship_typestringdisconnectRemove a connection between memories. Deletes the relationship between two memories in the knowledge graph. Args: from_memory: Source memory UUID to_memory: Target memory UUID ctx: MCP context (automatically provided) Returns: Dict with success status and disconnected memory I...2 paramsRemove a connection between memories. Deletes the relationship between two memories in the knowledge graph. Args: from_memory: Source memory UUID to_memory: Target memory UUID ctx: MCP context (automatically provided) Returns: Dict with success status and disconnected memory I...
to_memorystringfrom_memorystringsave_contextSave your cognitive state for handoff to another agent. Include your investigation context: - What session/investigation is this part of? - What role/perspective were you taking? - Who might pick this up next? (another Claude, human, Claude Code?) Reference specific memories t...2 paramsSave your cognitive state for handoff to another agent. Include your investigation context: - What session/investigation is this part of? - What role/perspective were you taking? - Who might pick this up next? (another Claude, human, Claude Code?) Reference specific memories t...
namestringdescriptionvaluerecallRecall relevant information. Uses hybrid search to find relevant memories, documents, and connections. Args: query: What to search for source_type: Optional filter ('memory', 'document', or None for all) tags: Optional list of tags to filter by (OR logic - memories with ANY of...6 paramsRecall relevant information. Uses hybrid search to find relevant memories, documents, and connections. Args: query: What to search for source_type: Optional filter ('memory', 'document', or None for all) tags: Optional list of tags to filter by (OR logic - memories with ANY of...
tagsvaluelimitintegerquerystringend_datevaluestart_datevaluesource_typevalueexploreExplore connections from a memory. Traverses the knowledge graph to find related concepts, following relationships up to the specified depth. Args: start_memory: Starting memory UUID max_depth: How deep to traverse (default 3, max 10) relationship_types: Filter by specific rel...3 paramsExplore connections from a memory. Traverses the knowledge graph to find related concepts, following relationships up to the specified depth. Args: start_memory: Starting memory UUID max_depth: How deep to traverse (default 3, max 10) relationship_types: Filter by specific rel...
max_depthintegerstart_memorystringrelationship_typesvaluerestore_contextResume work from a saved cognitive context. This provides a narrative briefing to quickly orient you to: - The investigation that was in progress - Key discoveries and insights made - Current hypotheses being tested - Open questions and blockers - Suggested next steps - All re...2 paramsResume work from a saved cognitive context. This provides a narrative briefing to quickly orient you to: - The investigation that was in progress - Key discoveries and insights made - Current hypotheses being tested - Open questions and blockers - Suggested next steps - All re...
namestringlimitintegerlist_contextsList available context checkpoints. Shows all saved contexts available for multi-agent workflows. Args: limit: Maximum number of contexts to return (default 20, max 100) offset: Number of contexts to skip for pagination (default 0) name_pattern: Filter contexts by name (case-i...4 paramsList available context checkpoints. Shows all saved contexts available for multi-agent workflows. Args: limit: Maximum number of contexts to return (default 20, max 100) offset: Number of contexts to skip for pagination (default 0) name_pattern: Filter contexts by name (case-i...
limitintegeroffsetintegername_patternvalueinclude_descriptionsbooleanreflectReflect on recent thoughts and patterns. Analyzes recent activity to identify patterns, topics, and insights. Useful for understanding "what have I been thinking about?" By default, only returns user-created memories (not document chunks). Set include_documents=True to also in...4 paramsReflect on recent thoughts and patterns. Analyzes recent activity to identify patterns, topics, and insights. Useful for understanding "what have I been thinking about?" By default, only returns user-created memories (not document chunks). Set include_documents=True to also in...
end_datevaluestart_datevaluetime_windowvalueinclude_documentsbooleansave_artifactSave an artifact to storage. Stores user-created content (diagrams, notes, code) in an organized file structure. Content is also indexed for search. Args: content: File content to save path: Full path including filename (e.g., "/project/docs/api.md") Returns: Success message o...2 paramsSave an artifact to storage. Stores user-created content (diagrams, notes, code) in an organized file structure. Content is also indexed for search. Args: content: File content to save path: Full path including filename (e.g., "/project/docs/api.md") Returns: Success message o...
pathstringcontentstringretrieve_artifactRetrieve an artifact from storage. Fetches the content of a previously saved artifact. Args: path: Full path of the artifact (e.g., "/project/docs/api.md") Returns: Artifact content or error message Examples: >>> await retrieve_artifact("/readme.md") "# README\nThis is the rea...1 paramsRetrieve an artifact from storage. Fetches the content of a previously saved artifact. Args: path: Full path of the artifact (e.g., "/project/docs/api.md") Returns: Artifact content or error message Examples: >>> await retrieve_artifact("/readme.md") "# README\nThis is the rea...
pathstringlist_artifactsList artifacts in a directory. Returns the immediate contents of a directory (not recursive). Separates folders and files for easy navigation. Args: path_prefix: Directory path to list (default: "/") Returns: Formatted directory listing or error message Examples: >>> await lis...1 paramsList artifacts in a directory. Returns the immediate contents of a directory (not recursive). Separates folders and files for easy navigation. Args: path_prefix: Directory path to list (default: "/") Returns: Formatted directory listing or error message Examples: >>> await lis...
path_prefixstringdelete_artifactDelete an artifact from storage. Permanently removes an artifact and its associated memory record. Args: path: Full path of the artifact to delete ctx: MCP context (automatically provided) Returns: Dict with success status1 paramsDelete an artifact from storage. Permanently removes an artifact and its associated memory record. Args: path: Full path of the artifact to delete ctx: MCP context (automatically provided) Returns: Dict with success status
pathstringPersistent memory for AI agents. Store decisions, preferences, and context that survive across sessions. Build knowledge graphs that compound over time. Works with Claude, Cursor, Windsurf, Gemini CLI, and any MCP-compatible tool.
Add as a custom connector in Settings → Connectors:
Name: Penfield
Remote MCP server URL: https://mcp.penfield.app
claude mcp add --transport http --scope user penfield https://mcp.penfield.app
One-click install:
Cut and paste into your browser:
cursor://anysphere.cursor-deeplink/mcp/install?name=Penfield&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1yZW1vdGUiLCJodHRwczovL21jcC5wZW5maWVsZC5hcHAvIl19
Or add manually to ~/.cursor/mcp.json:
{
"mcpServers": {
"Penfield": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.penfield.app/"]
}
}
}
Add to your MCP configuration file:
{
"mcpServers": {
"Penfield": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.penfield.app/"]
}
}
}
| App | Config Location |
|---|---|
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline | VS Code Settings → Cline → MCP Servers |
| Roo Code | VS Code Settings → Roo Code → MCP Servers |
| Zed | ~/.config/zed/settings.json under "context_servers" |
gemini mcp add penfield -- npx -y mcp-remote https://mcp.penfield.app/
Or add to ~/.gemini/settings.json:
{
"mcpServers": {
"Penfield": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.penfield.app/"]
}
}
}
17 tools for persistent memory:
| Category | Tools |
|---|---|
| Memory | store, recall, search, fetch, update_memory |
| Knowledge Graph | connect, disconnect, explore |
| Context | awaken, reflect, save_context, restore_context, list_contexts |
| Artifacts | save_artifact, retrieve_artifact, list_artifacts, delete_artifact |
Hybrid search combining BM25 (keyword), vector (semantic), and graph (connections) for recall that actually finds what you need.
Cross-platform sync — same memory, same knowledge graph, regardless of which tool you connect from.
Every session should start with:
awaken() # Load identity and personality context
reflect() # Orient on recent work (default: last 7 days)
Without these, your agent starts cold with no context.
Personal assistant that remembers
Development workflows
Research and writing
OpenClaw Native Plugin — If you use OpenClaw, the native plugin is 4-5x faster (no MCP proxy layer):
openclaw plugins install openclaw-penfield
openclaw penfield login
openclaw-penfield on GitHub · openclaw-penfield on npm
API — Direct HTTP access at api.penfield.app for custom integrations.
Copyright © 2025 Penfield™. All rights reserved.
csoai-org/pdf-document-mcp
xt765/mcp-document-converter
io.github.xjtlumedia/markdown-formatter
io.github.ai-aviate/better-notion
suekou/mcp-notion-server
meterlong/mcp-doc