rubien-mcp-server 0.1.0 → 0.3.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 +108 -110
- package/dist/cli.js +11 -18
- package/dist/cli.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/schemas.js +125 -22
- package/dist/schemas.js.map +1 -1
- package/dist/server.js +3 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/citations.js +3 -3
- package/dist/tools/io.js +3 -31
- package/dist/tools/io.js.map +1 -1
- package/dist/tools/pdf.js +6 -54
- package/dist/tools/pdf.js.map +1 -1
- package/dist/tools/properties.js +75 -144
- package/dist/tools/properties.js.map +1 -1
- package/dist/tools/read.js +105 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/references.js +114 -41
- package/dist/tools/references.js.map +1 -1
- package/dist/tools/sync.js +1 -1
- package/dist/tools/sync.js.map +1 -1
- package/dist/tools/views.js +17 -34
- package/dist/tools/views.js.map +1 -1
- package/dist/versionGuard.js +7 -5
- package/dist/versionGuard.js.map +1 -1
- package/package.json +15 -4
package/README.md
CHANGED
|
@@ -1,179 +1,177 @@
|
|
|
1
1
|
# rubien-mcp-server
|
|
2
2
|
|
|
3
|
-
A Model Context Protocol server that wraps `rubien-cli`,
|
|
3
|
+
A Model Context Protocol server that wraps `rubien-cli`, exposing your Rubien library to Claude Code, Claude Desktop, and claude.ai (web) as a tool catalog. It spawns `rubien-cli` under the hood and speaks MCP over two transports:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- **stdio** — Claude Code and Claude Desktop. The client spawns the server locally. No network, no auth. What most people want; see [Install](#install).
|
|
6
|
+
- **Streamable HTTP + bearer token** — claude.ai (web) connects as a *remote MCP server* (it can't spawn a local process), so it needs a tunnel. See [claude.ai web](#claudeai-web-remote-mcp-server).
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
- **Streamable HTTP with bearer-token auth** — used by **claude.ai (web)** via a custom MCP connector. Requires a tunnel (e.g. Cloudflare Tunnel) because your library lives on your Mac.
|
|
8
|
+
## Requirement: `rubien-cli` on the host
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The server is only a wrapper. It needs **Node.js ≥ 20** and the `rubien-cli` binary:
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
- **Mac:** install **Rubien.app** (the DMG). The entitled `rubien-cli` ships inside it and is found automatically.
|
|
13
|
+
- **Linux:** install the runtime libs and extract the CLI tarball, keeping `rubien-cli` and its `*.resources` folders together (the CLI loads citation styles from beside the binary):
|
|
14
|
+
```bash
|
|
15
|
+
sudo apt install libsqlite3-0 libcurl4 libxml2 libpoppler-glib8 libcairo2 libgdk-pixbuf-2.0-0 libglib2.0-0 ca-certificates
|
|
16
|
+
# download rubien-cli-*-linux-x86_64.tar.gz, extract, then:
|
|
17
|
+
export RUBIEN_CLI=/path/to/extracted/rubien-cli
|
|
18
|
+
```
|
|
19
|
+
Tarball: <https://github.com/devzhk/Rubien-releases/releases>. Don't put the bare binary on `PATH` alone — it loses its resource bundles.
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
claude mcp add rubien -- npx -y rubien-mcp-server
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
This needs `rubien-cli` on the host:
|
|
19
|
-
- **Mac:** install Rubien.app (DMG) — the entitled `rubien-cli` ships inside it; nothing else to do.
|
|
20
|
-
- **Linux:** `sudo apt install libsqlite3-0 libcurl4 libxml2 libpoppler-glib8 libcairo2 libgdk-pixbuf-2.0-0 libglib2.0-0 ca-certificates`, then download `rubien-cli-*-linux-x86_64.tar.gz` from
|
|
21
|
-
https://github.com/devzhk/Rubien-releases/releases and **extract it to a directory, keeping `rubien-cli` and the `*.resources` folders together** (the CLI loads citation styles from beside the binary). Point the server at it: `export RUBIEN_CLI=/path/to/extracted/rubien-cli`. Do **not** copy the bare binary onto `PATH` alone — it would lose its resource bundles.
|
|
22
|
-
|
|
23
|
-
The server checks the CLI's build at startup; if it's too old it prints an update
|
|
24
|
-
instruction and exits (rather than failing mid-call). On **Mac**, update Rubien.app
|
|
25
|
-
(Sparkle). On **Linux**, run `rubien-cli self-update` (signature-verified, replaces in
|
|
26
|
-
place) — or re-download the tarball.
|
|
27
|
-
|
|
28
|
-
## Prerequisites
|
|
21
|
+
At startup the server checks the CLI's build and exits with an update instruction if it's too old. Update via Rubien.app / Sparkle on Mac, or `rubien-cli self-update` on Linux.
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
- `rubien-cli` reachable on the host. The server looks for it in this order:
|
|
32
|
-
1. `$RUBIEN_CLI` env var (explicit path)
|
|
33
|
-
2. `/Applications/Rubien.app/Contents/Helpers/rubien-cli` (installed app bundle, Mac)
|
|
34
|
-
3. `~/Applications/Rubien.app/Contents/Helpers/rubien-cli` (Mac)
|
|
35
|
-
4. `./build/Rubien.app/Contents/Helpers/rubien-cli` (dev build output, Mac)
|
|
36
|
-
5. `rubien-cli` on `PATH` (Linux installs land here — see the **Install** section above)
|
|
23
|
+
## Install
|
|
37
24
|
|
|
38
|
-
|
|
25
|
+
Both stdio clients use the published npm package via `npx -y` — no global install.
|
|
39
26
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
To pin the spawned CLI to a specific library directory regardless of which binary resolves, set `RUBIEN_LIBRARY_ROOT` in the MCP server's `env` block (Claude Code: `claude mcp add rubien --env RUBIEN_LIBRARY_ROOT=...`; Claude Desktop: under `mcpServers.rubien.env` in `claude_desktop_config.json`). The path is used verbatim — point it at the directory that contains `library.sqlite`:
|
|
43
|
-
|
|
44
|
-
- Mac sandboxed: `~/Library/Group Containers/9TXK4V3SS8.com.rubien.shared/Rubien`
|
|
45
|
-
- Mac unsandboxed: `~/Library/Application Support/Rubien`
|
|
46
|
-
- Linux: `~/.local/share/rubien` (or wherever `$XDG_DATA_HOME/rubien` resolved to)
|
|
47
|
-
|
|
48
|
-
## Claude Code (stdio)
|
|
49
|
-
|
|
50
|
-
The npx command above is the recommended path. To run a local checkout instead (see [Development](#development) for the build):
|
|
27
|
+
### Claude Code
|
|
51
28
|
|
|
52
29
|
```bash
|
|
53
|
-
claude mcp add rubien
|
|
30
|
+
claude mcp add rubien -- npx -y rubien-mcp-server
|
|
54
31
|
```
|
|
55
32
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
> List my 5 most recently added references.
|
|
59
|
-
> Cite reference 42 in Nature style.
|
|
33
|
+
### Claude Desktop
|
|
60
34
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## Claude Desktop (stdio)
|
|
64
|
-
|
|
65
|
-
Claude Desktop spawns MCP servers itself — no tunnel, no bearer token. Add Rubien to `claude_desktop_config.json` via either route:
|
|
66
|
-
|
|
67
|
-
- **Edit the file directly** at `~/Library/Application Support/Claude/claude_desktop_config.json`.
|
|
68
|
-
- **Settings → Developer → Edit Config** in Claude Desktop, which opens the same file in your editor.
|
|
69
|
-
|
|
70
|
-
Add Rubien under `mcpServers`:
|
|
35
|
+
**Settings → Developer → Edit Config** (or edit `~/Library/Application Support/Claude/claude_desktop_config.json`), then restart Claude Desktop:
|
|
71
36
|
|
|
72
37
|
```json
|
|
73
38
|
{
|
|
74
39
|
"mcpServers": {
|
|
75
40
|
"rubien": {
|
|
76
|
-
"command": "
|
|
77
|
-
"args": ["
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["-y", "rubien-mcp-server"]
|
|
78
43
|
}
|
|
79
44
|
}
|
|
80
45
|
}
|
|
81
46
|
```
|
|
82
47
|
|
|
83
|
-
|
|
48
|
+
**macOS PATH gotcha:** Claude Desktop launches servers with launchd's minimal `PATH`, not your shell's. If `npx` isn't found, set `"command"` to its absolute path (`which npx` → e.g. `/opt/homebrew/bin/npx`). Affects every npx-based server; Claude Code is unaffected. No `.dxt` one-click package yet.
|
|
84
49
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"args": ["/absolute/path/to/Rubien/mcp-server/dist/index.js"],
|
|
89
|
-
"env": {
|
|
90
|
-
"RUBIEN_LIBRARY_ROOT": "/Users/you/Library/Group Containers/9TXK4V3SS8.com.rubien.shared/Rubien"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
```
|
|
50
|
+
### Upgrading
|
|
51
|
+
|
|
52
|
+
The `npx -y rubien-mcp-server` install is **unpinned**, so there is nothing to reinstall — `npx` resolves the latest published version each time the client spawns the server. Upgrade in this order:
|
|
94
53
|
|
|
95
|
-
|
|
54
|
+
1. **Update Rubien first** — Sparkle on Mac (Rubien → Settings → Check Now), `rubien-cli self-update` on Linux. The server needs the new `rubien-cli`.
|
|
55
|
+
2. **Restart your MCP client** — quit/reopen Claude Desktop, or start a new Claude Code session. The respawned server is the latest release.
|
|
96
56
|
|
|
97
|
-
|
|
57
|
+
The pairing is guarded in one direction: a new server against a too-old Rubien **exits at startup with an update instruction** (`MIN_CLI_BUILD`), so a half-upgrade fails fast instead of half-working. The other direction is why upgrading matters — an old server against a new Rubien breaks at tool-call time when it shells subcommands that no longer exist (server < 0.3.0 vs Rubien ≥ 0.4.0: the 0.4.0 CLI cutover removed `import`, `add --identifier`, `views --query`, and the legacy `properties` write flags that 0.1.x/0.2.x servers shell out to; those server versions are deprecated on npm for this reason).
|
|
98
58
|
|
|
99
|
-
|
|
59
|
+
If a stale `npx` cache ever keeps serving an old version after a restart, clear it (`rm -rf ~/.npm/_npx`) or pin `rubien-mcp-server@latest` in the config. HTTP mode (below) runs as a long-lived process you started yourself — it does not auto-upgrade; restart it after updating Rubien.
|
|
60
|
+
|
|
61
|
+
## claude.ai web (remote MCP server)
|
|
62
|
+
|
|
63
|
+
claude.ai connects to rubien as a **remote MCP server** over Streamable HTTP — it can't spawn a local process. It's the *same npm package* in HTTP mode: the server still runs on your Mac (where the library and `rubien-cli` live), and claude.ai reaches it through a Cloudflare Tunnel, with a bearer token to keep strangers out.
|
|
100
64
|
|
|
101
65
|
```bash
|
|
102
|
-
# 1. Start the server with a bearer token
|
|
66
|
+
# 1. Start the server in HTTP mode with a bearer token
|
|
103
67
|
RUBIEN_MCP_BEARER=$(openssl rand -hex 32) \
|
|
104
|
-
|
|
68
|
+
npx -y rubien-mcp-server --http --port 4000 --bearer-token "$RUBIEN_MCP_BEARER"
|
|
105
69
|
|
|
106
70
|
# 2. Open a tunnel
|
|
107
71
|
cloudflared tunnel --url http://localhost:4000
|
|
108
72
|
# → copy the https://*.trycloudflare.com URL
|
|
109
73
|
|
|
110
|
-
# 3.
|
|
111
|
-
# URL:
|
|
112
|
-
# Token: $RUBIEN_MCP_BEARER (from step 1)
|
|
74
|
+
# 3. claude.ai → Settings → Connectors → Add custom MCP connector
|
|
75
|
+
# URL: the tunnel URL; Token: $RUBIEN_MCP_BEARER
|
|
113
76
|
```
|
|
114
77
|
|
|
115
|
-
Save the
|
|
78
|
+
Save the token — you need it to reconnect after restarts.
|
|
79
|
+
|
|
80
|
+
### Security model
|
|
116
81
|
|
|
117
|
-
|
|
82
|
+
The remote path is **single-user personal use only.**
|
|
118
83
|
|
|
119
|
-
|
|
84
|
+
- The bearer token is a long-lived static secret — no rotation, revocation, rate limiting, or replay protection. Treat it like an SSH key; regenerate if leaked.
|
|
85
|
+
- Cloudflare Tunnel terminates TLS, so the token travels over HTTPS. A plaintext tunnel (e.g. raw ngrok HTTP) exposes it to sniffing.
|
|
86
|
+
- A leaked URL without the token is safe (every request gets a 401) — but rotate both if in doubt.
|
|
120
87
|
|
|
121
|
-
-
|
|
122
|
-
- The server will happily accept any request with the correct token. Don't paste the token into anything you don't trust, and treat a leaked token like an SSH key — regenerate immediately.
|
|
123
|
-
- Cloudflare Tunnel provides TLS termination; the token travels over HTTPS. If you use a plaintext tunnel (e.g. raw ngrok HTTP) the token can be sniffed.
|
|
124
|
-
- A leaked URL without the token is safe — every request gets a 401 — but rotate both if in doubt.
|
|
88
|
+
Multi-user would need a real auth story: OAuth, short-lived tokens, per-client revocation.
|
|
125
89
|
|
|
126
|
-
|
|
90
|
+
## Optional configuration
|
|
91
|
+
|
|
92
|
+
### Pin the library directory
|
|
93
|
+
|
|
94
|
+
By default the CLI resolves its own library location. To force one, set `RUBIEN_LIBRARY_ROOT` to the directory containing `library.sqlite`:
|
|
95
|
+
|
|
96
|
+
- Claude Code: `claude mcp add rubien --env RUBIEN_LIBRARY_ROOT=<dir> -- npx -y rubien-mcp-server`
|
|
97
|
+
- Claude Desktop: add `"env": { "RUBIEN_LIBRARY_ROOT": "<dir>" }` beside `command`/`args`.
|
|
98
|
+
|
|
99
|
+
| Host | Directory |
|
|
100
|
+
|---|---|
|
|
101
|
+
| Mac (sandboxed app) | `~/Library/Group Containers/9TXK4V3SS8.com.rubien.shared/Rubien` |
|
|
102
|
+
| Mac (unsandboxed dev) | `~/Library/Application Support/Rubien` |
|
|
103
|
+
| Linux | `~/.local/share/rubien` (or `$XDG_DATA_HOME/rubien`) |
|
|
104
|
+
|
|
105
|
+
### How the server finds `rubien-cli`
|
|
106
|
+
|
|
107
|
+
First hit wins:
|
|
108
|
+
|
|
109
|
+
1. `$RUBIEN_CLI` (explicit path)
|
|
110
|
+
2. `/Applications/Rubien.app/Contents/Helpers/rubien-cli` (Mac)
|
|
111
|
+
3. `~/Applications/Rubien.app/Contents/Helpers/rubien-cli` (Mac)
|
|
112
|
+
4. `./build/Rubien.app/Contents/Helpers/rubien-cli` (dev build, Mac)
|
|
113
|
+
5. `rubien-cli` on `PATH` (Linux installs land here)
|
|
114
|
+
|
|
115
|
+
**On Mac, prefer the bundled helper** (2–4): it's signed with the App Group entitlement and reads the same `library.sqlite` as the app. A bare `rubien-cli` on PATH is usually an unentitled dev build hitting a *different* database (see "Database location" in `Docs/CLI-Reference.md`).
|
|
116
|
+
|
|
117
|
+
**On Linux**, everything works except `rubien_get_sync_status` (no CloudKit — the `sync` subcommand isn't built).
|
|
118
|
+
|
|
119
|
+
### Run a local checkout
|
|
120
|
+
|
|
121
|
+
For development, point the client at a built `dist/` (see [Development](#development)):
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
claude mcp add rubien -- node $(pwd)/dist/index.js # Claude Code
|
|
125
|
+
```
|
|
126
|
+
```json
|
|
127
|
+
{ "mcpServers": { "rubien": { "command": "node", "args": ["/abs/path/to/mcp-server/dist/index.js"] } } }
|
|
128
|
+
```
|
|
127
129
|
|
|
128
130
|
## Tool catalog
|
|
129
131
|
|
|
130
|
-
|
|
132
|
+
27 tools on the `{op}_{target}` grid — CRUD operations always carry the target suffix (`create_reference`, `update_property`); a bare verb appears only when the operation is unique and unambiguous (`cite`, `export`):
|
|
131
133
|
|
|
132
134
|
| Surface | Tools |
|
|
133
135
|
|---|---|
|
|
134
|
-
| References | `
|
|
135
|
-
| Citations | `rubien_cite`, `
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
| Properties (incl. Tags) | `
|
|
140
|
-
| Saved views | `
|
|
141
|
-
| Sync | `
|
|
136
|
+
| References | `rubien_search_references`, `rubien_list_references`, `rubien_get_reference`, `rubien_create_reference`, `rubien_update_reference`, `rubien_delete_reference` |
|
|
137
|
+
| Citations | `rubien_cite`, `rubien_list_styles` |
|
|
138
|
+
| Export | `rubien_export` |
|
|
139
|
+
| Reading | `rubien_read_text`, `rubien_read_annotations`, `rubien_grep_text` |
|
|
140
|
+
| PDFs | `rubien_get_pdf_info`, `rubien_render_pdf_page`, `rubien_download_pdf` |
|
|
141
|
+
| Properties (columns + options, incl. Tags) | `rubien_list_properties`, `rubien_create_property`, `rubien_update_property`, `rubien_delete_property`, `rubien_create_option`, `rubien_update_option`, `rubien_delete_option` |
|
|
142
|
+
| Saved views | `rubien_list_views`, `rubien_create_view`, `rubien_update_view`, `rubien_delete_view` |
|
|
143
|
+
| Sync | `rubien_get_sync_status` (Mac-only — errors on Linux) |
|
|
144
|
+
|
|
145
|
+
`rubien_create_reference` is the **one door in**: pass exactly one of `source` (any locator — DOI / arXiv / PMID / PMCID / ISBN, paper URL, PDF/Markdown file URL, absolute file path, or folder path; the CLI routes it), `bibtex`, or `title`. It may return multiple items (multi-entry BibTeX, folders) and `status: "existing"` when dedup matched, in the unified `{items, summary, diagnostics}` envelope. Stdin (`"-"`) is intentionally unavailable through MCP.
|
|
142
146
|
|
|
143
|
-
|
|
147
|
+
Per-reference property values (cells) are edited through `rubien_update_reference`'s `properties` payload — `{"Status": "Reading", "Tags": {"add": ["12"]}, "7": ["ml", "nlp"], "Themes": null}` — atomically alongside metadata fields. The option tools (`create_option` / `update_option` / `delete_option`) manage the *choices themselves* (including Tag rows for the built-in Tags property).
|
|
144
148
|
|
|
145
|
-
|
|
149
|
+
Reading tools operate on any reference without your knowing whether it holds a PDF or a clipped web page. `rubien_read_text` returns the readable body text — the attached PDF or the clipped web page — routed automatically: omit `source` and `pages`/`sections` imply the PDF, `start` implies the web body, else PDF wins when both exist. Every response reports `source` (what was read) and `available` (which sources are readable now). PDF results are page-keyed (`pages[]` items with `text` + `sectionPath`, selected by a `pages` range or `sections` title-substrings); web results are one paginated body window (`content` + `contentLength`, `start`/`maxChars`; `contentFormat` markdown or HTML). `rubien_read_annotations` merges the user's highlights/underlines/anchored notes across both kinds into one array, each item tagged `source`; web items carry a W3C TextQuoteSelector triple (`prefixText`/`anchorText`/`suffixText`) that locates them inside the `rubien_read_text` body. `rubien_grep_text` is the lookup half of the same workflow: it finds *where* a reference's body mentions a phrase or regex — PDF hits grouped by page (`sectionPath` breadcrumbs), web hits as exact character offsets — so you can then pull just those spots with `rubien_read_text` (`pages` for PDF, `start` for web). All three are library-only — none hit the network.
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
PDF tools: `rubien_get_pdf_info` (page count, `hasTextLayer`, outline sections — call it before selecting `rubien_read_text` by `sections`), `rubien_render_pdf_page` (render a page to an image, for tables/figures/equations), `rubien_download_pdf` (fetch an open-access PDF and attach it to an existing reference).
|
|
152
|
+
|
|
153
|
+
Destructive tools carry `destructiveHint: true` so Claude Code's permission UI flags them. `rubien_delete_reference` passes `--force`; confirmation happens in the client UI, not a CLI prompt (see `src/tools/references.ts`).
|
|
148
154
|
|
|
149
155
|
## Contract pinning
|
|
150
156
|
|
|
151
|
-
|
|
157
|
+
Argument shapes are zod schemas in each tool file; response shapes are in `src/schemas.ts`, mirroring the Swift `*DTO` types in `Sources/RubienCLI/RubienCLI.swift`. Convention (tested in `test/schemas.test.ts`):
|
|
152
158
|
|
|
153
|
-
- `.optional()`
|
|
154
|
-
- `.nullable()` only for `AlwaysEncodedOptional<T>`
|
|
159
|
+
- `.optional()` for Swift `Optional` fields — `JSONEncoder` omits nil optionals.
|
|
160
|
+
- `.nullable()` only for `AlwaysEncodedOptional<T>` (currently just `DatabaseViewDTO.groupBy`).
|
|
155
161
|
|
|
156
|
-
|
|
162
|
+
Change a Swift DTO → update `src/schemas.ts` in the same commit (CLAUDE.md CLI/data-layer lockstep rule).
|
|
157
163
|
|
|
158
164
|
## Development
|
|
159
165
|
|
|
160
|
-
Build from a local checkout (instead of `npx`):
|
|
161
|
-
|
|
162
166
|
```bash
|
|
163
167
|
cd mcp-server
|
|
164
168
|
npm install
|
|
165
169
|
npm run build # → dist/
|
|
166
|
-
npm test # vitest
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
Watch mode:
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
npm run dev # tsc --watch
|
|
173
|
-
npm run test:watch
|
|
170
|
+
npm test # vitest
|
|
171
|
+
npm run dev # tsc --watch
|
|
174
172
|
```
|
|
175
173
|
|
|
176
|
-
|
|
174
|
+
Poke at tool schemas by hand with MCP Inspector:
|
|
177
175
|
|
|
178
176
|
```bash
|
|
179
177
|
npx @modelcontextprotocol/inspector node dist/index.js
|
package/dist/cli.js
CHANGED
|
@@ -52,9 +52,12 @@ export function resolveCliPath() {
|
|
|
52
52
|
* Invoke rubien-cli with the given argv and return the parsed result.
|
|
53
53
|
*
|
|
54
54
|
* Contract: on exit 0, stdout is JSON (default) or plain text (`textMode`).
|
|
55
|
-
* On non-zero exit, stderr
|
|
56
|
-
*
|
|
57
|
-
*
|
|
55
|
+
* On non-zero exit, stderr carries a structured JSON error envelope — either
|
|
56
|
+
* plain `{"error": "..."}` or a richer shape like the `unresolved-selectors`
|
|
57
|
+
* envelope (`{"error", "ids", "names"}`) or the all-failed create-reference
|
|
58
|
+
* envelope (`{"items", "summary"}`). Per spec §4.6 the envelope must reach
|
|
59
|
+
* the agent VERBATIM — no field extraction — so CliError.message is the raw
|
|
60
|
+
* stderr text.
|
|
58
61
|
*/
|
|
59
62
|
export async function invokeCli(args, options = {}) {
|
|
60
63
|
const cliPath = resolveCliPath();
|
|
@@ -66,7 +69,7 @@ export async function invokeCli(args, options = {}) {
|
|
|
66
69
|
});
|
|
67
70
|
// Close stdin unconditionally. Even when we have nothing to pipe, leaving
|
|
68
71
|
// it open causes subcommands that call `readDataToEndOfFile()` (like
|
|
69
|
-
// `
|
|
72
|
+
// `add --source -`) to block until the timeout fires.
|
|
70
73
|
if (child.child.stdin) {
|
|
71
74
|
if (options.stdin !== undefined) {
|
|
72
75
|
child.child.stdin.write(options.stdin);
|
|
@@ -86,20 +89,10 @@ export async function invokeCli(args, options = {}) {
|
|
|
86
89
|
// execFile error shape: { code, signal, stdout, stderr, message }
|
|
87
90
|
const e = err;
|
|
88
91
|
const stderr = (e.stderr ?? "").trim();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (parsed && typeof parsed === "object" && "error" in parsed) {
|
|
94
|
-
parsedError = String(parsed.error);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
// stderr wasn't JSON; fall through and use raw text.
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const message = parsedError ??
|
|
102
|
-
(stderr.length > 0 ? stderr : (e.message ?? "rubien-cli invocation failed"));
|
|
92
|
+
// Raw pass-through (§4.6): structured envelopes (unresolved-selectors,
|
|
93
|
+
// all-failed create envelopes) must survive to the agent unmodified —
|
|
94
|
+
// extracting `.error` here would silently drop `ids`/`names`/`items`.
|
|
95
|
+
const message = stderr.length > 0 ? stderr : (e.message ?? "rubien-cli invocation failed");
|
|
103
96
|
throw new CliError(message, typeof e.code === "number" ? e.code : null, stderr);
|
|
104
97
|
}
|
|
105
98
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf;IACA;IAHlB,YACE,OAAe,EACC,QAAuB,EACvB,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAe;QACvB,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,oEAAoE;QACpE,gDAAgD;QAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,oDAAoD,WAAW,EAAE,CAClE,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,sDAAsD;QACtD,IAAI,CAAC,OAAO,EAAE,EAAE,qDAAqD,CAAC;QACtE,kDAAkD;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,8CAA8C,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iDAAiD,CAAC;KACvE,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,gDAAgD;IAChD,OAAO,YAAY,CAAC;AACtB,CAAC;AAWD
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -21,11 +21,11 @@ Options:
|
|
|
21
21
|
|
|
22
22
|
Examples:
|
|
23
23
|
# Claude Code
|
|
24
|
-
claude mcp add rubien
|
|
24
|
+
claude mcp add rubien -- npx -y rubien-mcp-server
|
|
25
25
|
|
|
26
|
-
# claude.ai (remote MCP)
|
|
26
|
+
# claude.ai (remote MCP) — same package, HTTP mode
|
|
27
27
|
RUBIEN_MCP_BEARER=$(openssl rand -hex 32) \\
|
|
28
|
-
|
|
28
|
+
npx -y rubien-mcp-server --http --port 4000 --bearer-token "$RUBIEN_MCP_BEARER"
|
|
29
29
|
# then: cloudflared tunnel --url http://localhost:4000
|
|
30
30
|
`;
|
|
31
31
|
function parseCliArgs(argv) {
|
package/dist/schemas.js
CHANGED
|
@@ -13,7 +13,7 @@ const isoDateString = z
|
|
|
13
13
|
.string()
|
|
14
14
|
.describe("ISO-8601 timestamp with millisecond precision, e.g. 2026-04-24T12:00:00.000Z");
|
|
15
15
|
export const CustomPropertyValueDTO = z.object({
|
|
16
|
-
propertyId: z.
|
|
16
|
+
propertyId: z.number().int(),
|
|
17
17
|
name: z.string(),
|
|
18
18
|
type: z.string(),
|
|
19
19
|
value: z.string(),
|
|
@@ -60,7 +60,7 @@ export const PropertyOptionDTO = z.object({
|
|
|
60
60
|
color: z.string(),
|
|
61
61
|
});
|
|
62
62
|
export const PropertyDefinitionDTO = z.object({
|
|
63
|
-
id: z.
|
|
63
|
+
id: z.number().int(),
|
|
64
64
|
name: z.string(),
|
|
65
65
|
type: z.string(),
|
|
66
66
|
options: z.array(PropertyOptionDTO),
|
|
@@ -69,25 +69,48 @@ export const PropertyDefinitionDTO = z.object({
|
|
|
69
69
|
defaultFieldKey: z.string().optional(),
|
|
70
70
|
isVisible: z.boolean(),
|
|
71
71
|
});
|
|
72
|
-
// PDF-download status DTO emitted by
|
|
73
|
-
// `pdf download <id>`. Mirrors PDFDownloadStatusDTO in
|
|
74
|
-
// `action` is the raw value of PDFDownloadAction (downloaded
|
|
75
|
-
// | already-pending | skipped). All fields
|
|
76
|
-
// Swift → key omitted when nil →
|
|
72
|
+
// PDF-download status DTO emitted by the create-reference resolver route's
|
|
73
|
+
// PDF fetch and by `pdf download <id>`. Mirrors PDFDownloadStatusDTO in
|
|
74
|
+
// RubienCLI.swift. `action` is the raw value of PDFDownloadAction (downloaded
|
|
75
|
+
// | replaced | already-attached | already-pending | skipped). All fields
|
|
76
|
+
// except `ok` use plain `Optional` in Swift → key omitted when nil →
|
|
77
|
+
// `.optional()` here.
|
|
77
78
|
export const PDFDownloadStatusDTO = z.object({
|
|
78
79
|
ok: z.boolean(),
|
|
79
80
|
action: z.string().optional(),
|
|
80
81
|
filename: z.string().optional(),
|
|
81
82
|
error: z.string().optional(),
|
|
82
83
|
});
|
|
83
|
-
//
|
|
84
|
-
// `
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
export const
|
|
88
|
-
reference: ReferenceDTO,
|
|
89
|
-
status: z.enum(["created", "existing"]),
|
|
90
|
-
|
|
84
|
+
// Unified create-reference envelope (spec §5.4) — one shape for every route
|
|
85
|
+
// (`add --source` / `--bibtex` / `--title`). Swift-Optional contract as
|
|
86
|
+
// everywhere: absent keys, never null. `diagnostics` appears only when the
|
|
87
|
+
// route produces it; `pdfDownload` only when a fetch was attempted.
|
|
88
|
+
export const CreateReferenceItem = z.object({
|
|
89
|
+
reference: ReferenceDTO.optional(),
|
|
90
|
+
status: z.enum(["created", "existing", "queued", "failed"]),
|
|
91
|
+
intakeId: z.number().int().optional(),
|
|
92
|
+
input: z.string(),
|
|
93
|
+
pdfDownload: PDFDownloadStatusDTO.optional(),
|
|
94
|
+
error: z.string().optional(),
|
|
95
|
+
});
|
|
96
|
+
export const CreateReferenceEnvelope = z.object({
|
|
97
|
+
items: z.array(CreateReferenceItem),
|
|
98
|
+
summary: z.object({
|
|
99
|
+
created: z.number().int(),
|
|
100
|
+
existing: z.number().int(),
|
|
101
|
+
queued: z.number().int(),
|
|
102
|
+
failed: z.number().int(),
|
|
103
|
+
}),
|
|
104
|
+
diagnostics: z
|
|
105
|
+
.object({
|
|
106
|
+
file: z.string().optional(),
|
|
107
|
+
property: z.string().optional(),
|
|
108
|
+
value: z.string().optional(),
|
|
109
|
+
attached: z.number().int().optional(),
|
|
110
|
+
duplicatesSkipped: z.number().int().optional(),
|
|
111
|
+
missingPDFs: z.array(z.string()).optional(),
|
|
112
|
+
})
|
|
113
|
+
.optional(),
|
|
91
114
|
});
|
|
92
115
|
// TagDTO retired alongside the rubien_tags_* MCP tool family. Tag rows now
|
|
93
116
|
// surface as inline options on the built-in Tags PropertyDefinition (see
|
|
@@ -130,13 +153,93 @@ export const DatabaseViewDTO = z.object({
|
|
|
130
153
|
dateCreated: isoDateString,
|
|
131
154
|
dateModified: isoDateString,
|
|
132
155
|
});
|
|
133
|
-
|
|
156
|
+
// Unified read-tool output mirrors (RubienCLI `read text` / `read annotations`).
|
|
157
|
+
// Superseded the permissive AnnotationDTO, which was retired alongside the
|
|
158
|
+
// kind-specific rubien_web_* / rubien_annotations_list tools.
|
|
159
|
+
export const ReadTextPdfOutput = z.object({
|
|
160
|
+
id: z.number().int(),
|
|
161
|
+
source: z.literal("pdf"),
|
|
162
|
+
available: z.array(z.enum(["pdf", "web"])),
|
|
163
|
+
pageCount: z.number().int(),
|
|
164
|
+
selection: z.object({
|
|
165
|
+
mode: z.string(),
|
|
166
|
+
pages: z.string().optional(),
|
|
167
|
+
requested: z.array(z.string()).optional(),
|
|
168
|
+
matchedSections: z.array(z.string()).optional(),
|
|
169
|
+
unmatched: z.array(z.string()).optional(),
|
|
170
|
+
}),
|
|
171
|
+
pages: z.array(z.object({
|
|
172
|
+
index: z.number().int(),
|
|
173
|
+
text: z.string(),
|
|
174
|
+
sectionPath: z.array(z.string()),
|
|
175
|
+
})),
|
|
176
|
+
truncated: z.boolean(),
|
|
177
|
+
hasTextLayer: z.boolean(),
|
|
178
|
+
});
|
|
179
|
+
export const ReadTextWebOutput = z.object({
|
|
180
|
+
id: z.number().int(),
|
|
181
|
+
source: z.literal("web"),
|
|
182
|
+
available: z.array(z.enum(["pdf", "web"])),
|
|
183
|
+
url: z.string().optional(),
|
|
184
|
+
siteName: z.string().optional(),
|
|
185
|
+
contentFormat: z.enum(["markdown", "html"]),
|
|
186
|
+
content: z.string(),
|
|
187
|
+
contentLength: z.number().int(),
|
|
188
|
+
start: z.number().int(),
|
|
189
|
+
returnedChars: z.number().int(),
|
|
190
|
+
truncated: z.boolean(),
|
|
191
|
+
annotationCount: z.number().int(),
|
|
192
|
+
});
|
|
193
|
+
export const ReadAnnotationItem = z.object({
|
|
194
|
+
source: z.enum(["pdf", "web"]),
|
|
134
195
|
id: z.number().int(),
|
|
135
196
|
type: z.string(),
|
|
136
|
-
color: z.string()
|
|
197
|
+
color: z.string(),
|
|
198
|
+
noteText: z.string().optional(),
|
|
199
|
+
dateCreated: isoDateString,
|
|
200
|
+
dateModified: isoDateString,
|
|
137
201
|
pageIndex: z.number().int().optional(),
|
|
138
202
|
selectedText: z.string().optional(),
|
|
139
|
-
|
|
203
|
+
anchorText: z.string().optional(),
|
|
204
|
+
prefixText: z.string().optional(),
|
|
205
|
+
suffixText: z.string().optional(),
|
|
206
|
+
});
|
|
207
|
+
// Unified grep-tool output mirrors (RubienCLI `grep <id> <query>`). PDF hits are
|
|
208
|
+
// page-grouped (PageSearchHit); web hits carry character offsets (GrepWebMatch).
|
|
209
|
+
export const GrepTextPdfOutput = z.object({
|
|
210
|
+
id: z.number().int(),
|
|
211
|
+
source: z.literal("pdf"),
|
|
212
|
+
available: z.array(z.enum(["pdf", "web"])),
|
|
213
|
+
query: z.string(),
|
|
214
|
+
isRegex: z.boolean(),
|
|
215
|
+
pageCount: z.number().int(),
|
|
216
|
+
hasTextLayer: z.boolean(),
|
|
217
|
+
totalMatches: z.number().int(),
|
|
218
|
+
totalMatchingPages: z.number().int(),
|
|
219
|
+
truncated: z.boolean(),
|
|
220
|
+
pages: z.array(z.object({
|
|
221
|
+
page: z.number().int(),
|
|
222
|
+
sectionPath: z.array(z.string()),
|
|
223
|
+
matchCount: z.number().int(),
|
|
224
|
+
snippetsTruncated: z.boolean(),
|
|
225
|
+
snippets: z.array(z.string()),
|
|
226
|
+
})),
|
|
227
|
+
});
|
|
228
|
+
export const GrepTextWebOutput = z.object({
|
|
229
|
+
id: z.number().int(),
|
|
230
|
+
source: z.literal("web"),
|
|
231
|
+
available: z.array(z.enum(["pdf", "web"])),
|
|
232
|
+
query: z.string(),
|
|
233
|
+
isRegex: z.boolean(),
|
|
234
|
+
contentLength: z.number().int(),
|
|
235
|
+
totalMatches: z.number().int(),
|
|
236
|
+
totalEntries: z.number().int(),
|
|
237
|
+
truncated: z.boolean(),
|
|
238
|
+
matches: z.array(z.object({
|
|
239
|
+
start: z.number().int().nonnegative(),
|
|
240
|
+
matchCount: z.number().int(),
|
|
241
|
+
snippet: z.string(),
|
|
242
|
+
})),
|
|
140
243
|
});
|
|
141
244
|
export const StyleDTO = z.object({
|
|
142
245
|
id: z.string(),
|
|
@@ -159,8 +262,8 @@ export const SyncStatusDTO = z
|
|
|
159
262
|
})
|
|
160
263
|
.passthrough(); // sync status is relatively fluid; keep forward-compat
|
|
161
264
|
export const DeleteResultDTO = z.object({ deleted: z.string() });
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
265
|
+
// (ImportResultDTO removed with the `import` subcommand; CliErrorDTO removed
|
|
266
|
+
// with the verbatim-stderr change — errors are now raw envelope text, which
|
|
267
|
+
// may be a structured `{error, ids, names}` / `{items, summary}` shape, not a
|
|
268
|
+
// plain `{error}` object.)
|
|
166
269
|
//# sourceMappingURL=schemas.js.map
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|