> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usecarry.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP server

> Give any MCP client — Cursor, Claude Desktop, Claude Code — gated, receipted, Walrus-backed memory.

Carry's gate and receipts aren't locked inside the demo UI. The `@usecarry/mcp` package is a [Model Context Protocol](https://modelcontextprotocol.io) server, so **any** MCP client gets gated, receipted, Walrus-verified memory that persists across sessions.

<Info>
  The proof travels with the answer, not the vendor — the same gated memory works in Cursor, Claude Desktop, and Claude Code.
</Info>

## The tools

The server (`name: "carry"`) registers five tools:

| Tool                  | What it does                                                             |
| --------------------- | ------------------------------------------------------------------------ |
| `carry_remember`      | Capture a fact into a typed namespace (stored on Walrus).                |
| `carry_recall`        | Retrieve memory for a query — **gated** by the agent × namespace policy. |
| `carry_set_access`    | Grant or revoke an agent's access to a namespace.                        |
| `carry_list_memories` | List stored memories.                                                    |
| `carry_policy`        | Inspect the current access policy.                                       |

Every `carry_recall` runs the same gate as the web app: blocked namespaces are never returned, and the result carries the same receipt semantics.

## Install

Published on npm — no local checkout needed.

<Steps>
  <Step title="Register with your MCP client">
    Add it to your MCP config (`.cursor/mcp.json`, Claude Desktop config, etc.):

    ```json theme={null}
    {
      "mcpServers": {
        "carry": {
          "command": "npx",
          "args": ["-y", "@usecarry/mcp"],
          "env": {
            "WALRUS_PUBLISHER": "https://publisher.walrus-testnet.walrus.space",
            "WALRUS_AGGREGATOR": "https://aggregator.walrus-testnet.walrus.space"
          }
        }
      }
    }
    ```

    Omit the `env` block to run against a deterministic mock (no network).
  </Step>

  <Step title="Use it">
    Ask your agent to remember and recall facts — every recall is gated, and access can be changed on the fly with `carry_set_access`.
  </Step>
</Steps>

<Card title="npm — @usecarry/mcp" icon="npm" href="https://www.npmjs.com/package/@usecarry/mcp">
  Published and installable.
</Card>

## Storage

The MCP server persists to a local store (default `~/.carry/store.json`, override with `CARRY_STORE`) and uses the same Walrus + policy primitives as the web app — so a memory taught through Cursor can be recalled through Claude Desktop, gated the same way.

<Tip>
  Because the gate and receipt logic live in the framework-free `@carry/core` package, the web app and the MCP server share **exactly** the same enforcement — there's no second, weaker code path.
</Tip>
