@meridianmcp/mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +228 -0
- package/bin/meridian-mcp.js +70 -0
- package/package.json +17 -0
package/README.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
<!-- mcp-name: io.github.ajc3xc/meridian -->
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img src="meridian/static/logo.svg" width="64" height="64" alt="Meridian">
|
|
4
|
+
</p>
|
|
5
|
+
|
|
6
|
+
# Meridian
|
|
7
|
+
|
|
8
|
+
**Claude Code has no memory between sessions. Meridian fixes that.**
|
|
9
|
+
|
|
10
|
+
Open-source MCP server for persistent AI session memory — shared task log,
|
|
11
|
+
pinned decisions, human-in-the-loop queue, and tiered handoffs. Works with
|
|
12
|
+
Claude Code, Cursor, Cline, Claude Desktop, or any MCP client.
|
|
13
|
+
|
|
14
|
+
[](LICENSE)
|
|
15
|
+
[](https://github.com/meridianmcp/Meridian/actions/workflows/test.yml)
|
|
16
|
+
[](https://docs.usemeridian.us)
|
|
17
|
+
[](https://usemeridian.us)
|
|
18
|
+
[](https://neon.tech)
|
|
19
|
+
|
|
20
|
+
## Why Meridian
|
|
21
|
+
|
|
22
|
+
Every AI coding session boots blind. You re-explain the architecture, re-describe
|
|
23
|
+
the constraints, re-list what's been tried. When context fills up mid-task,
|
|
24
|
+
everything is lost. This is context debt — and it compounds.
|
|
25
|
+
|
|
26
|
+
Meridian gives your sessions shared memory. They see the same task log, the same
|
|
27
|
+
pinned decisions, the same goal state. When context fills up, a new session resumes
|
|
28
|
+
from a compressed handoff in seconds. No copy-paste, no re-explaining from scratch.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## What it is, in 30 seconds
|
|
35
|
+
|
|
36
|
+
A local MCP server every AI session connects to. They share goal state, see each
|
|
37
|
+
other's task log, and resume from a compressed handoff when context fills up.
|
|
38
|
+
|
|
39
|
+
**Two ways to run Meridian:**
|
|
40
|
+
- **Self-host** — free forever, any team size. Clone and run in 2 commands.
|
|
41
|
+
- **Hosted** at [usemeridian.us](https://usemeridian.us) — 30 days free (no card), then $20/mo Solo.
|
|
42
|
+
|
|
43
|
+
## Quickstart — binary (no Python required)
|
|
44
|
+
|
|
45
|
+
Download the single-file binary for your platform, double-click (or run from terminal), and the dashboard opens automatically.
|
|
46
|
+
|
|
47
|
+
> **Binary users skip `install.sh` entirely.** Just download, run, and wire hooks once with `hooks.sh` / `hooks.ps1`. No Python, no pixi, no git clone.
|
|
48
|
+
|
|
49
|
+
| Platform | Download | Default port |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Windows | [meridian.exe](https://github.com/meridianmcp/Meridian/releases/latest/download/meridian.exe) | 7700 |
|
|
52
|
+
| macOS (Apple Silicon) | [meridian-mac-arm64](https://github.com/meridianmcp/Meridian/releases/latest/download/meridian-mac-arm64) | 7700 |
|
|
53
|
+
| macOS (Intel) | [meridian-mac-x86](https://github.com/meridianmcp/Meridian/releases/latest/download/meridian-mac-x86) | 7700 |
|
|
54
|
+
|
|
55
|
+
Data is stored in `~/.meridian/meridian.db`. Set `MERIDIAN_PORT` to change the port.
|
|
56
|
+
|
|
57
|
+
## Quickstart — from source
|
|
58
|
+
|
|
59
|
+
**Linux / macOS:**
|
|
60
|
+
```bash
|
|
61
|
+
git clone https://github.com/meridianmcp/Meridian
|
|
62
|
+
cd Meridian
|
|
63
|
+
./install.sh
|
|
64
|
+
pixi run start
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Windows (PowerShell):**
|
|
68
|
+
```powershell
|
|
69
|
+
git clone https://github.com/meridianmcp/Meridian
|
|
70
|
+
cd Meridian
|
|
71
|
+
.\install.ps1
|
|
72
|
+
pixi run start
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Dashboard opens at **http://localhost:7878**. Data persists in `./data/meridian.db`.
|
|
76
|
+
|
|
77
|
+
## Wire it into your AI client
|
|
78
|
+
|
|
79
|
+
### Claude Code
|
|
80
|
+
|
|
81
|
+
Drop a `.mcp.json` at your project root:
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"mcpServers": {
|
|
85
|
+
"meridian": {
|
|
86
|
+
"command": "pixi",
|
|
87
|
+
"args": ["run", "python", "-m", "meridian", "--mcp"],
|
|
88
|
+
"cwd": "/absolute/path/to/Meridian"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Cursor / Windsurf
|
|
95
|
+
|
|
96
|
+
Same JSON snippet — both clients read `.mcp.json` from the project root.
|
|
97
|
+
|
|
98
|
+
### Claude Desktop
|
|
99
|
+
|
|
100
|
+
Add the same `mcpServers` block to:
|
|
101
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
102
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
103
|
+
|
|
104
|
+
Restart Claude Desktop. New chats have Meridian tools.
|
|
105
|
+
|
|
106
|
+
### claude.ai web (recommended for planning chat)
|
|
107
|
+
|
|
108
|
+
Use [dnakov/claude-mcp](https://github.com/dnakov/claude-mcp) — included as a submodule — to bridge claude.ai to your local Meridian server:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
git clone --recurse-submodules https://github.com/meridianmcp/Meridian
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
1. Open `chrome://extensions` and enable **Developer mode**
|
|
115
|
+
2. Click **Load unpacked** and select `extensions/claude-mcp`
|
|
116
|
+
3. Click the extension icon and set the URL to `http://localhost:7878/mcp`
|
|
117
|
+
|
|
118
|
+
All 27 Meridian tools (`checkpoint`, `log_task`, `pin_decision`, etc.) are now available directly in claude.ai planning chat. No copy-pasting session output.
|
|
119
|
+
|
|
120
|
+
### Hosted tier (no install)
|
|
121
|
+
|
|
122
|
+
Sign in at [usemeridian.us](https://usemeridian.us) → Settings → MCP client setup → Generate API key → Copy config.
|
|
123
|
+
|
|
124
|
+
Or manually:
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"mcpServers": {
|
|
128
|
+
"meridian": {
|
|
129
|
+
"command": "npx",
|
|
130
|
+
"args": ["-y", "mcp-remote", "https://usemeridian.us/mcp"],
|
|
131
|
+
"env": {"BEARER_TOKEN": "sk_meridian_YOUR_KEY_HERE"}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Claude Desktop** users can install [meridian-hosted.dxt](https://github.com/meridianmcp/Meridian/releases/latest/download/meridian-hosted.dxt) directly (one-click, no config needed).
|
|
138
|
+
|
|
139
|
+
**claude.ai (browser)** users: install the [dnakov/claude-mcp](https://github.com/dnakov/claude-mcp) Chrome extension, then visit [usemeridian.us/install-mcp](https://usemeridian.us/install-mcp) for a step-by-step setup guide with one-click copy buttons.
|
|
140
|
+
|
|
141
|
+
Get your API key at [usemeridian.us/settings](https://usemeridian.us/settings) after sign-in. Free tier: 30 days, no card, full features.
|
|
142
|
+
|
|
143
|
+
## What you get
|
|
144
|
+
|
|
145
|
+
- **Dashboard** at `http://localhost:7878` — sessions, tasks, sprint board,
|
|
146
|
+
swimlane timeline, HITL queue, pinned decisions.
|
|
147
|
+
- **MCP tools** — `start_session`, `log_task`, `claim_task`, `set_decision`,
|
|
148
|
+
`pin_decision`, `request_hitl`, `generate_handoff`, plus 10 more.
|
|
149
|
+
- **Tiered handoffs** — L0/L1/L2 compression so a fresh session can resume in seconds.
|
|
150
|
+
- **Webhook intake** — push events from LangGraph / Autogen / custom agents into the same dashboard.
|
|
151
|
+
- **Works everywhere** — Claude Code, Claude Desktop, Cursor, Windsurf, LangGraph, custom.
|
|
152
|
+
|
|
153
|
+
## How it works
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
> start_session(project_id="meridian", session_name="feature-x")
|
|
157
|
+
✓ session registered · sprint loaded · 12 active tasks
|
|
158
|
+
|
|
159
|
+
> get_tasks(project_id="meridian", limit=5)
|
|
160
|
+
[DONE] backend / wire decisions_pinned table
|
|
161
|
+
[PENDING] frontend / add notes vtab (claimed by session-2)
|
|
162
|
+
|
|
163
|
+
> claim_task(task_id="a1f3...")
|
|
164
|
+
✓ claimed — other sessions skip this one
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
State lives in `data/meridian.db` (SQLite) or a Postgres URL via `MERIDIAN_DB_URL`.
|
|
168
|
+
No cloud required for local use.
|
|
169
|
+
|
|
170
|
+
## Team coordination
|
|
171
|
+
|
|
172
|
+
Point `MERIDIAN_DB_URL` at a shared Postgres (Neon free tier works great). Every
|
|
173
|
+
teammate runs their own local Meridian against the same DB — instant shared
|
|
174
|
+
sessions, no Meridian server in the cloud.
|
|
175
|
+
|
|
176
|
+
## Auto-checkpoint with hooks
|
|
177
|
+
|
|
178
|
+
One command wires Claude Code and Codex to Meridian. Every session start injects
|
|
179
|
+
your project context automatically. Every session end snapshots completed work and
|
|
180
|
+
writes a delta handoff.
|
|
181
|
+
|
|
182
|
+
**Mac/Linux:**
|
|
183
|
+
```bash
|
|
184
|
+
curl -fsSL https://usemeridian.us/hooks.sh | bash
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Windows:**
|
|
188
|
+
```powershell
|
|
189
|
+
irm https://usemeridian.us/hooks.ps1 | iex
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Prompts for your Meridian server URL (default `http://localhost:7878`) and your
|
|
193
|
+
project ID. Writes to `~/.claude/settings.json` (Claude Code) or
|
|
194
|
+
`~/.codex/config.toml` (Codex). After setup, every session automatically:
|
|
195
|
+
|
|
196
|
+
1. **On start** — calls `POST /hooks/session-start` → injects goal, sprint items,
|
|
197
|
+
recent tasks, and pinned decisions into the session context via `additionalContext`.
|
|
198
|
+
2. **On stop** — calls `POST /hooks/stop` → runs `auto_capture` and writes a delta
|
|
199
|
+
handoff so the next session resumes from where this one ended.
|
|
200
|
+
|
|
201
|
+
No more manual `start_session()` calls. No lost work when context fills.
|
|
202
|
+
|
|
203
|
+
## Hosted tier
|
|
204
|
+
|
|
205
|
+
| | Standard | Pro |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| **Price** | $20/mo | $49/mo (waitlist) |
|
|
208
|
+
| **Storage** | 1 GB included | 10 GB included |
|
|
209
|
+
| **Compute** | 2 CU · 100 hrs/mo | 4 CU · 300 hrs/mo |
|
|
210
|
+
| **Environments** | 1 | prod / staging / dev |
|
|
211
|
+
| **Bring your own Postgres** | ✓ | ✓ |
|
|
212
|
+
| **OAuth + email magic link** | ✓ | ✓ |
|
|
213
|
+
| **Extra storage** | $0.50 / GB-month | $0.50 / GB-month |
|
|
214
|
+
| **Support** | Email | Priority |
|
|
215
|
+
|
|
216
|
+
7-day free trial on Standard. Card required, no charge until day 8.
|
|
217
|
+
|
|
218
|
+
## License
|
|
219
|
+
|
|
220
|
+
[MSL-1.0](LICENSE) — free for local and internal use at any team size. Paid
|
|
221
|
+
license required if you host Meridian as a service for others. Converts to
|
|
222
|
+
MIT after 6 years.
|
|
223
|
+
|
|
224
|
+
For licensing questions: [hello@usemeridian.us](mailto:hello@usemeridian.us)
|
|
225
|
+
|
|
226
|
+
## Contributors
|
|
227
|
+
|
|
228
|
+
[](https://github.com/meridianmcp/Meridian/graphs/contributors)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* meridian-mcp — npx launcher
|
|
4
|
+
* Checks for Python + pixi, then starts Meridian MCP server via stdio.
|
|
5
|
+
* Falls back to hosted SSE endpoint instructions if local setup not found.
|
|
6
|
+
*/
|
|
7
|
+
const { execSync, spawn } = require('child_process');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const os = require('os');
|
|
10
|
+
|
|
11
|
+
const REPO = 'https://github.com/meridianmcp/Meridian';
|
|
12
|
+
const HOSTED = 'https://usemeridian.us/mcp/sse';
|
|
13
|
+
|
|
14
|
+
function hasPython() {
|
|
15
|
+
try { execSync('python --version', { stdio: 'ignore' }); return true; } catch {}
|
|
16
|
+
try { execSync('python3 --version', { stdio: 'ignore' }); return true; } catch {}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function hasPixi() {
|
|
21
|
+
try { execSync('pixi --version', { stdio: 'ignore' }); return true; } catch {}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function hasRepo() {
|
|
26
|
+
// Check if we're inside the Meridian repo already
|
|
27
|
+
try {
|
|
28
|
+
const here = process.cwd();
|
|
29
|
+
require('fs').accessSync(path.join(here, 'pixi.toml'));
|
|
30
|
+
return here;
|
|
31
|
+
} catch {}
|
|
32
|
+
// Check default install paths
|
|
33
|
+
const candidates = [
|
|
34
|
+
path.join(os.homedir(), 'Meridian'),
|
|
35
|
+
path.join(os.homedir(), 'Documents', 'Meridian'),
|
|
36
|
+
path.join(os.homedir(), 'Documents', 'Meridian', 'repository'),
|
|
37
|
+
];
|
|
38
|
+
for (const c of candidates) {
|
|
39
|
+
try { require('fs').accessSync(path.join(c, 'pixi.toml')); return c; } catch {}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const repoPath = hasRepo();
|
|
45
|
+
|
|
46
|
+
if (repoPath && hasPixi()) {
|
|
47
|
+
// Happy path: run stdio MCP server
|
|
48
|
+
const proc = spawn('pixi', ['run', 'python', '-m', 'meridian', '--mcp'], {
|
|
49
|
+
cwd: repoPath,
|
|
50
|
+
stdio: 'inherit',
|
|
51
|
+
});
|
|
52
|
+
proc.on('exit', code => process.exit(code || 0));
|
|
53
|
+
} else {
|
|
54
|
+
// Fallback: print setup instructions
|
|
55
|
+
process.stderr.write(`
|
|
56
|
+
Meridian MCP — local setup not found.
|
|
57
|
+
|
|
58
|
+
Quick setup (30 seconds):
|
|
59
|
+
curl -fsSL https://pixi.sh/install.sh | bash
|
|
60
|
+
git clone ${REPO} && cd Meridian && pixi run start
|
|
61
|
+
|
|
62
|
+
Or use the hosted SSE endpoint (no install):
|
|
63
|
+
Name: meridian
|
|
64
|
+
URL: ${HOSTED}
|
|
65
|
+
Add to your MCP client config and you're done.
|
|
66
|
+
|
|
67
|
+
Docs: https://docs.usemeridian.us
|
|
68
|
+
`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@meridianmcp/mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Persistent memory, task coordination, and HITL queue for AI coding sessions. MCP server for Claude Code, Cursor, Windsurf, Codex CLI.",
|
|
5
|
+
"keywords": ["mcp", "claude", "cursor", "windsurf", "ai", "session", "coordination", "hitl"],
|
|
6
|
+
"homepage": "https://usemeridian.us",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/meridianmcp/Meridian.git"
|
|
10
|
+
},
|
|
11
|
+
"license": "FSL-1.1-MIT",
|
|
12
|
+
"bin": {
|
|
13
|
+
"meridian-mcp": "./bin/meridian-mcp.js"
|
|
14
|
+
},
|
|
15
|
+
"engines": { "node": ">=18" },
|
|
16
|
+
"files": ["bin/", "README.md"]
|
|
17
|
+
}
|