Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/release-mcp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ jobs:
- name: Build MCP package
run: pnpm --filter @mysten-incubation/memwal-mcp build

# Gate every publish on the integration suite (auth-required -> bridge
# hot-handoff, login callback). Never ship the MCP package without it.
# Gate every publish on the integration suite (login callback, SDK
# remember/recall). Never ship the MCP package without it.
- name: Test MCP package
run: pnpm --filter @mysten-incubation/memwal-mcp test

Expand Down
6 changes: 5 additions & 1 deletion docs/mcp/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ answer: >-

## 0.0.13

This release stops a write whose reply was lost from being reported as safe to retry — repeating one can store a second paid copy — answers tool calls with an auth error pointing at `memwal_login` when the relayer rejects the saved delegate key, writes the credentials file through a fresh `0600` file that it renames into place, confirms a completed sign-in and keeps the bridge reading stdin afterwards, warns on unrecognised command-line options instead of ignoring them, documents the network presets in `--help`, names the relayer in `memwal_health`, reports restore `failed` counts when truncation is a transient download or embed blip, and pins plugin launch configs (`.mcp.json`, Cursor/Codex copies, and the Codex fallback installer) so npx cannot keep a cached 0.0.5.
This release cuts the local stdio MCP server off the SSE bridge: memory tools call the Walrus Memory SDK (signed REST) instead of `GET /api/mcp/sse`. It also stops a write whose reply was lost from being reported as safe to retry — repeating one can store a second paid copy — answers tool calls with an auth error pointing at `memwal_login` when the relayer rejects the saved delegate key, writes the credentials file through a fresh `0600` file that it renames into place, confirms a completed sign-in, warns on unrecognised command-line options instead of ignoring them, documents the network presets in `--help`, names the relayer in `memwal_health`, reports restore `failed` counts when truncation is a transient download or embed blip, and pins plugin launch configs (`.mcp.json`, Cursor/Codex copies, and the Codex fallback installer) so npx cannot keep a cached 0.0.5.

### Changed

- The stdio server implements memory tools itself through the Walrus Memory SDK (`MemWal.create` → signed REST). It no longer opens `GET /api/mcp/sse` or `POST /api/mcp/messages`, so this path no longer takes a relayer occupancy slot. `memwal_login` / `memwal_logout` stay local; logout still drops the in-process client. A relayer 401 is a retryable error and does not wipe `credentials.json`. The Claude.ai Streamable HTTP `/api/mcp` connector is unchanged. The package now depends on `@mysten/sui` and `@mysten/seal` so `npx` can build the SDK's SEAL session on remember/recall.

### Fixed

Expand Down
4 changes: 4 additions & 0 deletions packages/mcp/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## 0.0.13

### Changed

- The stdio server implements memory tools itself through the Walrus Memory SDK (`MemWal.create` → signed REST). It no longer opens `GET /api/mcp/sse` or `POST /api/mcp/messages`, so this path no longer takes a relayer occupancy slot. `memwal_login` / `memwal_logout` stay local; logout still drops the in-process client. A relayer 401 is a retryable error and does not wipe `credentials.json`. The Claude.ai Streamable HTTP `/api/mcp` connector is unchanged. The package now depends on `@mysten/sui` and `@mysten/seal` so `npx` can build the SDK's SEAL session on remember/recall.

### Fixed

- Stop telling the user to retry a write whose reply was lost. A `memwal_remember`, `memwal_remember_bulk` or `memwal_analyze` that was POSTed and then timed out came back as "the connection to the relayer dropped before the result came back. Please retry." — but the relayer answers those with HTTP 202 and finishes the work in a durable queue, so a client-side deadline cancels nothing and the write may already have landed. `/api/remember/bulk` carries no idempotency key, unlike the single path, so following that advice stores a second paid copy that `recall` then hides behind the first. A sent write now says it may have completed, that the timeout did not undo it, and to check with `memwal_recall` before re-saving. A sent read still says plainly that retrying is safe. (WALM-618 follow-up)
Expand Down
6 changes: 3 additions & 3 deletions packages/mcp/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Walrus Memory MCP

Walrus Memory MCP is a stdio Model Context Protocol server for Walrus Memory. It lets MCP clients such as Cursor, Claude Desktop, Antigravity, and Claude Code connect to the Walrus Memory relayer without manually configuring remote headers or auth tokens.
Walrus Memory MCP is a stdio Model Context Protocol server for Walrus Memory. It lets MCP clients such as Cursor, Claude Desktop, Antigravity, and Claude Code sign in locally and then call the public Walrus Memory SDK (signed REST) — no remote MCP session, no SSE bridge.

On first use, the package advertises a `memwal_login` tool to the MCP client. The agent can call it inline — no separate CLI command needed. The tool opens a browser-based wallet login flow and stores local credentials at `~/.memwal/credentials.json`. A matching `memwal_logout` tool clears the saved credentials.

Expand Down Expand Up @@ -115,8 +115,8 @@ the monorepo). To verify manually:
(e.g. `other`) — it should **not** return the fact, proving the per-call
value overrode the default.

The injection itself is the pure, exported `applyDefaultNamespace(msg, ns)`
function in `src/bridge.ts` if you want to assert it directly.
The injection itself is the pure, exported `applyDefaultNamespace` in
`src/namespace.ts` if you want to assert it directly.

## Environment Presets

Expand Down
12 changes: 7 additions & 5 deletions packages/mcp/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@mysten-incubation/memwal-mcp",
"version": "0.0.13",
"description": "Walrus Memory MCP client — single-binary stdio MCP server that bridges Cursor / Claude Desktop / Antigravity / Claude Code to the Walrus Memory relayer. Handles browser-based wallet login on first run.",
"description": "Walrus Memory MCP client — stdio MCP server for Cursor / Claude Desktop / Antigravity / Claude Code. Local wallet login, then memory tools via the Walrus Memory SDK.",
"type": "module",
"engines": {
"node": ">=20.0.0"
Expand All @@ -18,14 +18,16 @@
}
},
"scripts": {
"build": "tsc",
"build": "pnpm --filter @mysten-incubation/memwal build && tsc",
"dev": "tsc --watch",
"typecheck": "tsc --noEmit",
"test": "tsc && node --test \"test/**/*.test.mjs\"",
"typecheck": "pnpm --filter @mysten-incubation/memwal build && tsc --noEmit",
"test": "pnpm --filter @mysten-incubation/memwal build && tsc && node --test \"test/**/*.test.mjs\"",
"start": "node ./dist/bin/memwal-mcp.js"
},
"dependencies": {
"@modelcontextprotocol/sdk": "1.29.0",
"@mysten-incubation/memwal": "workspace:*",
"@mysten/seal": "^1.1.0",
"@mysten/sui": "^2.20.3",
"@noble/ed25519": "2.3.0",
"@noble/hashes": "2.0.0",
"open": "10.1.0"
Expand Down
Loading
Loading