rubien-mcp-server 0.2.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.
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { flagsFromOptions, runCliAsTool } from "../toolHelpers.js";
3
3
  export function registerReferenceTools(server) {
4
- server.registerTool("rubien_search", {
4
+ server.registerTool("rubien_search_references", {
5
5
  title: "Full-text search",
6
6
  description: "Full-text search across the Rubien library. By default searches all 12 indexed FTS columns (title, authors, abstract, notes, journal, doi, publisher, isbn, issn, institution, webContent, siteName). Use `in` to constrain to specific columns — e.g. `in: ['title','abstract']` for topic searches that should ignore notes/web content. Use `op: 'or'` when looking for any of several alternative terms instead of all of them. Returns an array of ReferenceDTO.",
7
7
  inputSchema: {
@@ -40,13 +40,15 @@ export function registerReferenceTools(server) {
40
40
  "--op": op,
41
41
  }),
42
42
  ]));
43
- server.registerTool("rubien_list", {
43
+ server.registerTool("rubien_list_references", {
44
44
  title: "List references",
45
- description: "List references with filters and sorting. Returns ReferenceDTO[]. Use this for 'most recent', 'by author', 'by year range' queries.",
45
+ description: "List references with filters and sorting, or run a saved view. Returns ReferenceDTO[]. Use this for 'most recent', 'by author', 'by year range' queries. Pass `view` (a saved-view id from rubien_list_views) to run that view's persisted filter/sort config instead — `view` is mutually exclusive with the inline filter/sort params (limit/offset still apply).",
46
46
  inputSchema: {
47
47
  limit: z.number().int().nonnegative().optional()
48
48
  .describe("Maximum results (0 = all)"),
49
49
  offset: z.number().int().nonnegative().optional().describe("Skip first N"),
50
+ view: z.number().int().optional()
51
+ .describe("Saved view ID — rows filtered/sorted by that view. Mutually exclusive with the inline filter/sort params below. Discover ids via rubien_list_views."),
50
52
  tag: z.number().int().optional().describe("Filter by tag ID"),
51
53
  author: z.string().optional().describe("Filter by author name (fuzzy)"),
52
54
  yearFrom: z.number().int().optional(),
@@ -56,8 +58,9 @@ export function registerReferenceTools(server) {
56
58
  hasPdf: z.boolean().optional(),
57
59
  keyword: z.string().optional().describe("Keyword across title/abstract/notes"),
58
60
  readingStatus: z
59
- .enum(["unread", "reading", "skimmed", "read"])
60
- .optional(),
61
+ .string()
62
+ .optional()
63
+ .describe("Filter by reading status. Validated live against the user-extensible Status options (case-sensitive) — see rubien_list_properties for the current set."),
61
64
  sortBy: z
62
65
  .enum(["year", "dateAdded", "title"])
63
66
  .optional(),
@@ -69,6 +72,7 @@ export function registerReferenceTools(server) {
69
72
  ...flagsFromOptions({
70
73
  "--limit": args.limit,
71
74
  "--offset": args.offset,
75
+ "--view": args.view,
72
76
  "--tag": args.tag,
73
77
  "--author": args.author,
74
78
  "--year-from": args.yearFrom,
@@ -82,7 +86,7 @@ export function registerReferenceTools(server) {
82
86
  "--asc": args.asc,
83
87
  }),
84
88
  ]));
85
- server.registerTool("rubien_get", {
89
+ server.registerTool("rubien_get_reference", {
86
90
  title: "Get reference by ID",
87
91
  description: "Fetch a single reference by ID. Returns ReferenceDTO.",
88
92
  inputSchema: {
@@ -90,52 +94,93 @@ export function registerReferenceTools(server) {
90
94
  },
91
95
  annotations: { readOnlyHint: true },
92
96
  }, async ({ id }) => runCliAsTool(["get", String(id)]));
93
- server.registerTool("rubien_add", {
94
- title: "Add reference",
95
- description: "Create a reference (or surface an existing one). Choose one input method: identifier (DOI/arXiv/PMID/ISBN, triggers metadata lookup, slow), bibtex (inline BibTeX/BibLaTeX string, returns array of envelopes for multi-entry), or title (minimal manual entry). Output is an envelope: `{ reference: ReferenceDTO, status: 'created' | 'existing', pdfDownload: { ok, action?, filename?, error? } | null }`. `status='existing'` means the input matched an existing row (deduped by normalized DOI / PMID / PMCID / ISBN / URL / ISSN+title+year); `mergedReference` folded any non-empty incoming fields into the existing row, and `reference.id` is the existing row's id. `pdfDownload` is always present: `null` unless `downloadPdf: true` was set (identifier only). For `method='bibtex'`, output is an array of envelopes, one per parsed entry.",
97
+ server.registerTool("rubien_create_reference", {
98
+ title: "Create reference (one door: locator, BibTeX, or title)",
99
+ description: "Create reference(s) — one door for every input. Pass exactly one of: `source` (ANY locator — DOI / arXiv / PMID / PMCID / ISBN, paper URL, PDF/Markdown file URL, local file path, or folder path; the CLI routes it), `bibtex` (inline BibTeX, can hold multiple entries), or `title` (minimal manual row). May return MULTIPLE items (multi-entry BibTeX, folders) and may return `status: 'existing'` instead of creating — the input matched an existing row (deduped by normalized DOI / PMID / PMCID / ISBN / URL / ISSN+title+year) and non-empty incoming fields were folded into it. Output envelope: `{ items: [{ reference?, status: 'created'|'existing'|'queued'|'failed', intakeId?, input, pdfDownload?, error? }], summary: {created, existing, queued, failed}, diagnostics? }`. Routing notes: an existing local path wins over an identifier-shaped string (escape a DOI as https://doi.org/…); a registered-host .pdf URL resolves metadata AND attaches the PDF (implied downloadPdf); an unregistered .pdf/.md URL is downloaded and imported directly. To fetch a PDF for a reference that already exists, use rubien_download_pdf instead.",
96
100
  inputSchema: {
97
- method: z.enum(["identifier", "bibtex", "title"]),
98
- value: z
101
+ source: z
99
102
  .string()
100
- .describe("The identifier / BibTeX source / title, depending on method."),
103
+ .optional()
104
+ .describe("Any locator: identifier (DOI/arXiv/PMID/PMCID/ISBN), paper URL, PDF/Markdown file URL, absolute file path, or folder path. Stdin ('-') is not supported over MCP."),
105
+ bibtex: z
106
+ .string()
107
+ .optional()
108
+ .describe("Inline BibTeX source (can hold multiple entries; persists per entry, continuing past entry failures)"),
109
+ title: z.string().optional().describe("Title for a minimal manual entry"),
101
110
  downloadPdf: z
102
111
  .boolean()
103
112
  .optional()
104
- .describe("Only valid with method='identifier'. After metadata lookup, attempt to fetch the open-access PDF. Reference is still saved if the PDF fetch fails. Adds up to ~3min to the timeout."),
113
+ .describe("Resolver routes only (identifier / paper-URL source). true = fetch the open-access PDF after resolution; false = explicitly skip (overrides the implied fetch on registered .pdf URLs); absent = the router decides. The reference is saved even if the fetch fails. Adds up to ~3min."),
114
+ format: z
115
+ .enum(["bib", "ris", "md"])
116
+ .optional()
117
+ .describe("File/stdin routes only: format hint; disambiguates a folder holding both .bib and .md."),
118
+ property: z
119
+ .string()
120
+ .optional()
121
+ .describe("Folder route only: property to stamp on every imported reference (default: Tags)"),
122
+ value: z
123
+ .string()
124
+ .optional()
125
+ .describe("Folder route only: value to stamp on `property` (default: folder basename)"),
105
126
  },
106
127
  annotations: { readOnlyHint: false, destructiveHint: false },
107
- }, async ({ method, value, downloadPdf }) => {
108
- if (downloadPdf && method !== "identifier") {
128
+ }, async ({ source, bibtex, title, downloadPdf, format, property, value }) => {
129
+ const inputs = [source, bibtex, title].filter((v) => v !== undefined);
130
+ if (inputs.length !== 1) {
109
131
  return {
110
132
  content: [
111
133
  {
112
134
  type: "text",
113
135
  text: JSON.stringify({
114
- error: "downloadPdf requires method='identifier'",
136
+ error: "provide exactly one of source / bibtex / title",
115
137
  }),
116
138
  },
117
139
  ],
118
140
  isError: true,
119
141
  };
120
142
  }
121
- const flag = method === "identifier"
122
- ? "--identifier"
123
- : method === "bibtex"
124
- ? "--bibtex"
125
- : "--title";
126
- const args = ["add", flag, value];
127
- if (downloadPdf)
143
+ // Trim before comparing: the CLI trims the source, so a bare " - "
144
+ // would otherwise slip past this guard and reach stdin routing (which
145
+ // hangs over MCP — the wrapper closes the child's stdin).
146
+ if (source?.trim() === "-") {
147
+ return {
148
+ content: [
149
+ {
150
+ type: "text",
151
+ text: JSON.stringify({
152
+ error: "stdin ('-') is not supported over MCP — pass a file path, URL, or identifier, or invoke rubien-cli directly",
153
+ }),
154
+ },
155
+ ],
156
+ isError: true,
157
+ };
158
+ }
159
+ const args = ["add"];
160
+ if (source !== undefined)
161
+ args.push("--source", source);
162
+ if (bibtex !== undefined)
163
+ args.push("--bibtex", bibtex);
164
+ if (title !== undefined)
165
+ args.push("--title", title);
166
+ // Tri-state: absent = router decides; the inversion pair makes
167
+ // "explicitly false" representable (overrides implied fetch).
168
+ if (downloadPdf === true)
128
169
  args.push("--download-pdf");
129
- const timeoutMs = downloadPdf
130
- ? 300_000
131
- : method === "identifier"
132
- ? 120_000
133
- : undefined;
134
- return runCliAsTool(args, { timeoutMs });
170
+ else if (downloadPdf === false)
171
+ args.push("--no-download-pdf");
172
+ args.push(...flagsFromOptions({
173
+ "--format": format,
174
+ "--property": property,
175
+ "--value": value,
176
+ }));
177
+ // Route-independent 300s: a thin wrapper can't pick per-route before
178
+ // the CLI routes (max of identity-add 120-300s and import 180s).
179
+ return runCliAsTool(args, { timeoutMs: 300_000 });
135
180
  });
136
- server.registerTool("rubien_update", {
137
- title: "Update reference fields",
138
- description: "Modify fields on an existing reference. Pass only the fields to change. Use `clearField` (repeatable) to null out a field entirely.",
181
+ server.registerTool("rubien_update_reference", {
182
+ title: "Update reference fields and property cells",
183
+ description: "Modify an existing reference: metadata fields (pass only what changes), `clearFields` to null fields out, and/or `properties` — a cell payload editing built-in and custom property values in ONE atomic call. Payload keys are property names (exact, case-sensitive) or ids (digit-only strings); values: scalar = replace, array = replace multiSelect set, {add:[…], remove:[…]} = incremental multiSelect edit (idempotent), null = clear. For the built-in Tags property, values are stringified tag ids. This edits the VALUES on this reference — to create/rename/delete the choices themselves (options/tags), use rubien_create_option / rubien_update_option / rubien_delete_option. Unknown keys, read-only built-ins (Last Read, Read Count), and type mismatches fail the whole call with a structured error — nothing is partially applied.",
139
184
  inputSchema: {
140
185
  id: z.number().int(),
141
186
  title: z.string().optional(),
@@ -156,12 +201,29 @@ export function registerReferenceTools(server) {
156
201
  language: z.string().optional(),
157
202
  edition: z.string().optional(),
158
203
  readingStatus: z
159
- .enum(["unread", "reading", "skimmed", "read"])
160
- .optional(),
161
- clearField: z.array(z.string()).optional()
162
- .describe("Field names to clear (set to NULL). Repeatable."),
204
+ .string()
205
+ .optional()
206
+ .describe("New reading status. Validated live against the user-extensible Status options (case-sensitive)."),
207
+ clearFields: z.array(z.string()).optional()
208
+ .describe("Field names to clear (set to NULL)."),
209
+ properties: z
210
+ .record(z.union([
211
+ z.string(),
212
+ z.number(),
213
+ z.boolean(),
214
+ z.null(),
215
+ z.array(z.string()),
216
+ z
217
+ .object({
218
+ add: z.array(z.string()).optional(),
219
+ remove: z.array(z.string()).optional(),
220
+ })
221
+ .strict(),
222
+ ]))
223
+ .optional()
224
+ .describe("Property-cell edits keyed by property name or id: scalar/array = replace, {add/remove} = incremental multiSelect edit, null = clear. Example: {\"Status\": \"Reading\", \"Tags\": {\"add\": [\"12\"]}, \"7\": [\"ml\", \"nlp\"], \"Themes\": null}"),
163
225
  },
164
- annotations: { destructiveHint: true },
226
+ annotations: { readOnlyHint: false, destructiveHint: true },
165
227
  }, async (args) => {
166
228
  const flags = flagsFromOptions({
167
229
  "--title": args.title,
@@ -183,13 +245,20 @@ export function registerReferenceTools(server) {
183
245
  "--edition": args.edition,
184
246
  "--reading-status": args.readingStatus,
185
247
  });
186
- if (args.clearField) {
187
- for (const f of args.clearField)
248
+ if (args.clearFields) {
249
+ for (const f of args.clearFields)
188
250
  flags.push("--clear-field", f);
189
251
  }
252
+ // Forward even an empty `{}`: the CLI routes any `--properties` through
253
+ // the unified applyReferenceEdit no-op path (writes nothing when the
254
+ // payload is empty), whereas dropping it would fall to the legacy
255
+ // update that unconditionally saves + notifies.
256
+ if (args.properties !== undefined) {
257
+ flags.push("--properties", JSON.stringify(args.properties));
258
+ }
190
259
  return runCliAsTool(["update", String(args.id), ...flags]);
191
260
  });
192
- server.registerTool("rubien_delete", {
261
+ server.registerTool("rubien_delete_reference", {
193
262
  title: "Delete references",
194
263
  description: "Permanently delete references by ID. Accepts one or many IDs. Returns { deleted: 'id1,id2,...' }.",
195
264
  inputSchema: {
@@ -198,7 +267,11 @@ export function registerReferenceTools(server) {
198
267
  .min(1)
199
268
  .describe("One or more reference IDs to delete"),
200
269
  },
201
- annotations: { destructiveHint: true, idempotentHint: false },
270
+ annotations: {
271
+ readOnlyHint: false,
272
+ destructiveHint: true,
273
+ idempotentHint: false,
274
+ },
202
275
  },
203
276
  // Always passes --force: the MCP client's permission layer is the user
204
277
  // confirmation point for destructive tools, not the CLI's TTY prompt.
@@ -1 +1 @@
1
- {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/tools/references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/tools/references.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { runCliAsTool } from "../toolHelpers.js";
2
2
  export function registerSyncTools(server) {
3
- server.registerTool("rubien_sync_status", {
3
+ server.registerTool("rubien_get_sync_status", {
4
4
  title: "CloudKit sync status",
5
5
  description: "Report the current CloudKit sync state without starting the engine. Shows entitlement presence, iCloud account availability, dirty counts per entity type, tombstones, and engine state snapshot.",
6
6
  inputSchema: {},
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/tools/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,mMAAmM;QACrM,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC7C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/tools/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,mMAAmM;QACrM,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC7C,CAAC;AACJ,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { z } from "zod";
2
2
  import { flagsFromOptions, runCliAsTool } from "../toolHelpers.js";
3
3
  export function registerViewTools(server) {
4
- server.registerTool("rubien_views_list", {
4
+ server.registerTool("rubien_list_views", {
5
5
  title: "List saved views",
6
- description: "List saved database views (persisted filter/sort/group configurations). Returns DatabaseViewDTO[].",
6
+ description: "List saved database views (persisted filter/sort/group configurations). Returns DatabaseViewDTO[]. To run a view (get its matching references), pass its id as `view` to rubien_list_references.",
7
7
  inputSchema: {},
8
8
  annotations: { readOnlyHint: true },
9
9
  }, async () => runCliAsTool(["views"]));
10
- server.registerTool("rubien_views_create", {
10
+ server.registerTool("rubien_create_view", {
11
11
  title: "Create saved view",
12
- description: "Create a new saved view. filters / sorts / groupBy must be valid JSON matching the view configuration schema (mirrors what the GUI editor produces). Use rubien_views_list first to see the shape.",
12
+ description: "Create a new saved view. filters / sorts / groupBy must be valid JSON matching the view configuration schema (mirrors what the GUI editor produces). Use rubien_list_views first to see the shape.",
13
13
  inputSchema: {
14
14
  name: z.string(),
15
15
  filters: z
@@ -25,6 +25,7 @@ export function registerViewTools(server) {
25
25
  .optional()
26
26
  .describe("JSON string: GroupConfig"),
27
27
  },
28
+ annotations: { readOnlyHint: false, destructiveHint: false },
28
29
  }, async ({ name, filters, sorts, groupBy }) => runCliAsTool([
29
30
  "views",
30
31
  "--create",
@@ -35,44 +36,26 @@ export function registerViewTools(server) {
35
36
  "--group-by": groupBy,
36
37
  }),
37
38
  ]));
38
- server.registerTool("rubien_views_delete", {
39
- title: "Delete saved view",
40
- description: "Remove a saved view by ID.",
41
- inputSchema: { id: z.number().int() },
42
- annotations: { destructiveHint: true },
43
- }, async ({ id }) => runCliAsTool(["views", "--delete", "--id", String(id)]));
44
- server.registerTool("rubien_views_rename", {
45
- title: "Rename saved view",
39
+ server.registerTool("rubien_update_view", {
40
+ title: "Update saved view (rename)",
46
41
  description: "Change a saved view's name.",
47
42
  inputSchema: { id: z.number().int(), name: z.string() },
43
+ annotations: { readOnlyHint: false, destructiveHint: false },
48
44
  }, async ({ id, name }) => runCliAsTool([
49
45
  "views",
50
46
  "--rename",
51
- "--id",
52
47
  String(id),
53
48
  "--name",
54
49
  name,
55
50
  ]));
56
- server.registerTool("rubien_views_query", {
57
- title: "Query a saved view",
58
- description: "Run a saved view's filter/sort config and return the matching references. Equivalent to opening the view in the GUI.",
59
- inputSchema: {
60
- id: z.number().int(),
61
- limit: z
62
- .number()
63
- .int()
64
- .positive()
65
- .max(1000)
66
- .optional()
67
- .describe("Result cap (default 100)"),
68
- },
69
- annotations: { readOnlyHint: true },
70
- }, async ({ id, limit }) => runCliAsTool([
71
- "views",
72
- "--query",
73
- "--id",
74
- String(id),
75
- ...flagsFromOptions({ "--limit": limit }),
76
- ]));
51
+ server.registerTool("rubien_delete_view", {
52
+ title: "Delete saved view",
53
+ description: "Remove a saved view by ID.",
54
+ inputSchema: { id: z.number().int() },
55
+ annotations: { readOnlyHint: false, destructiveHint: true },
56
+ },
57
+ // NB: `--delete` takes the id as its value (`views --delete <id>`) — the
58
+ // 0.2.0 wrapper's `--delete --id <id>` form never parsed.
59
+ async ({ id }) => runCliAsTool(["views", "--delete", String(id)]));
77
60
  }
78
61
  //# sourceMappingURL=views.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/tools/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/tools/views.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,kMAAkM;QACpM,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CACpC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,oMAAoM;QACtM,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2BAA2B,CAAC;YACxC,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,yBAAyB,CAAC;YACtC,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0BAA0B,CAAC;SACxC;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;KAC7D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1C,YAAY,CACV;QACE,OAAO;QACP,UAAU;QACV,GAAG,gBAAgB,CAAC;YAClB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,OAAO;SACtB,CAAC;KACH,CACF,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;QACvD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;KAC7D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACrB,YAAY,CAAC;QACX,OAAO;QACP,UAAU;QACV,MAAM,CAAC,EAAE,CAAC;QACV,QAAQ;QACR,IAAI;KACL,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QACrC,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE;KAC5D;IACD,yEAAyE;IACzE,0DAA0D;IAC1D,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CACf,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC"}
@@ -1,10 +1,12 @@
1
1
  /**
2
- * The minimum rubien-cli build this server requires. Equals the release build
3
- * that first shipped `grep`. Bump only when a future server release genuinely
4
- * needs a newer CLI feature; the released CLI's build must always be >= this
5
- * value.
2
+ * The minimum rubien-cli build this server requires. Equals the build that
3
+ * shipped the unified {op}_{target} surface (add --source one-door, update
4
+ * --properties, properties --update/--update-option, list --view) that the
5
+ * 0.3.0 catalog shells out to. Bump only when a future server release
6
+ * genuinely needs a newer CLI feature; the released CLI's build must always
7
+ * be >= this value.
6
8
  */
7
- export const MIN_CLI_BUILD = 21;
9
+ export const MIN_CLI_BUILD = 26;
8
10
  const RELEASES = "https://github.com/devzhk/Rubien-releases/releases";
9
11
  /** Pure decision: is the discovered CLI new enough? `info` is null when the
10
12
  * CLI has no `version` subcommand (i.e. predates this mechanism). */
@@ -1 +1 @@
1
- {"version":3,"file":"versionGuard.js","sourceRoot":"","sources":["../src/versionGuard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAYhC,MAAM,QAAQ,GAAG,oDAAoD,CAAC;AAEtE;sEACsE;AACtE,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,QAAgB;IAEhB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,yDAAyD;gBACzD,oDAAoD;gBACpD,+DAA+D,QAAQ,WAAW;SACrF,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,oDAAoD,IAAI,CAAC,KAAK,IAAI;gBAClE,kCAAkC,QAAQ,IAAI;gBAC9C,+DAA+D,QAAQ,WAAW;SACrF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"versionGuard.js","sourceRoot":"","sources":["../src/versionGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAYhC,MAAM,QAAQ,GAAG,oDAAoD,CAAC;AAEtE;sEACsE;AACtE,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,QAAgB;IAEhB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,yDAAyD;gBACzD,oDAAoD;gBACpD,+DAA+D,QAAQ,WAAW;SACrF,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,oDAAoD,IAAI,CAAC,KAAK,IAAI;gBAClE,kCAAkC,QAAQ,IAAI;gBAC9C,+DAA+D,QAAQ,WAAW;SACrF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,24 @@
1
1
  {
2
2
  "name": "rubien-mcp-server",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server wrapping rubien-cli so Claude Code and claude.ai can manage the Rubien reference library.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "devzhk",
7
7
  "homepage": "https://github.com/devzhk/Rubien-releases#readme",
8
- "repository": { "type": "git", "url": "git+https://github.com/devzhk/Rubien-releases.git" },
9
- "bugs": { "url": "https://github.com/devzhk/Rubien-releases/issues" },
10
- "keywords": ["mcp", "model-context-protocol", "rubien", "reference-manager", "citations"],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/devzhk/Rubien-releases.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/devzhk/Rubien-releases/issues"
14
+ },
15
+ "keywords": [
16
+ "mcp",
17
+ "model-context-protocol",
18
+ "rubien",
19
+ "reference-manager",
20
+ "citations"
21
+ ],
11
22
  "type": "module",
12
23
  "bin": {
13
24
  "rubien-mcp-server": "dist/index.js"