@meridianmcp/mcp 0.1.0-pre-alpha
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 +237 -0
- package/bin/meridian-mcp.js +70 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
<!-- mcp-name: io.github.meridianmcp/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
|
+
[](https://github.com/meridianmcp/Meridian)
|
|
15
|
+
[](LICENSE)
|
|
16
|
+
[](https://github.com/meridianmcp/Meridian/actions/workflows/test.yml)
|
|
17
|
+
[](https://docs.usemeridian.us)
|
|
18
|
+
[](https://usemeridian.us)
|
|
19
|
+
[](https://neon.tech)
|
|
20
|
+
[](https://usemeridian.us)
|
|
21
|
+
[](https://docs.usemeridian.us/mcp-tools)
|
|
22
|
+
[](https://usemeridian.us)
|
|
23
|
+
|
|
24
|
+
## Why Meridian
|
|
25
|
+
|
|
26
|
+
Every AI coding session boots blind. You re-explain the architecture, re-describe
|
|
27
|
+
the constraints, re-list what's been tried. When context fills up mid-task,
|
|
28
|
+
everything is lost. This is context debt — and it compounds.
|
|
29
|
+
|
|
30
|
+
Meridian gives your sessions shared memory. They see the same task log, the same
|
|
31
|
+
pinned decisions, the same goal state. When context fills up, a new session resumes
|
|
32
|
+
from a compressed handoff in seconds. No copy-paste, no re-explaining from scratch.
|
|
33
|
+
|
|
34
|
+
[](https://usemeridian.us)
|
|
35
|
+
|
|
36
|
+
## What it is, in 30 seconds
|
|
37
|
+
|
|
38
|
+
A local MCP server every AI session connects to. They share goal state, see each
|
|
39
|
+
other's task log, and resume from a compressed handoff when context fills up.
|
|
40
|
+
|
|
41
|
+
**Two ways to run Meridian:**
|
|
42
|
+
- **Self-host** — free forever, any team size. Clone and run in 2 commands.
|
|
43
|
+
- **Hosted** at [usemeridian.us](https://usemeridian.us) — 30 days free (no card), then $20/mo Standard.
|
|
44
|
+
|
|
45
|
+
<!-- MERIDIAN:ANCHOR:START quickstart -->
|
|
46
|
+
## Quickstart — from source
|
|
47
|
+
|
|
48
|
+
**Linux / macOS:**
|
|
49
|
+
```bash
|
|
50
|
+
git clone https://github.com/meridianmcp/Meridian
|
|
51
|
+
cd Meridian
|
|
52
|
+
./install.sh
|
|
53
|
+
pixi run start
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Windows (PowerShell):**
|
|
57
|
+
```powershell
|
|
58
|
+
git clone https://github.com/meridianmcp/Meridian
|
|
59
|
+
cd Meridian
|
|
60
|
+
.\install.ps1
|
|
61
|
+
pixi run start
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Dashboard opens at **http://localhost:7878**. Data persists in `./data/meridian.db`.
|
|
65
|
+
<!-- MERIDIAN:ANCHOR:END quickstart -->
|
|
66
|
+
|
|
67
|
+
## Wire it into your AI client
|
|
68
|
+
|
|
69
|
+
### Claude Code
|
|
70
|
+
|
|
71
|
+
Drop a `.mcp.json` at your project root.
|
|
72
|
+
|
|
73
|
+
**Hosted (no install)** — generate an API key at [usemeridian.us/settings](https://usemeridian.us/settings):
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"mcpServers": {
|
|
77
|
+
"meridian": {
|
|
78
|
+
"type": "http",
|
|
79
|
+
"url": "https://usemeridian.us/mcp",
|
|
80
|
+
"headers": { "Authorization": "Bearer sk_meridian_YOUR_KEY_HERE" }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Self-host (from source):**
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"mcpServers": {
|
|
90
|
+
"meridian": {
|
|
91
|
+
"command": "pixi",
|
|
92
|
+
"args": ["run", "python", "-m", "meridian", "--mcp"],
|
|
93
|
+
"cwd": "/absolute/path/to/Meridian"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Cursor / Windsurf
|
|
100
|
+
|
|
101
|
+
Same JSON snippet — both clients read `.mcp.json` from the project root.
|
|
102
|
+
|
|
103
|
+
### Claude Desktop
|
|
104
|
+
|
|
105
|
+
Add the same `mcpServers` block to:
|
|
106
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
107
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
108
|
+
|
|
109
|
+
Restart Claude Desktop. New chats have Meridian tools.
|
|
110
|
+
|
|
111
|
+
### claude.ai web (recommended for planning chat)
|
|
112
|
+
|
|
113
|
+
Use [dnakov/claude-mcp](https://github.com/dnakov/claude-mcp) — included as a submodule — to bridge claude.ai to your local Meridian server:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
git clone --recurse-submodules https://github.com/meridianmcp/Meridian
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
1. Open `chrome://extensions` and enable **Developer mode**
|
|
120
|
+
2. Click **Load unpacked** and select `extensions/claude-mcp`
|
|
121
|
+
3. Click the extension icon and set the URL to `http://localhost:7878/mcp`
|
|
122
|
+
|
|
123
|
+
All 54+ Meridian tools (`checkpoint`, `log_task`, `pin_decision`, etc.) are now available directly in claude.ai planning chat. No copy-pasting session output.
|
|
124
|
+
|
|
125
|
+
### Hosted tier (no install)
|
|
126
|
+
|
|
127
|
+
Sign in at [usemeridian.us](https://usemeridian.us) → Settings → MCP client setup → Generate API key → Copy config.
|
|
128
|
+
|
|
129
|
+
Or manually:
|
|
130
|
+
```json
|
|
131
|
+
{"mcpServers":{"meridian":{"type":"http","url":"https://usemeridian.us/mcp","headers":{"Authorization":"Bearer sk_meridian_YOUR_KEY_HERE"}}}}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**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.
|
|
135
|
+
|
|
136
|
+
Get your API key at [usemeridian.us/settings](https://usemeridian.us/settings) after sign-in. Free tier: 30 days, no card, full features.
|
|
137
|
+
|
|
138
|
+
<!-- MERIDIAN:ANCHOR:START features-list -->
|
|
139
|
+
## What you get
|
|
140
|
+
|
|
141
|
+
- **Dashboard** at `http://localhost:7878` — sessions, tasks, sprint board,
|
|
142
|
+
swimlane timeline, HITL queue, pinned decisions.
|
|
143
|
+
- **MCP tools** — `start_session`, `log_task`, `claim_task`, `set_decision`,
|
|
144
|
+
`pin_decision`, `request_hitl`, `generate_handoff`, and ~50 more.
|
|
145
|
+
- **Symbol-level parallel safety** — `claim_file` can claim a single class or
|
|
146
|
+
function (parsed with `ast` / tree-sitter) so two sessions edit the same file
|
|
147
|
+
safely; an overlapping claim is blocked with the free symbols listed.
|
|
148
|
+
- **Live work queue** — planners inject sprint items mid-run; executors pick them
|
|
149
|
+
up at the next item boundary via a `board_change` signal, no interruption.
|
|
150
|
+
- **HITL recommended option** — `request_hitl` can flag a safe-default option the
|
|
151
|
+
dashboard highlights; Enter submits it, number keys pick others.
|
|
152
|
+
- **GitHub hub** (hosted) — connect your repo once in Settings; sessions get `read_file`,
|
|
153
|
+
`list_files`, `search_code`, `git_log`, `get_commit` injected automatically. No extra install.
|
|
154
|
+
- **Tiered handoffs** — L0/L1/L2 compression so a fresh session can resume in seconds.
|
|
155
|
+
- **Webhook intake** — push events from LangGraph / Autogen / custom agents into the same dashboard.
|
|
156
|
+
- **Works everywhere** — Claude Code, Claude Desktop, Cursor, Windsurf, LangGraph, custom.
|
|
157
|
+
<!-- MERIDIAN:ANCHOR:END features-list -->
|
|
158
|
+
|
|
159
|
+
## How it works
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
> start_session(project_id="meridian", session_name="feature-x")
|
|
163
|
+
✓ session registered · sprint loaded · 12 active tasks
|
|
164
|
+
|
|
165
|
+
> get_tasks(project_id="meridian", limit=5)
|
|
166
|
+
[DONE] backend / wire decisions_pinned table
|
|
167
|
+
[PENDING] frontend / add notes vtab (claimed by session-2)
|
|
168
|
+
|
|
169
|
+
> claim_task(task_id="a1f3...")
|
|
170
|
+
✓ claimed — other sessions skip this one
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
State lives in `data/meridian.db` (SQLite) or a Postgres URL via `MERIDIAN_DB_URL`.
|
|
174
|
+
No cloud required for local use.
|
|
175
|
+
|
|
176
|
+
## Team coordination
|
|
177
|
+
|
|
178
|
+
Point `MERIDIAN_DB_URL` at a shared Postgres (Neon free tier works great). Every
|
|
179
|
+
teammate runs their own local Meridian against the same DB — instant shared
|
|
180
|
+
sessions, no Meridian server in the cloud.
|
|
181
|
+
|
|
182
|
+
## Auto-checkpoint with hooks
|
|
183
|
+
|
|
184
|
+
One command wires Claude Code and Codex to Meridian. Every session start injects
|
|
185
|
+
your project context automatically. Every session end snapshots completed work and
|
|
186
|
+
writes a delta handoff.
|
|
187
|
+
|
|
188
|
+
**Mac/Linux:**
|
|
189
|
+
```bash
|
|
190
|
+
curl -fsSL https://usemeridian.us/hooks.sh | bash
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Windows:**
|
|
194
|
+
```powershell
|
|
195
|
+
irm https://usemeridian.us/hooks.ps1 | iex
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Prompts for your Meridian server URL (default `http://localhost:7878`), then opens
|
|
199
|
+
your browser to connect this machine — no project ID or API token to paste. Writes
|
|
200
|
+
to `~/.claude/settings.json` (Claude Code) or `~/.codex/config.toml` (Codex). After
|
|
201
|
+
setup, every session automatically:
|
|
202
|
+
|
|
203
|
+
1. **On start** — calls `POST /hooks/session-start` → injects goal, sprint items,
|
|
204
|
+
recent tasks, and pinned decisions into the session context via `additionalContext`.
|
|
205
|
+
2. **On stop** — calls `POST /hooks/stop` → runs `auto_capture` and writes a delta
|
|
206
|
+
handoff so the next session resumes from where this one ended.
|
|
207
|
+
|
|
208
|
+
No more manual `start_session()` calls. No lost work when context fills.
|
|
209
|
+
|
|
210
|
+
<!-- MERIDIAN:ANCHOR:START pricing-table -->
|
|
211
|
+
## Hosted tier
|
|
212
|
+
|
|
213
|
+
| | Standard | Pro |
|
|
214
|
+
|---|---|---|
|
|
215
|
+
| **Price** | $20/mo | $49/mo (waitlist) |
|
|
216
|
+
| **Storage** | 1 GB included | 10 GB included |
|
|
217
|
+
| **Compute** | 2 CU · 100 hrs/mo | 4 CU · 300 hrs/mo |
|
|
218
|
+
| **Environments** | 1 | prod / staging / dev |
|
|
219
|
+
| **Bring your own Postgres** | ✓ | ✓ |
|
|
220
|
+
| **OAuth + email magic link** | ✓ | ✓ |
|
|
221
|
+
| **Extra storage** | $0.50 / GB-month | $0.50 / GB-month |
|
|
222
|
+
| **Support** | Email | Priority |
|
|
223
|
+
|
|
224
|
+
30-day free trial · no card required
|
|
225
|
+
<!-- MERIDIAN:ANCHOR:END pricing-table -->
|
|
226
|
+
|
|
227
|
+
## License
|
|
228
|
+
|
|
229
|
+
[MSL-1.0](LICENSE) — free for local and internal use at any team size. Paid
|
|
230
|
+
license required if you host Meridian as a service for others. Converts to
|
|
231
|
+
MIT after 6 years.
|
|
232
|
+
|
|
233
|
+
For licensing questions: [hello@usemeridian.us](mailto:hello@usemeridian.us)
|
|
234
|
+
|
|
235
|
+
## Contributors
|
|
236
|
+
|
|
237
|
+
Built by [@ajc3xc](https://github.com/ajc3xc)
|
|
@@ -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,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@meridianmcp/mcp",
|
|
3
|
+
"mcpName": "io.github.ajc3xc/meridian",
|
|
4
|
+
"version": "0.1.0-pre-alpha",
|
|
5
|
+
"description": "Persistent memory, task coordination, and HITL queue for AI coding sessions. MCP server for Claude Code, Cursor, Windsurf, Codex CLI.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"mcp",
|
|
8
|
+
"claude",
|
|
9
|
+
"cursor",
|
|
10
|
+
"windsurf",
|
|
11
|
+
"ai",
|
|
12
|
+
"session",
|
|
13
|
+
"coordination",
|
|
14
|
+
"hitl"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://usemeridian.us",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/meridianmcp/Meridian.git"
|
|
20
|
+
},
|
|
21
|
+
"license": "MSL-1.0",
|
|
22
|
+
"bin": {
|
|
23
|
+
"meridian-mcp": "./bin/meridian-mcp.js"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"bin/",
|
|
30
|
+
"README.md"
|
|
31
|
+
]
|
|
32
|
+
}
|