@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 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
+ [![GitHub Stars](https://img.shields.io/github/stars/meridianmcp/Meridian?style=social)](https://github.com/meridianmcp/Meridian)
15
+ [![License: MSL-1.0](https://img.shields.io/badge/license-MSL--1.0-blue)](LICENSE)
16
+ [![Tests](https://github.com/meridianmcp/Meridian/actions/workflows/test.yml/badge.svg)](https://github.com/meridianmcp/Meridian/actions/workflows/test.yml)
17
+ [![Docs](https://img.shields.io/badge/docs-docs.usemeridian.us-6c8fff)](https://docs.usemeridian.us)
18
+ [![Hosted](https://img.shields.io/badge/hosted-usemeridian.us-a78bfa)](https://usemeridian.us)
19
+ [![Neon](https://img.shields.io/badge/db-neon%20postgres-00e599)](https://neon.tech)
20
+ [![Server](https://img.shields.io/endpoint?url=https://usemeridian.us/status/server)](https://usemeridian.us)
21
+ [![MCP Tools](https://img.shields.io/endpoint?url=https://usemeridian.us/status/tools)](https://docs.usemeridian.us/mcp-tools)
22
+ [![Live Sessions](https://img.shields.io/endpoint?url=https://usemeridian.us/status/sessions)](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
+ [![Meridian dashboard](docs/screenshots/01_dashboard.png)](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
+ }