Memory Oriented Machine — persistent memory for AI agents. A Go-based CLI tool and daemon that manages operational event ingestion, session tracking, and memory projection for AI agent systems.
This HTTP server exposes 7 tools via REST endpoints, but lacks critical MCP-compliant tool definitions. No explicit tool registration with schemas is visible in the provided source. Tool names are HTTP routes (POST /api/ingest/events), not verb_noun patterns. Descriptions exist but are generic and lack LLM-optimization guidance. Input parameters are documented in descriptions but lack formal JSON Schema with type constraints. Output schemas are not documented. Error handling is absent from the code sample. The server is a raw HTTP API, not an MCP server, it does not implement the MCP protocol at all.
Iterate and filter ledger records. Supports filtering by project_id, type_prefix, and offset range. Returns paginated results with optional next offset for continuation.
Get the current head offset of the ledger.
Health check endpoint that returns server status and version information.
Get metadata about the lens dashboard including total sessions and total memories.
List all sessions with summary information including interactions, memory count, tool usage, tokens, and cost. Results are sorted by start time (newest first).
Get detailed information for a specific session including tool calls breakdown and memory items.
Not an MCP server. This is a raw HTTP API with no MCP protocol implementation. No tool registration, no capabilities negotiation, no MCP message format.
Tool names are HTTP routes, not verb_noun patterns. LLMs cannot infer intent from 'POST /api/ingest/events', should be 'append_operational_events' or 'ingest_events'.
No formal JSON Schema for inputs. Parameters documented in prose descriptions only. GET /api/ingest/head and GET /api/ingest/health have empty input objects with no schema definition.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 27 | 2026-07-28+ | v2 |
Append one or many operational events to the ledger. Accepts both a single event object or an array of events. Each event must have a type prefixed with 'operational.' and include a project_id in the payload.
Output schemas not documented. LLMs cannot plan downstream calls without knowing response structure. Code shows response types (postResponse, getResponse, headResponse) but these are not exposed to the tool interface.
No error handling guidance. guardLocalOnly() returns HTTP 403 for cross-origin and invalid hosts, but no recovery hints for LLMs. No actionable error messages.