IronClaw

IronClaw moves pluggable memory behind an MCP contract

IronClaw proposes a configurable MCP-backed memory provider, names Mnesis as the first consumer and separately moves prepared-marker backfill off a listing path. The direction is toward replaceable memory without making routine reads perform hidden migration work.

← Back to homeOriginal source ↗

nearai/ironclaw issue #7664 is the inspected primary source: “Pluggable memory over MCP: wire the provider, land Mnesis as first consumer, publish the contract.” The related records below were inspected as supporting context rather than independent confirmation.

The facts

- nearai/ironclaw issue #7664 was created 2026-08-14T15:34:10Z and was open at inspection; its title is “Pluggable memory over MCP: wire the provider, land Mnesis as first consumer, publish the contract.” - nearai/ironclaw PR #7661 was created 2026-08-14T15:20:57Z and was open at inspection; its title is “feat(memory): MCP-backed memory provider — bind a memory system by config, not by a factory arm.” - nearai/ironclaw issue #7669 was created 2026-08-14T23:10:43Z and was open at inspection; its title is “Prepared-marker backfill: move the per-scope sweep off the listing path.” - The repository reported 12601 stars, 1512 open issues, default branch main, and last push 2026-08-15T00:16:04Z. - The latest tagged-release baseline checked was ironclaw-v1.2.0 published 2026-08-13T23:30:51Z.

What changed

nearai/ironclaw issue #7664 reports: Tracking issue for finishing pluggable memory: making an external memory system bindable by configuration, with Mnesis Core as the first consumer. Where this stands 7661 (draft) — the provider crate.** ironclaw_memory_mcp maps the IronClaw memory lanes onto MCP tool calls, with the tool names taken from configuration rather than constants. It is complete, tested (8 unit tests + the boundary gate), and **deliberately inert**: nothing wires it, so no deployment can bind it yet. The remaining work is below. Steps 1 and 3 stand on their own; step 2 has an external blocker. 1. Composition wiring The step that turns the crate into a capability an operator can actually bind. [ ] Transport adapter over ironclaw_mcp's host-mediated McpHostHttpClient, injected into the provider's McpMemoryTransport seam. Composition is the one layer allowed to name both crates — the provider is substrates and the MCP lane is runtimes, so the provider cannot depend on it directly. [ ] Config surface: server URL, credential handle, tool names. [ ] **One manifest-keyed factory arm serving every MCP provider**, rather than one arm per vendor. This is the actual point of the work: after it, the next memory backend is a manifest plus config, not a crate. [ ] Add the residue row to MEMORY_PROVIDER_DEPENDENT_RESIDUE —

nearai/ironclaw PR #7661 reports: What this is The first half of making memory **pluggable**: a memory provider that is bound to a backend by *configuration* instead of by a compiled factory arm. Today native and mem0 are each a workspace crate plus a match arm in memory_provider_factory.rs, so "plug in your memory system" means opening a PR against IronClaw. ironclaw_memory_mcp is one provider that serves *any* memory system speaking the memory-over-MCP tool contract — a server URL, a credential, and two tool names. The property that makes it generic rather than a single-vendor adapter: **tool names are configuration, not constants** (tool_names_come_from_configuration pins this). The defaults are the names Mnesis Core publishes in its manifests/mcp-tools.json, since it is the first implementer. Scope — this PR does not wire anything Deliberately provider-only. **No composition factory arm, no manifest, no config plumbing**, so nothing binds this yet and no runtime behavior changes. It is additive and inert; the wiring is the next PR. See *Follow-ups*. Lanes | Lane | Mapping | |---|---| | read_long_term | search tool (default memory_search) | | record_interaction | record tool (default memory_add_session) | | read_short_term | not mapped — manifest must not declare the hook | | profile_read | not mapped — manifest must not declare the hook | Two lanes is

nearai/ironclaw issue #7669 reports: Follow-up from #7634 review (thread: prepared-context marker backfill in list_threads_for_scope). ensure_prepared_markers_migrated (crates/domains/ironclaw_threads/src/filesystem_service.rs) runs a one-time per-scope sweep on the first list request: it scans the scope's whole threads directory and CAS-stamps legacy "kind":"subagent" rows with the prepared_context marker. Correctness holds (marker-gated, CAS-retried per row, retention-preserving), but: the first listing for a large scope pays an inline O(N) serial read-modify-write sweep; the completion marker is written only after the full sweep, so concurrent first listings can each run the whole O(N) pass (wasted idempotent work, not corruption); the threads-crate guardrail says list requests must not repair the projection. Proposed direction: run the backfill as explicit migration/bootstrap work (composition-owned), or convert to bounded paginated progress with a durable claim so no single request pays the sweep and concurrent callers cannot duplicate it. Decided in #7634 review to keep this out of that PR: the fix changes when migration runs (bootstrap wiring, new failure modes), which deserves its own design and rollback review, while the shipped mechanism is safe and one-time. Exposure shrinks over time (only pre-marker legacy subagent rows), so priority is proportional to deployment size at upgrade.

Why it matters

A pluggable memory layer needs an explicit capability and failure contract. Listing data should not secretly launch a per-scope repair sweep, especially when the provider is remote. The operator test is whether the system remains bounded and its receipts still describe the action after failure, retry or restart.

Current

The primary record was open when captured on 2026-08-15. The tagged-release baseline was ironclaw-v1.2.0 published 2026-08-13T23:30:51Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.

Evidence

The primary URL is https://github.com/nearai/ironclaw/issues/7664. Supporting records are https://github.com/nearai/ironclaw/pull/7661 and https://github.com/nearai/ironclaw/issues/7669. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.

Source boundary

Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.

Operator take

Version the memory-provider contract, bound remote calls, expose degraded mode and run backfills as resumable operator-visible jobs rather than read-path side effects. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.

Caveat

Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.

Source inspected; source state, environment and release boundary remain explicit.