Skip to main content
Glama
sovantica

engrava-mcp

by sovantica

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ENGRAVA_DB_PATHNoPath to a bare SQLite database file. Zero-config quick-start; semantic search is inert without embedding provider.
ENGRAVA_MCP_CONFIGNoPath to an engrava.yaml configuration file. Recommended for full configuration including embedding provider.
ENGRAVA_MCP_READ_ONLYNoWhen set to '1', 'true', or 'yes', the write tools are not registered, exposing a read-only surface.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_thoughtB

Fetch a single thought by its identifier.

search_memoryA

Hybrid ranked search (lexical + vector + recency) over stored memory. Returns ranked thought identifiers with scores and the search backends that were available. Optionally narrow the ranked hits by thought type, lifecycle status, or priority; these filters are applied after ranking, so a filtered call may return fewer than top_k results and reports how many ranked hits were dropped. Archived thoughts are excluded from ranking by default; set lifecycle_status=ARCHIVED to search them instead. For an exhaustive, unranked, paginated listing by those same fields, use list_memory instead. Recency takes part in the ranking only when you pass recency_now: an ISO-8601 timestamp giving the moment to measure age against (transaction time).

list_memoryA

List stored thoughts with optional filters and pagination. Unlike search_memory this does no relevance ranking and returns no scores: it is a plain browse over memory, ordered by highest cognitive cycle first; thoughts written through this server all carry cycle 0, so their relative order is unspecified and does not represent recency. Filter by thought type, lifecycle status, priority, and an updated-cycle range; page through results with limit and offset. Use this to enumerate memory by structured fields; use search_memory when you want the best matches for a query.

search_keywordsA

Full-text BM25 keyword search over stored memory. Returns ranked thought identifiers with scores. Archived thoughts are never returned; this tool has no filter to widen that.

query_memoryA

Run a structured MindQL FIND query over stored memory, e.g. "FIND thoughts WHERE lifecycle_status = 'ACTIVE' LIMIT 10". Only the FIND command is supported, and only against thoughts, edges, or actions — FIND embeddings is refused, since a stored embedding is raw vector bytes with no JSON representation. Results are capped at 5000 rows: a query with no LIMIT clause gets this cap injected, and a LIMIT above it is refused rather than truncated. The limit argument, if given, always replaces any LIMIT already in the query text — the two are never combined.

memory_statsA

Return aggregate statistics about the memory store: thought and edge counts and total storage size. If the store's metrics collection is disabled, the counts in this response are zero-filled placeholders rather than a real measurement — check the 'measured' flag to tell the two cases apart.

get_edgesA

Fetch the edges connected to a thought by its identifier. Choose the direction: OUT for edges leaving the thought, IN for edges arriving at it, or BOTH (the default) for either. Returns full edge records including their metadata, and a count. With limit, it returns at most that many edges, the highest-weight ones first; without it, it returns every edge. This is the read companion to link_thoughts and delete_edge.

list_edgesA

List stored edges with optional filters. Filter by edge type, by knowledge source, and by edge metadata: metadata_equals takes a mapping of field name to a required value (exact match on every pair), and metadata_in takes a mapping of field name to a list of allowed values (the field must equal one of them). Metadata keys are simple field names and values are JSON scalars. Returns full edge records including their metadata, and a count.

store_thoughtB

Create a new thought node. Provide its essence (short canonical text) and full content; optionally set the thought type, priority, source, and confidence. Returns the created thought's identifier and key fields.

update_thoughtB

Update fields of an existing thought by identifier. Only the fields you supply change; omit the rest. Can change essence, content, priority, lifecycle status, and confidence.

link_thoughtsA

Create a typed edge between two existing thoughts, identified by their identifiers. Choose the edge type and optionally a weight in [0.0, 1.0]. Optionally attach a metadata object (simple field names to JSON scalars) that list_edges can later filter on. Both endpoints must already exist. An edge is unique per (source, target, type): linking the same pair with the same type twice is rejected rather than ignored.

delete_thoughtA

Delete a thought by its identifier. Use this to remove a memory that is wrong or no longer wanted. This cascades: the thought's edges, embeddings, and action records are deleted with it. Returns whether a thought was removed; deleting an identifier that does not exist is not an error and simply reports that nothing was removed.

delete_edgeA

Delete an edge between two thoughts by its identifier. Use this to remove a relationship that is wrong or no longer wanted. Returns whether an edge was removed; deleting an identifier that does not exist is not an error and simply reports that nothing was removed.

Prompts

Interactive templates invoked by user choice

NameDescription
summarize_recent_memorySummarise the thoughts ordered by highest cognitive cycle first; thoughts written through this server all carry cycle 0, so their relative order is unspecified and does not represent recency. Optionally set how many to consider.
find_relatedFind and synthesise stored thoughts related to a topic.
reflect_on_topicReflect on what stored memory holds about a topic.

Resources

Contextual data attached and managed by the client

NameDescription
statsAggregate thought and edge counts and total storage size. Counts are zero-filled placeholders (see 'measured') if metrics collection is disabled.
recentReturns the stored thoughts as a JSON document. The thoughts are ordered by highest cognitive cycle first; thoughts written through this server all carry cycle 0, so their relative order is unspecified and does not represent recency.

TDQS

A3.8/5.0

Scored across 13 tools

Disambiguation4/5

The four read paths (search_memory, search_keywords, list_memory, query_memory) overlap conceptually, but each description explicitly contrasts itself with the others (ranked vs. unranked, hybrid vs. BM25, structured MindQL) so an agent can pick correctly. Similarly, get_edges (edges touching one thought) vs. list_edges (global filtered edge browse) is distinguishable but confusable on first read.

Naming Consistency3/5

Most names follow verb_noun, but conventions drift across entities: thoughts use store/get/update/delete_thought while edges use link_thoughts plus delete_edge, and memory_stats is the one noun-only name. The entity vocabulary also shifts between 'thought' and 'memory' (store_thought vs list_memory/search_memory), which muddies the pattern.

Tool Count5/5

13 tools sit comfortably in the well-scoped range for a memory-graph server, with reads, writes, deletes, and analytics each represented. No tool looks like filler or a near-duplicate of another.

Completeness4/5

Thoughts have full create/read/update/delete plus ranked, keyword, structured, and paged listing, and edges have create/read/delete; deletion cascades are documented. The notable gap is that edges have no update operation, so weight or metadata on an existing edge cannot be changed without deleting and re-linking it.

Maintenance

ActivitySlowing
ResponsivenessNo issues