Synaptic MemoryCAUTION
Knowledge graph + MCP tool server for LLM agents with hybrid retrieval, live DB sync, Korean FTS, and memory feedback.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Default path: zero API calls at index time. Zero infra. Zero lock-in. A knowledge graph + MCP tool server for LLM agents, with hybrid retrieval, CDC-based live database sync, and Korean FTS built in.
[](https://pypi.org/project/synaptic-memory/) [](https://pypi.org/project/synaptic-memory/) [](LICENSE)
한국어 README
5-minute start
pip install "synaptic-memory[sqlite,korean,vector]" synaptic-quickstart --db quickstart.db
That command builds a tiny SQLite-backed graph and runs three searches — all without calling any LLM at indexing time. Omit --db for an in-memory, zero-dependency smoke test. Full source for the expanded example: examples/quickstart.py.
Why not just RAG?
Plain RAG usually answers from independent chunks. Synaptic builds a graph first, so an agent can search, follow relations, inspect structured rows, and remember which evidence helped.
It is not a vector database replacement. It is the graph and tool layer around your existing documents, SQL data, embedding endpoint, and agent runtime.
Build and search
import asyncio
from synaptic import SynapticGraph
async def main():
# Any data → knowledge graph (CSV, JSONL, directory)
graph = await SynapticGraph.from_data("./my_data/", preset="rag")
try:
result = await graph.search("my question")
print(result.nodes[0].a42a99ee2960OBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add synaptic-memory --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY} --env OPENAI_API_KEY=${OPENAI_API_KEY} -- uvx synaptic-memory{
"mcpServers": {
"synaptic-memory": {
"command": "uvx",
"args": [
"synaptic-memory"
],
"env": {
"ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
"DEEPSEEK_API_KEY": "${DEEPSEEK_API_KEY}",
"OPENAI_API_KEY": "${OPENAI_API_KEY}"
}
}
}
}Exposed tools (43)
29 read · 11 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
agent_aggregate_nodes | read | Aggregate nodes by property — GROUP BY + COUNT/SUM/AVG. |
agent_compare_search | read | Compare search — decompose multi-topic query and search in parallel. |
agent_count | read | Count how many nodes match a filter without fetching them. |
agent_deep_search | read | Deep search — search + expand + read documents in ONE call. |
agent_expand | read | Walk one graph hop out from a specific node. |
agent_explore_context | read | Explore the knowledge graph around a specific node, following semantic relationships. |
agent_filter_nodes | read | Filter nodes by property value — for structured/tabular data. |
agent_find_similar | read | Search knowledge with agent-aware intent for smarter results. |
agent_follow | read | Walk a specific edge type from a starting node. |
agent_get_document | read | Fetch a document with smart context control. |
agent_get_reasoning_chain | read | Get the full reasoning chain for a decision: decision → outcome → lessons learned. |
agent_join_related | read | Follow a foreign key to find related records. |
agent_list_categories | read | List all top-level categories in the knowledge graph. |
agent_log_action | read | Log a tool call or action within an agent session. |
agent_record_decision | read | Record a decision made by the agent with rationale and considered alternatives. |
agent_record_outcome | read | Record the outcome of a previous decision. Triggers Hebbian learning. |
agent_search | read | Multi-turn search — finds evidence for a natural-language query. |
agent_search_exact | read | Literal substring match for codes, IDs, or exact strings. |
agent_session_info | read | Inspect the current state of an agent session. |
agent_start_session | write | Start an agent work session. All subsequent actions can be linked to this session. |
agent_top_nodes | read | Return the top-N rows of ``table`` ordered by ``sort_by``. |
knowledge_add | write | Add a new knowledge node to the graph. |
knowledge_add_chunks | write | Ingest pre-chunked content (BYO-chunker workflow). |
knowledge_add_document | write | Add a long document to the graph with automatic chunking. |
knowledge_add_table | write | Ingest a structured table into the graph. |
knowledge_ask | read | Answer a question end-to-end with honest routing — cheap path first, agent only when needed. |
knowledge_backfill | read | Repair existing nodes that are missing embeddings or phrase hubs. |
knowledge_consolidate | write | Run memory consolidation — expire old L0 nodes, promote accessed ones. |
knowledge_export | read | Export the knowledge graph. |
knowledge_ingest_path | read | Ingest a file from the local filesystem into the *current* graph. |
knowledge_link | write | Create a link between two knowledge nodes. |
knowledge_merge_nodes | destructive | Merge ``drop_id`` into ``keep_id`` and delete ``drop_id``. |
knowledge_reinforce | read | Reinforce knowledge nodes after use (Hebbian learning). |
knowledge_remove | destructive | Delete a single node and cascade-remove its edges. |
knowledge_search | read | Search the knowledge graph for lessons, decisions, patterns, and past outcomes. |
knowledge_snapshot | read | Generate a markdown snapshot of the graph — for agent priming. |
knowledge_stats | read | Get knowledge graph statistics — node counts by kind and level, cache stats. |
knowledge_sync_from_database | write | Incrementally sync the graph with a live database (CDC). |
knowledge_unlink | destructive | Delete edges from ``source_id`` to ``target_id``. |
knowledge_update | write | Update fields of an existing knowledge node. |
knowledge_update_edge | write | Change weight and/or kind of existing edge(s) between two nodes. |
ontology_define_type | write | Define or update a custom node/edge type in the ontology. |
ontology_query_schema | read | Query the ontology schema. Returns type definitions including inherited properties. |
Trust audit
CAUTIONgrade D · trust 61/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- declared (6 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- pinned
- Secrets in source
- found
Findings (25)
gt_datasets.xlsx
__init__.cpython-312.pyc
memory.cpython-312.pyc
__init__.cpython-312.pyc
classifier_rules.cpython-312.pyc
mod = importlib.import_module(_LAZY_V012[name])
help="Embedding API base URL (e.g. http://14.6.220.78:11434/v1)",
print(f"✓ PARITY: |ΔMRR| = {abs(mrr_delta):.4f} < 0.05 — Kuzu matches Memory.")synaptic-mcp --db knowledge.db --source-dsn postgresql://user:pw@host/db
a = deterministic_row_id("postgres://u:pw1@h/d", "products", "P001")b = deterministic_row_id("postgres://u:pw2@h/d", "products", "P001")knowledge_merge_nodes, knowledge_remove, knowledge_unlink
return hashlib.md5(f.read()).hexdigest()
return hashlib.md5(path.encode()).hexdigest()[:16]
return hashlib.md5(text.encode("utf-8")).hexdigest()[:16]h = hashlib.md5(f"{type_key}\x00{normalized}".encode()).hexdigest()[:16]h = hashlib.md5(combined.encode()).hexdigest()[:16]
--embed-url http://14.6.220.78:11434/v1 \
--reranker-url http://14.6.220.78:8180
--embed-url http://14.6.220.78:11434/v1 \
- LLM base URL: http://127.0.0.1:18134/v1
f"{'nDCG@K':>7} | {'P@K':>6} | {'R@K':>6} | {'Avg ms':>7} | {'ΔMRR':>7}"eval/data/finreg/raw.jsonl
tests/benchmark/data/autorag_retrieval.json
tests/benchmark/data/hotpotqa.json
Gates applied: no_behavioural_pass.
a42a99ee2960full audit observations/trust-audit/mcp-server/plateerlab__synaptic-memory.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | a42a99ee2960 | CAUTION | D | 61 | first audit |
Questions
What is the Synaptic Memory MCP server?
Knowledge graph + MCP tool server for LLM agents with hybrid retrieval, live DB sync, Korean FTS, and memory feedback.
What tools does Synaptic Memory expose?
43 in total: 29 read-only, 11 that write, and 3 that can delete or overwrite (knowledge_merge_nodes, knowledge_remove, knowledge_unlink). Every one is listed on this page with its risk.
Is Synaptic Memory safe to connect to an agent?
With care. The audit graded it D (61/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Synaptic Memory need?
It reads ANTHROPIC_API_KEY, DEEPSEEK_API_KEY and OPENAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (a42a99ee2960), read on 2026-10-08. The repository is watched and re-audited when it changes.