🤖 MCP Integration Architecture¶
Spector's built-in Model Context Protocol (MCP) server gives any AI agent instant, in-process access to SIMD-accelerated cognitive memory — with zero network overhead.
Overview¶
The Model Context Protocol (MCP) is Anthropic's open standard for connecting AI agents to external data sources. Instead of writing custom glue-code with orchestration frameworks, agents connect directly to an MCP server via JSON-RPC and autonomously invoke tools.
Spector's MCP server runs in-process. When Claude Desktop or Cursor calls memory_recall, the request goes from JSON-RPC → Java method call → SIMD kernel — never touching a network socket. This makes Spector 23–113× faster than Python-based MCP servers that route through HTTP/gRPC.
Spector supports two MCP transports:
- Stdio — JSON-RPC 2.0 over stdin/stdout, for CLI agents (Claude Desktop, Cursor)
- Streamable HTTP — JSON-RPC 2.0 over HTTP at
/mcp, for remote/web agents (MCP 2025-03-26 spec)
Architecture¶
graph LR
subgraph "AI Agent (Claude, Cursor, etc.)"
Agent["\ud83e\udd16 AI Agent"]
end
subgraph "spector-mcp (in-process)"
StdioTransport["\ud83d\udce1 StdioTransport<br/><i>JSON-RPC 2.0 — stdin/stdout</i>"]
HttpTransport["\ud83c\udf10 ArmeriaMcpTransport<br/><i>Streamable HTTP — POST/GET/DELETE /mcp</i>"]
Server["\u26a1 SpectorMcpServer<br/><i>Thin orchestrator</i>"]
subgraph Providers
TR["\ud83d\udd27 SpectorToolRegistry"]
RP["\ud83d\udcc4 SpectorResourceProvider"]
PP["\ud83d\udcac SpectorPromptProvider"]
end
subgraph "Cognitive Memory Tools — 16"
M1["MemoryRememberTool"]
M2["MemoryRecallTool"]
M3["MemoryForgetTool"]
M4["MemoryIntrospectTool"]
M5["... 12 more"]
end
subgraph Foundation
SB["ToolSchemaBuilder"]
RF["ResultFormatter"]
TH["McpToolHandler<br/><i>Abstract base</i>"]
end
end
subgraph "spector-memory"
Memory["🧠 SpectorMemory"]
end
subgraph "spector-core"
SIMD["🔬 SIMD Kernels<br/><i>AVX2/AVX-512/NEON</i>"]
end
Agent -- "stdin/stdout" --> StdioTransport
Agent -- "HTTP POST /mcp" --> HttpTransport
StdioTransport --> Server
HttpTransport --> Server
Server --> TR & RP & PP
TR --> M1 & M2 & M3 & M4 & M5
M1 & M2 & M3 & M4 & M5 --> TH
M1 & M2 & M3 & M4 & M5 --> SB
M1 & M2 & M3 & M4 & M5 --> RF
M1 & M2 & M3 & M4 & M5 --> Memory
Memory --> SIMD Data Flow¶
sequenceDiagram
participant Agent as 🤖 AI Agent
participant MCP as 📡 MCP Transport (stdio / Streamable HTTP)
participant Handler as 🔧 McpToolHandler
participant Memory as 🧠 SpectorMemory
participant SIMD as 🔬 SIMD Kernel
Agent->>MCP: tools/call {"name": "memory_recall", "arguments": {"query": "..."}}
MCP->>Handler: MemoryRecallTool.execute(args)
Note over Handler: requireString(args, "query")<br/>optionalInt(args, "top_k", 5)
Handler->>Memory: memory.recall(query, topK)
Memory->>SIMD: Fused scoring: sim × importance × decay (off-heap MemorySegment)
SIMD-->>Memory: ScoredMemory[] (ultra-fast)
Memory-->>Handler: RecallResult
Handler-->>MCP: CallToolResult (JSON-RPC)
MCP-->>Agent: tools/call response Module Structure¶
spector-mcp/src/main/java/com/spectrayan/spector/mcp/
├── SpectorMcpServer.java ← Thin orchestrator (assembly only)
├── SpectorMcpMain.java ← CLI entry point
├── schema/
│ └── ToolSchemaBuilder.java ← Type-safe fluent builder for JSON schemas
├── tools/
│ ├── McpToolHandler.java ← Abstract base with timing, error handling
│ ├── SpectorToolRegistry.java ← Tool discovery & registration
│ └── memory/ ← 16 cognitive memory tools
│ ├── MemoryToolHandler.java ← Memory-aware base handler
│ ├── MemoryRememberTool.java
│ ├── MemoryRecallTool.java
│ ├── MemoryScratchpadTool.java
│ ├── MemoryReinforceTool.java
│ ├── MemoryForgetTool.java
│ ├── MemoryStatusTool.java
│ ├── MemoryIntrospectTool.java
│ ├── MemorySuppressTool.java
│ ├── MemoryResolveTool.java
│ ├── MemoryReminderTool.java
│ ├── MemoryWhyNotTool.java
│ ├── MemoryComputeImportanceTool.java
│ ├── MemoryInspectTool.java
│ ├── MemoryExportTool.java
│ ├── MemoryBrowseTool.java
│ └── MemorySalienceTool.java
├── resources/
│ └── SpectorResourceProvider.java ← Resource definitions & handlers
├── prompts/
│ └── SpectorPromptProvider.java ← Prompt templates & handlers
└── util/
└── ResultFormatter.java ← Search result formatting utilities
Tool Reference¶
The MCP server exposes 16 cognitive memory tools. All are registered when cognitive memory is enabled (spector.memory.enabled: true). Memory tools embed text to store and recall memories, so an embedding provider (e.g., Ollama) must be configured.
| Tool | Key parameters | Description |
|---|---|---|
memory_remember | text (req), tier, tags, source, interest/challenge/urgency, valence, arousal | Store a memory with cognitive metadata (ID auto-generated) |
memory_recall | query (req), top_k, profile, synaptic_filter, min_importance, point_in_time | Fused cognitive recall across all tiers |
memory_scratchpad | text (req) | Quick-write a short-lived note to working memory |
memory_reinforce | memory_id (req), valence (req) | Report a positive/negative outcome for a memory |
memory_forget | memory_id (req) | Tombstone a memory by ID |
memory_status | (none) | Memory tier counts and persistence info |
memory_introspect | topic (req) | Metamemory self-analysis on a topic |
memory_suppress | memory_id (req), action (req), reason | Suppress or unsuppress a memory from recall |
memory_resolve | memory_id (req), resolved (req) | Mark a memory resolved/unresolved (Zeigarnik) |
memory_reminder | text (req), delay_seconds (req), tags | Schedule a time-triggered reminder |
memory_why_not | memory_id (req), query (req), top_k | Explain why a memory was not recalled |
memory_compute_importance | text (req), interest/challenge/urgency, valence, arousal | Preview importance without storing |
memory_inspect | id (req) | Full cognitive X-ray of a memory |
memory_export | format | Bulk export of all live memories |
memory_browse | tags (req) | Browse memories by tag (AND semantics, no vector search) |
memory_salience | operation (req), profile fields | Inspect and tune the active salience profile |
Extending the MCP Server¶
Adding a New Tool¶
Every tool extends McpToolHandler, which handles timing, error handling, and argument parsing. You implement four methods:
public abstract class McpToolHandler {
abstract String name();
abstract String description();
abstract Map<String, Object> inputSchema();
abstract CallToolResult execute(Map<String, Object> args);
// Base class automatically provides:
// - Timing wrapper (nanoTime → milliseconds)
// - Structured error handling with logging
// - Argument parsing: requireString(), optionalInt(), optionalString()
// - Result factories: textResult(), errorResult()
}
Define the tool schema with ToolSchemaBuilder:
var schema = ToolSchemaBuilder.object()
.requiredString("query", "Natural language query for memory recall.")
.optionalInt("top_k", "Number of results to return.", 5)
.optionalString("profile", "Cognitive scoring profile preset.", "")
.build();
Register the tool in SpectorToolRegistry.handlers() — one line per tool:
handlers.add(new MemoryRememberTool(memory));
handlers.add(new MemoryRecallTool(memory));
// ... 14 more cognitive memory tools
// handlers.add(new YourNewTool(memory)); ← just add here
Performance: Why In-Process Wins¶
The Python MCP Tax¶
Python MCP servers introduce multiple layers of overhead:
graph LR
A1["🤖 Agent"] --> B1["JSON-RPC"]
B1 --> C1["🐍 Python process"]
C1 --> D1["Deserialize"]
D1 --> E1["HTTP/gRPC round-trip"]
E1 --> F1["Vector DB"]
F1 --> G1["Serialize response"]
G1 --> H1["JSON-RPC"]
H1 --> I1["🤖 Agent"]
style C1 fill:#e74c3c,color:white
style E1 fill:#e74c3c,color:white Total: 2–10ms per query (network + GIL + serialization)
Spector's Zero-Copy Path¶
graph LR
A2["🤖 Agent"] --> B2["JSON-RPC"]
B2 --> C2["☕ Virtual Thread"]
C2 --> D2["SpectorMemory.recall()"]
D2 --> E2["Off-heap MemorySegment"]
E2 --> F2["SIMD registers"]
F2 --> G2["✅ Results"]
style C2 fill:#00b894,color:white
style E2 fill:#00b894,color:white
style G2 fill:#00b894,color:white Total: 88µs p50 per query (23–113× faster)
| Bottleneck | Python MCP | Spector MCP |
|---|---|---|
| Network round-trip | 500–2,000µs | 0µs (in-process) |
| JSON serialization | 100–500µs | 0µs (direct Java objects) |
| Python GIL contention | Blocks concurrent queries | 0µs (Virtual Threads) |
| GC pressure | Heap allocation per query | 0µs (off-heap Panama) |
| Search computation | ~100µs (native C++) | ~100µs (Panama SIMD) |
| Total | 2,000–10,000µs | 88µs p50 |
Security Considerations¶
Warning
Several tools mutate memory state — memory_remember, memory_forget, memory_suppress, memory_reinforce, memory_resolve, and memory_scratchpad. In production environments, consider:
- Restricting write tools via OAuth 2.1 scopes (
memory:write) — Spector Enterprise filters tools atlist_toolstime and enforces them per request - Implementing namespace/tenant-level access control
- Rate limiting write operations
- Auditing all write operations
See Also¶
- MCP Server Usage Guide — Practical setup for Claude Desktop, Cursor, and custom agents
- Architecture Overview — Full system architecture
- Core Concepts — HNSW, BM25, RRF deep-dives