Skip to main content
Glama
AlekseiUL

Agent Memory Control Plane

by AlekseiUL

Agent Memory Control Plane

English · 🇷🇺 Полное описание на русском

A local-first governance layer for AI-agent memory: deterministic routing, explicit ownership, review before promotion, scope-aware retrieval, conflict handling, and auditable receipts.

По-русски: локальная система управления памятью AI-агентов с явными владельцами истины, проверкой перед записью, разграничением доступа, обработкой конфликтов и аудитом. Открыть полное русское описание →

This is not another vector-memory demo. It answers the harder operational questions:

  • What is worth remembering?

  • Which source owns the truth?

  • Where should a proposed change be written?

  • Who may read or promote it?

  • Why did a record appear in retrieval?

  • What happens when two sources disagree?

Why it exists

A single assistant can survive on chat history. A multi-agent team cannot. Runtime messages, stable user preferences, operating procedures, team policy, and public knowledge have different owners, retention rules, and visibility boundaries. Mixing them into one searchable bucket creates stale answers, privacy leaks, and silent overrides.

Agent Memory Control Plane makes that lifecycle explicit and testable.

Related MCP server: Procheiron

Architecture

flowchart LR
  I[Observation or proposed fact] --> C[Deterministic classification]
  C -->|forbidden or ephemeral| X[Reject as non-memory]
  C -->|allowed| W[Writeback route]
  W --> K[Memory candidate]
  K --> R{Reviewer and policy gate}
  R -->|lower precedence| F[Conflict receipt]
  R -->|approved| S[Canonical source]
  S --> P[(SQLite canonical state)]
  P --> Q[(FTS5 read-only projection)]
  Q --> A[Scope-aware search]
  A --> E[Explainable retrieval receipt]
  S -->|newer accepted record| U[Supersession, never silent delete]

The CLI and the isolated MCP adapter both pass through the same ControlPlane mutation boundary. Policy is packaged as YAML; contracts are expressed as JSON Schemas; SQLite stores canonical state and an append-only audit ledger; FTS5 is a rebuildable read-only projection.

What is real and useful here

This repository is a runnable reference implementation, not a slide deck or scaffold. It demonstrates:

  1. Deterministic classification and writeback routing for stable facts, procedures, governance, and non-memory runtime evidence.

  2. Candidate-first writes: no model or agent writes directly into canonical memory.

  3. Capability and provenance gates: actor, source, owner, and scope must match policy both at proposal and promotion time.

  4. Source precedence: lower-priority memory cannot overwrite higher-priority truth, even with identical content.

  5. Conflict and supersession receipts instead of silent merge or deletion.

  6. Scope-aware retrieval for private, team, and public records.

  7. Explainable results with source, owner, scope, confidence, update time, retrieval reason, writeback target, and conflict/staleness signals.

  8. Local-only operation with SQLite/FTS5 and no mandatory cloud, graph database, or embedding service.

  9. Seven MCP tools that reuse the same policy boundary as the CLI.

  10. Synthetic runnable scenarios for a personal assistant, a multi-agent team, and a public/private boundary.

Guarantees and non-guarantees

What the baseline enforces

  • fail-closed actor, source, owner, and scope checks;

  • dry-run by default for proposals and promotions;

  • explicit --apply for mutation;

  • no automatic merge, delete, or lower-priority override;

  • no raw-session indexing;

  • no direct LLM write path;

  • local-only storage in the baseline;

  • auditable proposal and promotion events;

  • reproducible health and privacy checks.

What it does not promise

No memory system can honestly guarantee that an agent will never forget or that infrastructure will always work. This project reduces silent forgetting and drift by making ownership, promotion, retrieval, and health visible. Production operators still need backups, monitoring, policy review, and tested recovery.

It also does not provide semantic similarity in the baseline, cloud synchronization, automatic connector installation, or a production database migration framework.

Quick start

Requirements: Python 3.11+.

python3 -m venv .venv
.venv/bin/python -m pip install .
.venv/bin/amcp init
.venv/bin/amcp classify --dry-run "A procedure with step one"
.venv/bin/amcp propose greeting "Public onboarding guide" \
  --source public-knowledge --owner researcher --scope public \
  --actor researcher --apply
.venv/bin/amcp promote 1 --reviewer reviewer --apply
.venv/bin/amcp search onboarding --actor public_reader
.venv/bin/amcp explain 1 --actor public_reader
.venv/bin/amcp conflicts
.venv/bin/amcp audit
.venv/bin/amcp doctor
.venv/bin/amcp-mcp --list-tools
.venv/bin/python examples/run_scenarios.py

propose and its ingest alias are dry-run by default. promote is also dry-run unless --apply is present. The safe default route creates a private candidate owned by assistant in profile-memory; explicit source arguments must exactly match the source manifest and actor capability.

CLI surface

Command

Purpose

init

Create the local database and source registry

classify --dry-run

Classify input and show its writeback route

propose / ingest

Validate and optionally persist a candidate

promote

Apply reviewer, precedence, and provenance gates

search

Run FTS5 retrieval with scope filtering

explain

Return the retrieval receipt for a record

conflicts

List open conflicts

audit

Show canonical and audit-ledger counts

doctor

Run fail-closed health checks

MCP adapter

amcp-mcp is a dependency-free JSON-RPC stdio adapter. It exposes:

  • memory_search

  • memory_explain

  • memory_propose

  • memory_promote

  • memory_conflicts

  • memory_source_get

  • memory_health

The adapter does not expand privileges or install a connector. Every call is handled by the same policy-aware control plane.

Privacy and anonymization

The implementation, tests, policies, demo traces, roles, and examples are synthetic and generic. They do not contain private conversations, real agent rosters, local production paths, chat IDs, credentials, private repositories, or owner-context records.

The public resource links below are intentional public attribution, not runtime data. Release checks scan both the working tree and reachable Git history for private paths, credential patterns, email addresses, high-risk identifiers, and non-generic commit identities.

Run the gate locally:

python scripts/public_scan.py --history

Documentation

English

Русский

Additional artifacts: contributor guide and synthetic demo traces.

Public resources

License

MIT. Use the code as a reference implementation, keep the safety boundaries explicit, and do not present it as a guarantee of perfect memory or uninterrupted operation.

Available Tools

7 tools
memory_conflictsD

memory conflicts

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden of behavioral disclosure. The phrase 'memory conflicts' provides no information about side effects, safety profile, or operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but this is under-specification, not conciseness. It lacks even a verb and provides no actionable information; the placeholder-like text does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description is the only source of context, and it is completely uninformative. An agent cannot determine the tool's purpose, inputs, or outputs, making it wholly inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The schema already covers everything (an empty object), and there is no need for parameter descriptions in the text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is merely a restatement of the tool name, 'memory conflicts', with no verb or action. It fails to specify what the tool does or how it differs from sibling tools like memory_search or memory_explain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is zero guidance on when to use this tool versus the alternatives. No context, prerequisites, or exclusions are mentioned, leaving the agent without any basis for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_explainD

memory explain

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of disclosing behavior. It says nothing about side effects, return values, permissions, or any operational detail beyond the name itself. The tool is completely opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is not effective conciseness—it is under-specification. It restates the tool name without adding any valuable information, similar to the low-rated 'Process' example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and output schema, the description alone must explain the tool's purpose and behavior. It fails to do so, offering only a tautological phrase. Even with zero parameters, the tool's function remains completely unclear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema coverage is 100% trivially. Since there are no parameters to describe, the description does not need to add parameter semantics. The baseline score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is merely 'memory explain', which is a direct restatement of the tool name. It lacks a verb and resource, providing no indication of what the tool actually does or how it differs from siblings like memory_search or memory_health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives zero guidance on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent without any basis for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_healthD

memory health

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present and the description is just the name, so it discloses nothing about behavior, side effects, or access requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is extremely short, but this is under-specification rather than effective conciseness. No meaningful information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and a description that adds zero context, the tool is completely inadequate for an agent to understand its purpose or behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is empty, so there are no parameter semantics to describe. The baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'memory health' is a restatement of the tool name with no verb or resource. It doesn't indicate what the tool does or how it differs from siblings like memory_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use memory_health versus any alternative. The description lacks any context about usage scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_promoteD

memory promote

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for disclosing behavior. It reveals nothing about side effects, whether the operation mutates state, requires permissions, or returns anything. The term 'promote' is ambiguous and unexplained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than conciseness. A single phrase that repeats the tool name provides no functional information and fails to earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema and no annotations, the description must provide essential context about purpose and behavior. It does not, leaving the tool completely undecipherable. Sibling tools hint at a memory domain, but the text offers no explanation of what 'promote' means.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is an empty object with zero parameters, so there are no parameters to document. Baseline 4 applies because the schema already covers all parameter aspects and there is nothing additional to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'memory promote' simply restates the tool name without any verb or resource, providing no indication of what the tool actually does. It is a tautology and does not distinguish from sibling tools like memory_search or memory_propose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description gives no context about use cases, prerequisites, or circumstances that would warrant calling memory_promote instead of its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_proposeD

memory propose

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description contains zero behavioral information. The tool could be a read, write, or mutation operation; the description gives no clue about side effects, permissions, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though the description is minimal (one word), this is under-specification rather than efficient conciseness. It omits all substantive information and does not front-load any useful details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is completely inadequate for a tool with no annotations and no output schema. It leaves the agent without any understanding of what this tool does, its side effects, or its relationship to siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the tool has no parameters, the description adds no meaning about the operation's inputs or effect. Even with a high schema coverage baseline, the tautological description fails to convey what the 'propose' action entails.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is identical to the tool name ("memory propose") and provides no verb or resource clarification. It fails to indicate any specific action or object, making it a pure tautology with no purpose clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like memory_search or memory_promote. The absence of any contextual or conditional information leaves the agent without direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_source_getD

memory source get

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no behavioral description, the agent learns nothing about side effects, return values, or operational context. The description adds zero transparency beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but this is under-specification rather than effective conciseness. There is no content that earns its place; it merely repeats the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and no explanatory description, the tool is incompletely specified. Even as a simple parameterless operation, the agent has no basis to infer what 'memory source get' returns or when to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is empty and complete. The baseline of 4 applies because there is nothing ambiguous to clarify; a higher score is not justified since the description does not proactively confirm that there are no required inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'memory source get' is a verbatim restatement of the tool name, offering no additional meaning. It does not specify what resource is fetched, what a 'memory source' is, or how this tool differs from siblings like memory_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no mention of use cases, exclusions, or relationships to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedmemory_conflicts
    • First observedmemory_explain
    • First observedmemory_health
    • First observedmemory_promote
    • First observedmemory_propose
    • First observedmemory_search
    • First observedmemory_source_get

TDQS

C2.3/5.0
Disambiguation4/5

Each tool targets a distinct memory operation: search, explain, propose, promote, conflict detection, source retrieval, and health. However, 'propose' and 'promote' could be misconstrued without detailed descriptions.

Naming Consistency3/5

All tools share the consistent 'memory_' prefix, but the structure is mixed: search/explain/propose/promote are verbs, while conflicts/health are nouns and source_get is a compound. This creates a readable yet inconsistent pattern.

Tool Count5/5

Seven tools is well-scoped for a memory control plane, covering search, analysis, lifecycle management, and health without unnecessary bloat.

Completeness4/5

The set covers core memory operations like search, explain, propose, promote, and conflict detection, but lacks direct edit/delete capabilities, which are minor gaps for a full lifecycle.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that adds a trust layer to AI agent memory, enforcing independent review and tamper-evident audit chains for any memory store. It provides tools to search, get, propose, and promote memories under governance rules.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to store, search, assemble, and manage local-first memories through seven MCP tools, including conversation turns, feedback, status, and dashboard access without cloud dependencies.
    AGPL 3.0
  • F
    license
    A
    quality
    B
    maintenance
    Enables agents to manage persistent long-term memory through MCP tools for searching, adding, updating, giving feedback, and forgetting memories, with automated pipelines for redaction, distillation, and reconciliation.
    13
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AlekseiUL/agent-memory-control-plane'

If you have feedback or need assistance with the MCP directory API, please join our Discord server