
MCP Assist — Coordination Memory
io.github.aliomraniH由 GitHub 账号 aliomraniH 发布v0.4.1更新于 Oct 24, 2026
Coordination memory with verification: reconcile-against-GitHub, verdict freshness, provenance.
发布方自己的服务:Memory.fit
概览
面向多智能体协作的远程协调记忆服务器:通过 Streamable HTTP 提供按命名空间隔离的记忆、交接、会话、制品,以及经 GitHub 核验的结论。
- 可以做什么
- 保存、读取、列出、搜索、查看历史与删除命名空间内的记忆条目,可选语义检索
- 记录与加载智能体之间的交接,并创建带追加式事件日志的会话
- 按 sha256 存取内容寻址的制品,支持分段读取,单件上限 50 MB
- 执行协调检查:健康状态、漂移扫描、对照 GitHub 核对结论、把已结束会话整理为记忆
- 开启意图、定义技能、关闭闸门结果,并运行服务端固定顺序的流程(引导、命名空间初始化、召回)
- 记录观察反馈并读取汇总统计
- 适用场景
- 当多个智能体或多个客户端入口(网页、桌面、命令行、编辑器)需要一个共享且持久的项目记忆、交接与制品存放处,或希望关于 PR 与分支的说法先对照 GitHub 核实再采信时适用。它是不含领域术语的通用存储,适合任何能按命名空间划分的项目。
- 运行要求
- 需要访问远程 MCP 端点(Streamable HTTP),无需本地安装包。必须在 Authorization 头中携带 bearer 令牌(网页连接器改为通过查询参数传递),令牌由服务器上受密码保护的管理面板签发与轮换。GitHub 访问、向量嵌入与整理模型等可选集成由服务运营方配置,而非客户端。
安装
在 SourceWeft 中
- 打开 控制台中的 MCP Assist — Coordination Memory,将其添加到工作区。
- 连接 Authorization token 凭据。它们会被私密存储,绝不会在公开页面上展示。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.aliomraniH%2Fmcp-assist-memory/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。
{
"mcpServers": {
"assist-coordination-memory": {
"type": "http",
"url": "https://mcp-assist-memory.replit.app/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}README
mcp-assist-memory
A generic, project-agnostic memory / coordination / artifact server for multi-agent and multi-surface work. One FastAPI process serves a 30-tool MCP over Streamable HTTP, backed by Postgres (+ pgvector), deployed standalone on a Replit Reserved VM.
This is Tier 1 of the reusability contract: every project reuses it as-is. It carries zero domain terms — project identity lives in namespace values, never in tool names, tables, columns, or code.
Capabilities at a glance
- 30-tool MCP over Streamable HTTP (memory, handoff, session, artifact, coordination, feedback, admin).
- Trust-boundary spine (Plan v2) — actor-scoped exactly-once writes with
visible dedup, read-back-verified acks (
verified_persisted), standardized error payloads with remedies, write-time screening + quarantine, provenance tiers (origin, model attribution,derived_fromlineage), trust decay (needs_reverification), PHI-safetool_eventstelemetry, per-namespace variant profiles, and anobservation_logfeedback channel. - Namespace-scoped multi-tenancy — every per-project query filters on
namespace. - Resilient to transient DB drops — the server transparently retries genuine
connection losses (Neon scale-down / PgBouncer recycle, SQLSTATE
57P01/08xxx) on a fresh pooled connection, and validates connections at checkout, so callers no longer have to retry. Retries are idempotency-gated, so they never double-write. - Prompt-injection resistance layer — values are sanitized on write (forged
markers are escaped one-way to
[[UNTRUSTED_DATA]], never reconstructed on read), instruction-shaped writes are screened and quarantined (visible in the write ack;include_quarantined: trueopts reads back in), and reads come back wrapped in<<<UNTRUSTED_DATA>>>markers;storage.sanitize.unwrap_valuerecovers the raw value when a consumer needs it (e.g. tojson.loads). Honest framing: these are layers, not proofs — deterministic screens and wrappers are bypassable by an adaptive attacker; adversarial evaluation is pending (see Phase 10 backlog inDECISION-PROTOCOL.md). - Content-addressed artifacts (sha256, global dedup), 50 MB cap, ranged reads.
- Per-surface rotatable tokens (web vs. desktop-cli) managed from a password-gated
/admindashboard.
The 30 tools
Sequences are the paths an agent should take. Correct use of this server has
always been a sequence — learn which database answered, resolve the profile,
check what is stale, then act — and that ordering used to live in tool
descriptions and skills, i.e. it was enforced by a model remembering advice
mid-task, and a skipped step produced no signal whatsoever. The three sequence
tools run their steps server-side in a fixed order and return steps_run, so
the ordering is something the server did rather than something a caller got
right. They are strictly additive: every primitive they are built from still
works exactly as before, for surgical use.
recall and memory_search now share ONE retrieval guard
(storage/retrieval.py): the same absolute floor and relative alpha the Intent
Gate applies. Previously memory_search had no floor at all while intent_open
had both, so the same store answered the same question differently depending on
which tool the caller reached for. They still differ in what they do with the
verdict — memory_search annotates every row and drops nothing, recall
filters by default and reports the rejected counts — but they can no longer
disagree about what counts as a match.
The Intent Gate (claude/intent-gate/INTENT_GATE_CHARTER.md) is a
per-namespace opt-in (variant_profiles.profile.intent_gate: "on"): mutating
tools gain a deterministic Tier-0 pre-flight (two-phase preview/confirm for
supersession + delete, dependency-freshness flags, compact gate ack block),
intent_open adds the Tier-1 memory-similarity critic, and Tier 2 (LLM
reasoning over the direct Anthropic API — never MCP sampling) ships behind
tier2: "on" (default off). Default-profile namespaces are byte-identical to
the pre-gate server.
/healthz (liveness) and the /admin token dashboard are served separately (not
MCP tools).
Tenancy — namespace is the project boundary
namespace == project == tenant. One namespace per project (e.g.
acme-billing), with conventional sub-scopes by key prefix (coord/…,
knowledge/…). Every per-project tool takes a required namespace and every
query filters on it — there are no implicit cross-project reads. The session
and session_event tables carry namespace too, so episodic memory is scoped
like everything else.
Artifacts are the deliberate exception: they are content-addressed (sha256) and dedup globally, so they are not tenant-scoped — the hash is the capability.
Honest limit (and the v2 fix)
The per-surface tokens scope which client surface connects, not which project it may touch: any holder of any active token can pass any namespace, so namespace remains a soft boundary — real isolation for honest clients, not enforced against a misbehaving one.
v2 auth roadmap — per-project tokens/roles. A token scoped to
acme-billingmust not be able to read or writeother-project. Until then, treat the namespace boundary as a convention enforced by client configuration, not by the server. (See REUSABILITY.md → "namespace is the tenant boundary".)
Auth & the /admin dashboard
MCP tokens are stored in Postgres (admin_auth_tokens) and rotatable from
/admin without a redeploy. There is one active token per surface:
The gate accepts any active token, so each surface can be rotated or
revoked independently — rotating web never disturbs desktop-cli or
cursor. The
/admin page shows one card per surface with a ready-to-paste URL/command and
its own rotate button.
MCP_AUTH_TOKEN seeds the web token on initial boot (so an existing
claude.ai connector keeps working); desktop-cli and cursor are
auto-generated. After first boot the dashboard is the source of truth.
/adminis password-gated byADMIN_PASSWORD(signed, HttpOnly session cookie, CSRF-protected). Without it the dashboard refuses logins.- The only routes not behind the bearer gate are
GET /healthz, the streamedGET /artifact/{sha256}, and/admin(which self-authenticates).
Stateless transport. /mcp runs in stateless HTTP mode
(http_app(stateless_http=True)): every request is self-contained, with no
in-memory session affinity. Client sessions therefore survive VM
restarts/redeploys, and the three surfaces share no server-side session state.
Architecture
- One
AsyncConnectionPoolcreated in the FastAPIlifespan(app.py), injected viadeps. Nothing else opens a connection. The pool is built withcheck=AsyncConnectionPool.check_connection, so a connection terminated server-side while idle is validated and discarded on checkout, never handed to a caller. - One
config.py(pydantic-settings) — the only place secrets are read. StorageBackendABC (storage/base.py) implemented byPostgresBackend; the 18 tools map 1:1 onto it.- Transparent reconnect: reads and idempotent writes retry on a connection
drop (
_retry_on_disconnect), so e.g.OperationalError: terminating connection due to administrator command(SQLSTATE 57P01, Neon scale-down / PgBouncer) is retried on a fresh pooled connection instead of surfacing to the caller. Only genuine disconnects (08xxx/57P0x/ an already-closed connection) are retried — other operational errors (lock timeout, too-many-connections) surface unchanged. Writes retry only when a replay is safe:artifact_put(content-addressed) always, andmemory_save/handoff_save/memory_deleteonly when given anevent_id(exactly-once). Thesession_*writes also retry, with an explicit tradeoff: a drop in the narrow commit-ack window meanssession_createmay orphan an empty, unreferenced session row, andsession_append_eventis at-least-once (a replay can append one duplicate event). For an append-only session log that beats failing the call outright; a save with noevent_idstill runs once and surfaces the error. - Write-path
sanitizestrips forged delimiters/control chars; reads wrap values in<<<UNTRUSTED_DATA>>>markers (lethal-trifecta defense). Note: thevalue(and session-eventpayload) fields come back wrapped, so a consumer that needs the raw value — e.g. tojson.loadsa value that was a JSON string — must strip the markers first. Usestorage.sanitize.unwrap_value(orstrip_untrustedfor a single string); the wrapping stays applied on every read. - Bounded lifespan readiness (no unbounded
pool.wait()), 50 MB artifact cap, ranged blob reads, idempotentevent_idwrites, idempotent blob backfill. - Semantic recall (
memory_search): when aVOYAGE_API_KEYis set, everymemory_saveembeds the entry (Voyage,voyage-3.5-lite, 1024-dim) into a nullableembedding vector(1024)column with an HNSW cosine index, andmemory_searchranks live entries by meaning (embedding <=> query), then backfills keyword/substring matches up tolimit. Embedding is best-effort: it runs before a connection is taken and never blocks (or fails) a write, and with no key the column stays NULL and search degrades to pure keyword — the pre-Phase-3 behavior. Every leg filters onnamespacefirst (no cross-project recall). After enabling a key on an existing DB, embed old rows once withpython scripts/backfill_embeddings.py(idempotent, only touches NULL rows). - Recall tuning (
hnsw.ef_search): the HNSW index is approximate, so a larger store can miss relevant hits unless its query-time recall parameter is tuned.memory_searchsetshnsw.ef_searchper-statement (transaction-local, semantic leg only) fromHNSW_EF_SEARCH(default100; pgvector's own default is40). Higher = better recall, slightly slower search; it must be>=the search limit to take effect. Small stores return the same rows regardless, so the default is safe to leave alone — raise it (e.g.200) if a large tenant reports missing results, lower it toward40to shave latency. Very large tenants can also tune the index build parameters (m,ef_construction); seemigrations/0002_embeddings.sql(changing those requires recreating the index). - Coordination reconciler (
coord_reconcile): when GitHub access is available, aclaim(withmeta.repo+meta.pr/meta.branch) is resolved against live GitHub — is PR #N merged? what is branch X's head? — and stamped with an append-only verdict; without access it staysunverifiable(never a wrongcurrent). Access is sourced in priority order: an explicitGITHUB_TOKEN(read-only repo + PRs), else — on Replit — the connected GitHub account via the Replit connector (token fetched fresh per cache-window so it survives OAuth refresh), else disabled. Resolution is best-effort: a network/API failure yieldsunverifiable, never a blocked write.GITHUB_WEBHOOK_SECRETenablesPOST /webhook/githubto reconcile affected claims on push / pull_request. - Memory curator (
coord_curate): whenANTHROPIC_API_KEYis set, a finished session can be consolidated write-side:coord_curate(namespace, session_id)reads the session's execution trace plus similar existing memories, asks the model what is worth persisting, and applies the resultingADD/UPDATE/MERGE/SUPERSEDE/NOOPoperations deterministically. Every op passes a fail-closed PHI gate first, claims without provenance (meta.repo+meta.pr/branch) are downgraded to notes, supersession sets a validity boundary (history is kept, never deleted), and writes are idempotent (deterministicevent_id) so re-running a session never double-writes. It is best-effort: without the key the curator is disabled andcoord_curateis a clean no-op ({curator_enabled: false, operations: []}), and any model/parse failure yields zero operations — never a wrong write.dry_run=Truereturns the proposed operations without writing.CURATOR_MODELandCURATOR_MAX_OUTPUT_TOKENStune it. Curated rows also carry a secondhyde_embedding, somemory_searchcan match a future question (HyDE leg) as well as the stored statement.
Run locally
Tests (real Postgres)
The suite runs against a real Postgres and skips cleanly if DATABASE_URL is
unset. The neutral test project is proj-test (never a real project name).
CI (.github/workflows/test.yml) spins an ephemeral Neon branch per run,
migrates it, runs pytest, and deletes the branch. Set repo secrets
NEON_API_KEY and NEON_PROJECT_ID to enable it.
Smoke test (the connector handshake)
scripts/smoke_mcp.py performs the exact handshake a Claude connector does —
initialize + tools/list over /mcp with a valid token — and asserts HTTP 200
with the full 30-tool surface, plus the guard rails (no/bad token ⇒ 401,
/healthz db ok). It exists so a transport/auth/host regression (like the
fastmcp 3.4.3 421) can never ship silently again.
-
Blocks a bad build: the in-process half runs in CI via
pytest(tests/test_smoke_mcp.py) against the ephemeral Neon branch — a broken handshake, gate, or tool count fails the build before it can deploy. -
Flags an unhealthy live deploy: run it against the deployed URL after a deploy. It exits non-zero on any failed check:
.github/workflows/smoke.ymlruns this against a live URL on manual dispatch (or a 6-hour schedule); set repo secretsSMOKE_BASE_URLandSMOKE_TOKENto enable it (it no-ops cleanly when unset).
Deploy on Replit (Reserved VM)
- In Secrets, set
DATABASE_URL(pooled endpoint),MCP_AUTH_TOKEN, andADMIN_PASSWORD(plus optional Phase-3 keys). - Deploy as a Reserved VM (
deploymentTarget = "vm") — not Autoscale; the durability gate needs the process to persist. - The deploy
runstep runspython scripts/migrate.pythen starts uvicorn. - Open
https://<your-vm>/admin, sign in, and copy/rotate the token. Point each client athttps://<your-vm>/mcp.
Pinned dependencies (deterministic builds)
pyproject.toml declares loose ranges, but the deploy build, post-merge.sh, and
make install all pass -c constraints.txt, so prod installs the exact versions
verified in dev. This is the guardrail against the class of failure that caused the
prod /mcp 421 outage (an unpinned build silently resolving a newer fastmcp).
To intentionally upgrade a dependency (so pins don't rot):
Never hand-edit versions in constraints.txt; always regenerate with make lock
(scripts/lock-deps.sh). The file header documents the same procedure.
Postgres / Neon
Use the pooled connection string for the running service; psycopg is
configured with prepare_threshold=None for PgBouncer transaction pooling. Tests
and scripts/migrate.py use a direct endpoint (the test pool keeps prepared
statements on).
Boundary
This repo is Tier 1 only. Canvas-specific MCP tools, FHIR logic, and SDK
knowledge live in the separate canvas-sdk-tools repo — never here.
Blob migration (filesystem → bytea)
Idempotent (dedup by sha256), streams each file, skips/reports anything over the 50 MB cap, and verifies a random sample by checksum readback.
来源:README.md,提交 db05997
工具
0版本历史
1- v0.4.1最新Sep 16, 2026
评分
已满足适用检查项的 75%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具必需15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
请在仓库或注册中心条目中声明许可证。
其他 Memory 集成

Memory.fit
fit.memory官方发布者
托管式 Memory.fit 服务器,让 AI 读取你的训练、睡眠、恢复与饮食数据,并写回每周计划、每日目标和饮食计划。
pg.ddx.io: the PostgreSQL community's memory
io.ddx.pg官方发布者
pg.ddx.io: the PostgreSQL community's memory 的托管 MCP 服务,由 pg.ddx.io 发布;无需登录;Streamable HTTP;29 个工具。
var.gg Naming Memory
gg.var官方发布者
远程 MCP 服务器,可根据领域概念推荐并检索韩、日、中、越、英多语言的代码标识符名称,并提供 ERD 结构查询。

Counterparts
ai.counterparts
面向 Claude Code 与 Claude Desktop 的本地优先长期记忆:助手自行写下关于你和项目的笔记,并在之后的会话中回忆起来。

LAHZE - Persian AI Memory Platform
由 GitHub 账号 pedramgholizadeh 发布
以波斯语为先的地理记忆平台:发现地点,起草并发布仅限波斯语的记忆。AI 翻译