Skip to main content
Glama
README.md
# @conxt/mcp

**Local-first MCP server for governed AI memory.** Your agents *propose* memories;
*you* approve them; only approved memories are ever recalled. Runs standalone with
no account — optionally syncs to [Conxt](https://conxt.dev) cloud for team memory.

Implements the open [Governed Memory Record](https://conxt.dev) format.

## Quickstart

Point your IDE at it — no install, no signup:

**Cursor** (`~/.cursor/mcp.json`)
```json
{ "mcpServers": { "conxt": { "command": "npx", "args": ["-y", "@conxt/mcp"] } } }
```

**Claude Code**
```bash
claude mcp add conxt -- npx -y @conxt/mcp
```

**Claude Desktop** → Settings → Developer → Edit Config: same block as Cursor.

That's it. Memory lives in `~/.conxt/memory.json` on your machine.

## The tools

| Tool | Who calls it | What it does |
|---|---|---|
| `remember` | agent | Propose a memory (**pending** — doesn't govern yet) |
| `recall` | agent | Recall **approved** memories for a query |
| `list_pending` | agent/you | See what's awaiting approval |
| `approve` | **you** | Approve a pending memory → it now governs |
| `reject` / `forget` | you | Decline or delete |

The rule that makes it *governed*: **an agent can propose, but only a human can
approve** — and `recall` never returns anything that isn't approved.

## Human approval from the terminal

```bash
npx @conxt/mcp pending          # what's waiting
npx @conxt/mcp approve <id>     # approve it
npx @conxt/mcp reject <id>
npx @conxt/mcp list
npx @conxt/mcp path             # where the store lives
```

Prefer zero friction for solo use? Set `CONXT_AUTO_APPROVE=1` and everything you
`remember` is approved on the spot.

## Cloud mode (optional)

Local is always the source of truth. Set both env vars to also push **approved**
records to your Conxt workspace for shared, governed team memory:

```
CONXT_API_KEY=...      CONXT_API_URL=https://...
```

A sync failure never affects your local memory.

## Config

| Env | Default | Purpose |
|---|---|---|
| `CONXT_STORE` | `~/.conxt/memory.json` | Local store path |
| `CONXT_AUTO_APPROVE` | off | Approve on `remember` (solo mode) |
| `CONXT_API_KEY` / `CONXT_API_URL` | unset | Optional cloud sync |

## Develop

```bash
npm install && npm run build && node dist/index.js
```

## License

MIT.

## Publishing

CI (`.github/workflows/ci.yml`) builds and runs the governance smoke test on every
push. To release to npm:

1. On npmjs.com, confirm you own the **`@conxt`** scope — or rename the package to
   unscoped `conxt-mcp` in `package.json`.
2. Add an **`NPM_TOKEN`** (Automation token) as a repository secret
   (Settings → Secrets and variables → Actions).
3. Cut a release:
   ```bash
   npm version patch      # or minor / major — creates a v* tag
   git push --follow-tags
   ```
   The `publish` workflow builds, smoke-tests, and runs `npm publish --access public`.

Or publish manually:
```bash
npm install && npm run build && npm login && npm publish --access public
```

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct role in the memory lifecycle: remember proposes, recall retrieves approved, list_pending shows pending, approve/reject take opposite actions on pending, and forget deletes. No two tools appear to do the same thing, and the descriptions reinforce their unique purposes.

Naming Consistency4/5

All tool names are lowercase verbs, but list_pending uses an underscore while the others are single words (remember, recall, approve, reject, forget). This is a minor deviation but the pattern is still predictable—most are simple imperatives. The inconsistency is small enough to not cause confusion.

Tool Count5/5

With 6 tools, the server is well-scoped for a memory management system. It covers the essential operations without redundancy, and the count feels appropriate—not overly thin nor bloated.

Completeness3/5

The server covers create (remember), read (recall), and delete (forget) for approved memories, plus approval workflow tools (list_pending, approve, reject). However, there is no update/modify operation for existing memories, and no way to list all approved memories (recall only returns relevant ones). These gaps, particularly the missing update capability, mean the lifecycle is not fully complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues