docs(mcp): Add V2 enhancements to PROMPTING_GUIDE.md and update README.md
This commit is contained in:
1 parent
1adc625fcf
commit
c1b9767199
1 file changed
+102
-99
@@ -1,13 +1,13 @@
|
|||||||
# mcp-memory
|
# mcp-memory
|
||||||
A high-performance, persistent Knowledge Graph and Context daemon for Antigravity, implementing the Model Context Protocol (MCP).
|
A high-performance, persistent Knowledge Graph and Context daemon for Antigravity, implementing the Model Context Protocol (MCP).
|
||||||
`
|
`
|
||||||
## Overview
|
## Overview
|
||||||
mcp-memory acts as the persistent "brain" for the agy CLI agents. It tracks entities, relations, background tasks, engineering debt, and architectural decisions across sessions.
|
mcp-memory acts as the persistent "brain" for the agy CLI agents. It tracks entities, relations, background tasks, engineering debt, and architectural decisions across sessions.
|
||||||
`
|
`
|
||||||
To eliminate heavy Cross-OS I/O penalties when using WSL and Windows simultaneously, mcp-memory operates using a **Dual-Transport Leader/Stub Architecture**:
|
To eliminate heavy Cross-OS I/O penalties when using WSL and Windows simultaneously, mcp-memory operates using a **Dual-Transport Leader/Stub Architecture**:
|
||||||
* **The Server (mcp-memory-server)**: Runs natively on the Windows host. It binds to .0.0.0:3000, serving standard stdio to the primary Windows agy instance while simultaneously hosting an Axum HTTP server for secondary clients.
|
* **The Server (mcp-memory-server)**: Runs natively on the Windows host. It binds to .0.0.0:3000, serving standard stdio to the primary Windows agy instance while simultaneously hosting an Axum HTTP server for secondary clients.
|
||||||
* **The Stub (mcp-memory-stub)**: An ultra-lightweight proxy binary. WSL agy instances run this native Linux stub, which transparently pipes stdio JSON-RPC traffic over the network to the Windows HTTP server (http://127.0.0.1:3000), completely bypassing WSL NTFS mounts. It features full MPSC queue buffering and a WebSocket reconnect handshake (notifications/tools/list_changed) so that tools automatically refresh seamlessly without disconnecting the CLI if the background server restarts.
|
* **The Stub (mcp-memory-stub)**: An ultra-lightweight proxy binary. WSL agy instances run this native Linux stub, which transparently pipes stdio JSON-RPC traffic over the network to the Windows HTTP server (http://127.0.0.1:3000), completely bypassing WSL NTFS mounts. It features full MPSC queue buffering and a WebSocket reconnect handshake (notifications/tools/list_changed) so that tools automatically refresh seamlessly without disconnecting the CLI if the background server restarts.
|
||||||
`
|
`
|
||||||
## Quick Start & Usage
|
## Quick Start & Usage
|
||||||
|
|
||||||
### 1. Windows Installation (The Server & Stub)
|
### 1. Windows Installation (The Server & Stub)
|
||||||
@@ -49,49 +49,49 @@ just start
|
|||||||
just stop
|
just stop
|
||||||
just restart
|
just restart
|
||||||
``
|
``
|
||||||
Alternatively, you can gracefully shut down the server by invoking the executable with the --exit flag (mcp-memory-server.exe --exit) or hitting the HTTP endpoint (POST http://127.0.0.1:3000/shutdown).
|
Alternatively, you can gracefully shut down the server by invoking the executable with the --exit flag (mcp-memory-server.exe --exit) or hitting the HTTP endpoint (POST http://127.0.0.1:3000/shutdown).
|
||||||
`
|
`
|
||||||
**Step 2:** Update your Windows ~/.gemini/config/mcp_config.json to point the CLI to the ultra-lightweight stub (since the server is already running in the background):
|
**Step 2:** Update your Windows ~/.gemini/config/mcp_config.json to point the CLI to the ultra-lightweight stub (since the server is already running in the background):
|
||||||
`json
|
`json
|
||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"memory": {
|
"memory": {
|
||||||
"command": "C:\\Users\\reazul.ashraf\\.local\\bin\\mcp-memory-stub.exe",
|
"command": "C:\\Users\\reazul.ashraf\\.local\\bin\\mcp-memory-stub.exe",
|
||||||
"args": []
|
"args": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
`
|
`
|
||||||
### 2. WSL / Linux Installation (The Stub)
|
### 2. WSL / Linux Installation (The Stub)
|
||||||
Compile the ultra-lightweight stub as a native Linux binary directly from WSL (we do not use zigbuild):
|
Compile the ultra-lightweight stub as a native Linux binary directly from WSL (we do not use zigbuild):
|
||||||
```powershell
|
```powershell
|
||||||
just deploy-stub-wsl
|
just deploy-stub-wsl
|
||||||
```
|
```
|
||||||
`
|
`
|
||||||
Update your WSL ~/.gemini/config/mcp_config.json:
|
Update your WSL ~/.gemini/config/mcp_config.json:
|
||||||
`json
|
`json
|
||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"memory": {
|
"memory": {
|
||||||
"command": "/home/riz/.local/bin/mcp-memory-stub",
|
"command": "/home/riz/.local/bin/mcp-memory-stub",
|
||||||
"args": [
|
"args": [
|
||||||
"--target", "http://127.0.0.1:3000",
|
"--target", "http://127.0.0.1:3000",
|
||||||
"--wake-cmd", "powershell.exe -NoProfile -WindowStyle Hidden -Command \"Start-Process -FilePath 'C:\\Users\\reazul.ashraf\\.local\\bin\\mcp-memory-server.exe' -WindowStyle Hidden\""
|
"--wake-cmd", "powershell.exe -NoProfile -WindowStyle Hidden -Command \"Start-Process -FilePath 'C:\\Users\\reazul.ashraf\\.local\\bin\\mcp-memory-server.exe' -WindowStyle Hidden\""
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
*Note: The --wake-cmd ensures that if you start WSL while Windows is completely asleep, the Linux stub will use WSL interop to silently spin up the Windows daemon in the background before connecting.*
|
*Note: The --wake-cmd ensures that if you start WSL while Windows is completely asleep, the Linux stub will use WSL interop to silently spin up the Windows daemon in the background before connecting.*
|
||||||
`
|
`
|
||||||
## Push Safety Gates
|
## Push Safety Gates
|
||||||
The daemon also operates as a global safety gate for Git. Before pushing code, run:
|
The daemon also operates as a global safety gate for Git. Before pushing code, run:
|
||||||
`ash
|
`ash
|
||||||
mcp-memory gate verify
|
mcp-memory gate verify
|
||||||
`
|
`
|
||||||
This queries the daemon (via HTTP) to confirm if pre-push validation (like running tests via PrePushAuditor) has been cleared by the agent.
|
This queries the daemon (via HTTP) to confirm if pre-push validation (like running tests via PrePushAuditor) has been cleared by the agent.
|
||||||
`
|
`
|
||||||
## Brain Monitor Dashboard
|
## Brain Monitor Dashboard
|
||||||
The server hosts a live, real-time SPA dashboard called the **Brain Monitor**.
|
The server hosts a live, real-time SPA dashboard called the **Brain Monitor**.
|
||||||
|
|
||||||
@@ -109,60 +109,63 @@ http://127.0.0.1:3000/
|
|||||||
The memory server provides powerful, cross-OS native clipboard capabilities allowing the agent to inject and extract rich data. Because of the Leader/Stub architecture, all operations map directly to the Windows Host OS clipboard, regardless of whether the agent is running in Windows or WSL Ubuntu:
|
The memory server provides powerful, cross-OS native clipboard capabilities allowing the agent to inject and extract rich data. Because of the Leader/Stub architecture, all operations map directly to the Windows Host OS clipboard, regardless of whether the agent is running in Windows or WSL Ubuntu:
|
||||||
* **Text & HTML:** Read and write plain text or rich HTML formatting (using clipboard-win).
|
* **Text & HTML:** Read and write plain text or rich HTML formatting (using clipboard-win).
|
||||||
* **File Drops (CF_HDROP):** Read absolute file paths that were copied in Windows Explorer, or place file paths into the clipboard so the user can easily Ctrl+V them into IDEs or Explorer. (Note: Linux paths must be translated to \\wsl.localhost\... UNC paths first).
|
* **File Drops (CF_HDROP):** Read absolute file paths that were copied in Windows Explorer, or place file paths into the clipboard so the user can easily Ctrl+V them into IDEs or Explorer. (Note: Linux paths must be translated to \\wsl.localhost\... UNC paths first).
|
||||||
* **Images:** Read screenshots, and write generated images directly into the clipboard (using rboard).
|
* **Images:** Read screenshots, and write generated images directly into the clipboard (using rboard).
|
||||||
|
|
||||||
You can also programmatically query the live backing APIs:
|
You can also programmatically query the live backing APIs:
|
||||||
`curl http://127.0.0.1:3000/ping`
|
`curl http://127.0.0.1:3000/ping`
|
||||||
`curl http://127.0.0.1:3000/api/stats`
|
`curl http://127.0.0.1:3000/api/stats`
|
||||||
`curl http://127.0.0.1:3000/api/graph`
|
`curl http://127.0.0.1:3000/api/graph`
|
||||||
`curl http://127.0.0.1:3000/api/tasks`
|
`curl http://127.0.0.1:3000/api/tasks`
|
||||||
|
|
||||||
## Further Reading
|
## Further Reading
|
||||||
For a deep dive into the architecture, the **Redb LSM-tree** embedded database, `tantivy` indexing, and the HTTP SSE event loop, consult the design.md file in this repository.
|
For a deep dive into the architecture, the **Redb LSM-tree** embedded database, `tantivy` indexing, and the HTTP SSE event loop, consult the design.md file in this repository.
|
||||||
|
|
||||||
## Neovim Integration
|
## Neovim Integration
|
||||||
The linux-nvim and win-nvim MCP servers provide direct Msgpack-RPC communication with Neovim.
|
The linux-nvim and win-nvim MCP servers provide direct Msgpack-RPC communication with Neovim.
|
||||||
For this to work flawlessly across multiple Neovim instances (even split across Windows and WSL), you must load the provided gemini-integration.lua file in your Neovim init.lua:
|
For this to work flawlessly across multiple Neovim instances (even split across Windows and WSL), you must load the provided gemini-integration.lua file in your Neovim init.lua:
|
||||||
`lua
|
`lua
|
||||||
dofile("C:/Users/reazul.ashraf/workspace/rust/mcp-memory/gemini-integration.lua")
|
dofile("C:/Users/reazul.ashraf/workspace/rust/mcp-memory/gemini-integration.lua")
|
||||||
`
|
`
|
||||||
|
|
||||||
### The "Last Focused Wins" Architecture
|
### The "Last Focused Wins" Architecture
|
||||||
When you use the gemini-integration.lua script, Neovim acts as an active telemetry broadcaster.
|
When you use the gemini-integration.lua script, Neovim acts as an active telemetry broadcaster.
|
||||||
Whenever you alt-tab into a Neovim window (FocusGained) or switch files (BufEnter):
|
Whenever you alt-tab into a Neovim window (FocusGained) or switch files (BufEnter):
|
||||||
1. **Fallback Sync:** Neovim instantly writes its unique Session ID (Named Pipe / Unix Socket) to ~/.gemini/active_nvim.txt.
|
1. **Fallback Sync:** Neovim instantly writes its unique Session ID (Named Pipe / Unix Socket) to ~/.gemini/active_nvim.txt.
|
||||||
2. **WebSocket Telemetry:** Neovim pushes a JSON payload containing the active filename, cursor row, and column via a connectionless UDP datagram to the Rust server's port 3002 listener.
|
2. **WebSocket Telemetry:** Neovim pushes a JSON payload containing the active filename, cursor row, and column via a connectionless UDP datagram to the Rust server's port 3002 listener.
|
||||||
3. **UI Broadcast:** The Rust server updates the global state and broadcasts this over WebSockets (/ws) so that the Brain Monitor Dashboard can animate your active file live in the UI!
|
3. **UI Broadcast:** The Rust server updates the global state and broadcasts this over WebSockets (/ws) so that the Brain Monitor Dashboard can animate your active file live in the UI!
|
||||||
|
|
||||||
### Interactive UDP UI (New)
|
### Interactive UDP UI (New)
|
||||||
The UI script (`gemini-ui.lua`) provides a deeply integrated, non-blocking pair-programming experience using zero-latency UDP:
|
The UI script (`gemini-ui.lua`) provides a deeply integrated, non-blocking pair-programming experience using zero-latency UDP:
|
||||||
* **Interactive Prompts:** The agent can trigger native `vim.ui.select` or `vim.ui.input` dialogs in your editor. Your responses are instantly routed back to the agent via UDP.
|
* **Interactive Prompts:** The agent can trigger native `vim.ui.select` or `vim.ui.input` dialogs in your editor. Your responses are instantly routed back to the agent via UDP.
|
||||||
* **Smart Context (`<leader>ai`):** Highlighting code and pressing `<leader>ai` will package your prompt, file, and exact cursor/selection coordinates into a UDP packet and send it directly to the agent without spawning any subprocesses.
|
* **Smart Context (`<leader>ai`):** Highlighting code and pressing `<leader>ai` will package your prompt, file, and exact cursor/selection coordinates into a UDP packet and send it directly to the agent without spawning any subprocesses.
|
||||||
* **Ghost Text Diffs (Non-Destructive Review):** Instead of modifying your buffers directly, the agent uses `extmarks` to overlay proposed code changes as grayed-out "Ghost Text".
|
* **Ghost Text Diffs (Non-Destructive Review):** Instead of modifying your buffers directly, the agent uses `extmarks` to overlay proposed code changes as grayed-out "Ghost Text".
|
||||||
* Press `<leader>aa` (**A**gent **A**ccept) to apply the change and notify the agent.
|
* Press `<leader>aa` (**A**gent **A**ccept) to apply the change and notify the agent.
|
||||||
* Press `<leader>ar` (**A**gent **R**eject) to dismiss the change and notify the agent.
|
* Press `<leader>ar` (**A**gent **R**eject) to dismiss the change and notify the agent.
|
||||||
|
|
||||||
### Neovim MCP Tools
|
### Neovim MCP Tools
|
||||||
The LLM agent interacts with your active Neovim session using a dedicated set of MCP tools. *(Note: /nvim/telemetry is strictly a one-way webhook for Neovim; the LLM uses the tools below to interact).*
|
The LLM agent interacts with your active Neovim session using a dedicated set of MCP tools. *(Note: /nvim/telemetry is strictly a one-way webhook for Neovim; the LLM uses the tools below to interact).*
|
||||||
* **vim_goto_line**: Open files and jump cursors directly from the LLM.
|
* **vim_goto_line**: Open files and jump cursors directly from the LLM.
|
||||||
* **vim_set_diagnostics**: Push inline code review warnings as virtual text.
|
* **vim_set_diagnostics**: Push inline code review warnings as virtual text.
|
||||||
* **vim_get_active_buffer**: Read live, unsaved buffer contents.
|
* **vim_get_active_buffer**: Read live, unsaved buffer contents.
|
||||||
* **vim_get_cursor**: Fetch precise line/column coordinates.
|
* **vim_get_cursor**: Fetch precise line/column coordinates.
|
||||||
* **vim_get_visual_selection**: Read highlighted code blocks.
|
* **vim_get_visual_selection**: Read highlighted code blocks.
|
||||||
|
|
||||||
|
|
||||||
## Enhanced Developer Tools
|
## Enhanced Developer Tools
|
||||||
- **AST Skeleton Extractor (␍ead_file_skeleton)**: Uses ree-sitter to parse large code files (Rust, Python, TS/JS) and return an AST structural outline containing only Imports, Structs, Enums, Traits, and Functions, massively saving LLM tokens.
|
- **AST Skeleton Extractor (
|
||||||
|
ead_file_skeleton)**: Uses ree-sitter to parse large code files (Rust, Python, TS/JS, Java, C, C++, Go) and return an AST structural outline containing only Imports, Structs, Enums, Traits, and Functions, massively saving LLM tokens.
|
||||||
- **Git Context (get_active_worktree_context)**: Uses native git2 C-bindings to retrieve the active branch, modified files, and a truncated local patch diff without shell parsing overhead.
|
- **Git Context (get_active_worktree_context)**: Uses native git2 C-bindings to retrieve the active branch, modified files, and a truncated local patch diff without shell parsing overhead.
|
||||||
- **Rolling Log Watcher**: Background background polling endpoints (watch_process_logs / get_recent_logs) to instantly debug daemon crashes.
|
- **Rolling Log Watcher**: Background background polling endpoints (watch_process_logs / get_recent_logs) to instantly debug daemon crashes.
|
||||||
- **Clipboard Watch Mode ( oggle_clipboard_watch_mode)**: Background daemon thread that auto-ingests your Ctrl+C clipboard activity directly into Knowledge Graph StickyNotes while you debug.
|
- **Clipboard Watch Mode ( oggle_clipboard_watch_mode)**: Background daemon thread that auto-ingests your Ctrl+C clipboard activity directly into Knowledge Graph StickyNotes while you debug.
|
||||||
- **Ghost Text Previews (
|
- **Ghost Text Previews (
|
||||||
vim_set_preview)**: Pushes proposed LLM code diffs directly into Neovim buffers as ephemeral virtual text.
|
vim_set_preview)**: Pushes proposed LLM code diffs directly into Neovim buffers as ephemeral virtual text.
|
||||||
- [Prompting Guide & Effective Discourse](./PROMPTING_GUIDE.md): Learn how to phrase prompts to get the most out of the agent and memory server.
|
- [Prompting Guide & Effective Discourse](./PROMPTING_GUIDE.md): Learn how to phrase prompts to get the most out of the agent and memory server.
|
||||||
|
|
||||||
## T2R & Token Efficiency Enhancements (V2)
|
## T2R & Token Efficiency Enhancements (V2)
|
||||||
- **AST Node Replacer (␍eplace_ast_node)**: Uses ree-sitter to deterministically edit functions and structs without relying on exact line numbers or regex matching, ensuring zero syntax breaking edits.
|
- **AST Node Replacer (
|
||||||
|
eplace_ast_node)**: Uses ree-sitter to deterministically edit functions and structs without relying on exact line numbers or regex matching, ensuring zero syntax breaking edits.
|
||||||
- **Semantic Code Search (semantic_code_search)**: Integrates local vector embeddings to execute conceptual code searches instead of blind grep regexes, preventing hallucinated token consumption.
|
- **Semantic Code Search (semantic_code_search)**: Integrates local vector embeddings to execute conceptual code searches instead of blind grep regexes, preventing hallucinated token consumption.
|
||||||
- **Interactive Terminal Integrations (
|
- **Interactive Terminal Integrations (
|
||||||
vim_send_to_terminal)**: Proxies shell execution into visible Neovim splits so human operators can watch agents compile code, debug output, and intervene interactively.
|
vim_send_to_terminal)**: Proxies shell execution into visible Neovim splits so human operators can watch agents compile code, debug output, and intervene interactively.
|
||||||
- **Bird's Eye Architecture View (␍ead_directory_architecture)**: Generates a high-level summary of workspace directories using heuristic analysis to prevent LLMs from wasting tokens on reading dozens of files while exploring new repos.
|
- **Bird's Eye Architecture View (
|
||||||
|
ead_directory_architecture)**: Generates a high-level summary of workspace directories using heuristic analysis to prevent LLMs from wasting tokens on reading dozens of files while exploring new repos.
|
||||||
Reference in new issue
Block a user