1. Conduid
  2. RAG
  3. Engrama
MCP server · RAG

Engrama

A memory graph designed for the agent that uses it, not the human who feeds it. Engrama reconstructs context from associations on demand, replacing the "stuff everything into the prompt" reflex with targeted graph traversal. SQLite default, Neo4j optional.

34Low

Scored a month ago · breakdown

About Engrama

Engrama is an MCP server in the RAG category: a memory graph designed for the agent that uses it, not the human who feeds it. Engrama reconstructs context from associations on demand, replacing the "stuff everything into the prompt" reflex with targeted graph traversal. SQLite default, Neo4j optional.

Install

From source
git clone https://github.com/scops/engrama

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (14)

engrama_approve_insightApprove or dismiss a pending Insight after human review.
ParameterTypeDescription
actionstring'approve' or 'dismiss'.
title *stringExact title of the Insight.
engrama_contextRetrieve a node and its neighbourhood up to N hops. Use this to build rich context before answering a question — e.g. fetch the user's Person node to see their projects, or a Technology node to see what it connects to. Works even for isolated nodes (returns the node with an empty neighbours list).
ParameterTypeDescription
hopsintegerMaximum relationship depth to traverse.
label *stringLabel of the starting node — one of: CTF, Client, Concept, Course, Dataset, Decision, Domain, Exercise, Experiment, Gear, Insight, Location, Material, Model, Person, Photo, Pipeline, Problem, Project, Species, Target, Technique, Technology, Tool, Vulnerability.
name *stringName of the starting node.
engrama_gdpr_forgetPermanently erase **the caller's own** memory (GDPR, Spec 001 US-3).
ParameterTypeDescription
modestring'dry-run' (default, safe) reports what would be erased without deleting anything; 'apply' permanently erases the caller's own identity. There is no undo and no server-side backup.
engrama_ingestRead a document, conversation, or text and return its content with entity extraction guidance. After calling this tool, use the returned content and extraction prompt to identify entities and relationships, then call ``engrama_remember`` with inline relations for each entity.
ParameterTypeDescription
context_hintstringOptional hint about the context (e.g. project name, domain, course). Helps guide entity extraction.
source *stringContent to ingest. Either a vault-relative path to a note (e.g. '10-projects/websocket-debugging.md') or raw text content.
source_typestringType of source: 'note' (vault path — will be read), 'text' (raw text content), or 'conversation' (conversation transcript).
engrama_reflectDetect cross-entity patterns in the memory graph. Call this periodically (e.g. at the end of a session or when the user asks for insights) to discover solution transfers between projects, shared technologies, training opportunities, technique transfers, concept clusters, stale knowledge, and under-connected nodes.

Parameters not published.

engrama_reindexFind and repair nodes that are missing their vector embedding.
ParameterTypeDescription
dry_runbooleanOnly meaningful for mode='apply'. Default true (simulate). Pass false explicitly to actually re-embed and write.
limitintegerMaximum number of vector-less nodes to process in this call.
mode *stringOne of 'detect' | 'classify' | 'apply'. Run them in that order.
engrama_relateConnect two nodes with a typed relationship. Always call this right after engrama_remember to wire the new node into the graph. Also use it to record newly discovered connections between existing nodes. Both endpoints must already exist (create them first with engrama_remember if needed).
ParameterTypeDescription
from_label *stringLabel of the source node — one of: CTF, Client, Concept, Course, Dataset, Decision, Domain, Exercise, Experiment, Gear, Insight, Location, Material, Model, Person, Photo, Pipeline, Problem, Project, Species, Target, Technique, Technology, Tool, Vulnerability.
from_name *stringName of the source node.
rel_type *stringRelationship type — one of: ABOUT, APPLIES, BELONGS_TO, CAUSED_BY, COMPOSED_OF, CONTRADICTS, COVERS, DEPENDS_ON, DOCUMENTS, EVALUATES, EXECUTED_WITH, EXPLOITS, FEATURES, FEEDS, FOR, HAS, HAS_MATERIAL, IMPLEMENTS, INCLUDES, INFORMED_BY, INHABITS, INSTANCE_OF, INVOLVES, IN_DOMAIN, LINKS_TO, ORIGIN_OF, PERFORMS, PRACTICES, PREREQUISITE_OF, RELATED_TO, REPLACES, REQUIRES, RUNS, SERVES, SHOT_WITH, SIMILAR_TO, SOLVED_BY, SUBSET_OF, TAKEN_AT, TARGETS, TEACHES, TRAINS_ON, USES.
to_label *stringLabel of the target node — one of: CTF, Client, Concept, Course, Dataset, Decision, Domain, Exercise, Experiment, Gear, Insight, Location, Material, Model, Person, Photo, Pipeline, Problem, Project, Species, Target, Technique, Technology, Tool, Vulnerability.
to_name *stringName of the target node.
engrama_rememberStore a piece of knowledge as a node in the memory graph.
ParameterTypeDescription
force_newbooleanCreate the node even if it looks like an existing one. Only matters when the server runs with ENGRAMA_REMEMBER_DEDUPE=block; otherwise possible duplicates are reported, never refused.
label *stringNode label — one of: CTF, Client, Concept, Course, Dataset, Decision, Domain, Exercise, Experiment, Gear, Insight, Location, Material, Model, Person, Photo, Pipeline, Problem, Project, Species, Target, Technique, Technology, Tool, Vulnerability.
properties *objectNode properties. Must include 'name' (or 'title' for Decision/Problem). For rich retrieval, include enrichment fields: - 'summary': 2–3 sentence overview — what this is, why it matters - 'details': comprehensive context — techniques, decisions, approaches, alternatives, key examples. The richer this field, the more useful the memory becomes. - 'tags': freeform list for filtering, e.g. ["active-directory", "credential-access", "windows"] - 'source': how this knowledge was captured ("conversation", "ingest", "manual", "sync") - 'status': current state ("active", "resolved", "superseded") Example of a GOOD node: {"name": "kerberoasting-lab", "summary": "Hands-on lab demonstrating Kerberoasting against AD service accounts using Rubeus and Hashcat, with detection via Event 4769.", "details": "Students request TGS tickets for SPNs with Rubeus kerberoast, crack offline with Hashcat. Covers RC4 vs AES crackability, detection via Event 4769 anomalies. Defense: gMSA, AES-only policy, honey tokens.", "tags": ["active-directory", "credential-access", "lab"], "source": "conversation"} Example of a BAD (too thin) node: {"name": "kerberoasting-lab", "description": "Lab about kerberoasting"}
relationsobjectOptional relations to create in the same call. Format: {"REL_TYPE": ["target_name", ...]}. Example: {"USES": ["Python"], "IN_DOMAIN": ["teaching"], "FOR": ["Acme Corp"]}. Targets are matched by name; a missing target is created as a stub. By default the stub's label is inferred from the relation type, which is lossy. To pin it, pass an object instead of a string: {"RELATED_TO": [{"name": "Python", "label": "Tool"}]}.
engrama_searchSearch the memory graph. Use this at the START of every session to load context relevant to the current topic, and whenever you need to check whether a node already exists before creating it.
ParameterTypeDescription
limitintegerMaximum results to return.
query *stringLucene-syntax search string (e.g. 'neo4j', 'Python framework').
engrama_statusReturn a snapshot of the running Engrama MCP server's configuration.

Parameters not published.

Show all 14 tools
engrama_surface_insightsRetrieve pending Insights for human review. Call this after engrama_reflect, or periodically, to show the user patterns the graph has detected. Present each Insight and ask the user to approve or dismiss it — never act on an Insight without explicit approval.
ParameterTypeDescription
limitintegerMaximum number of pending Insights to return.
queryanyOptional: return only pending Insights semantically related to this query (same cosine gate as the search proactive hint). Ignored if ``title`` is given.
titleanyOptional: return only the pending Insight with this exact title.
engrama_sync_noteSync a single note from Engrama's internal Obsidian vault to the graph.
ParameterTypeDescription
dry_runbooleanWhen true, do not write to the graph or inject `engrama_id` into the note's frontmatter. Return the same JSON shape as a real sync, with a `would_*` view of what the operation would have done. Useful to preview a sync against a different vault before committing.
path *stringVault-relative path to the note, e.g. '10-projects/engrama.md'.
engrama_sync_vaultScan Engrama's internal Obsidian vault and reconcile all notes.
ParameterTypeDescription
dry_runbooleanWhen true, do not write to the graph or inject `engrama_id` into any note's frontmatter. Return the same JSON shape as a real sync, with counts of what *would* be created/updated/skipped and the list of files that would receive an `engrama_id` injection. Useful to preview the impact before committing to a full scan.
folderstringOptional folder to restrict the scan (vault-relative). Empty string scans the entire vault.
engrama_write_insight_to_vaultAppend an approved Insight as a section in an Obsidian note.
ParameterTypeDescription
target_note *stringRelative path to the Obsidian note to append to.
title *stringExact title of the approved Insight.

Ask AI

✦

Ask AI about Engrama

Powered by Claude · Grounded in docs

I know everything about Engrama. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

6 checks have not been run yet.

Questions

About Engrama

How do I install Engrama?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is Engrama safe to use with an AI agent?

Its trust score is 34 out of 100 (low). Conduid hasn't run static security checks on this repository yet, so review the source yourself before granting it credentials. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Engrama still maintained?

Conduid hasn't recorded a commit date for this repository yet. Check the repository directly for recent activity.