@vectros-ai/mcp-server 0.5.3 → 0.7.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/CHANGELOG.md CHANGED
@@ -3,6 +3,81 @@
3
3
  All notable changes to `@vectros-ai/mcp-server` are documented here.
4
4
  This project adheres to [Semantic Versioning](https://semver.org).
5
5
 
6
+ ## 0.7.0 — 2026-07-05
7
+
8
+ Text-retention control that works, and tool descriptions that tell the truth
9
+ about it.
10
+
11
+ ### Added
12
+
13
+ - **`storeText` works in file mode on `document_ingest`.** The flag was advertised but silently
14
+ dropped on file uploads; it now forwards your retention choice. Default `true` keeps the
15
+ extracted text available to `document_get(includeText: true)` and `document_ask`; `false`
16
+ discards it once indexing completes (search and the original-file download keep working).
17
+ Fixed at ingest — a re-ingest of the same document keeps the original choice.
18
+
19
+ ### Changed
20
+
21
+ - **`document_update` no longer accepts `storeText`** — retention is immutable after ingest, so
22
+ the input was misleading (the server now rejects such updates).
23
+ - `document_ingest`, `document_get`, and `document_update` descriptions rewritten to the real
24
+ retention semantics: text-mode bodies are always retained; text availability on
25
+ `document_get` reflects whether the text actually exists.
26
+
27
+ ## 0.6.0 — 2026-07-03
28
+
29
+ Curation-focused tool improvements: look records and documents up by your own
30
+ identifier, re-sync a changed body, archive and restore documents without delete
31
+ authority, and get a clear error when an argument is wrong.
32
+
33
+ ### Added
34
+
35
+ - **`externalId` selector on `record_get`, `record_update`, `document_get`, and
36
+ `document_update`.** Pass `externalId` together with `type` as an alternative to the
37
+ Vectros `id` — the tool resolves it for you, so an agent that only knows its own
38
+ identifier no longer has to make a separate lookup call first. `id` still works and
39
+ takes precedence when both are supplied.
40
+ - **`upsert` on `document_ingest`.** With `upsert: true`, ingesting a document whose
41
+ `externalId` already exists overwrites its stored content and re-indexes it, instead
42
+ of returning the existing document unchanged. Re-supply the same `schemaId` so the
43
+ `externalId` resolves within the same type.
44
+ - **`text` on `document_update`.** Replace a text document's body in place; the document
45
+ is re-queued for indexing so search reflects the new content.
46
+ - **`status` on `document_update` — archive and restore a document.** Set
47
+ `status: "ARCHIVED"` to soft-retract a document: it is pulled from search and recall
48
+ but kept and recoverable. Set `status: "ACTIVE"` to re-index and restore it. This is
49
+ the way to retire superseded content with a credential that has no delete authority.
50
+ Document reads (`document_get`, `document_query`) surface the caller-controlled
51
+ lifecycle `status` alongside the read-only processing `indexStatus`.
52
+ - **`hybrid_search` results are now sized for an agent's context window.** Each hit returns
53
+ its matched `chunkText` plus a short `snippet` by default; the broader surrounding passage
54
+ (`contextText`) is opt-in via **`includeContext: true`** (and is de-duplicated against
55
+ `chunkText` when included, so the same text is never sent twice). Internal search-index
56
+ bookkeeping fields (`tenantId`, `owner_id`, `model_type`, `rootFolderId`, `folderId`) are
57
+ stripped from each hit's `metadata`, keeping the fields you ingested. An oversized response
58
+ is trimmed to the top hits with **`truncated: true`** so one search can't overflow the
59
+ context window. A **`textLegEmpty: true`** flag signals that the keyword (BM25) leg matched
60
+ nothing across every hit — usually a long natural-language query under the default
61
+ `PHRASE` matching; retry with a short keyword phrase or `textMode: "OR"`.
62
+
63
+ ### Changed
64
+
65
+ - Updated the bundled `@vectros-ai/sdk` to **0.32.0**, keeping the server aligned
66
+ with the current Vectros API (adds the document lifecycle `status` field, kept
67
+ distinct from the processing `indexStatus`).
68
+ - **Document responses keep the two status axes separate.** `status` is the
69
+ caller-controlled lifecycle (`ACTIVE`/`ARCHIVED`); `indexStatus` is the read-only
70
+ processing state (`PENDING_INDEX`, `INDEXED`, …), matching the current API.
71
+ `document_ingest`'s file mode accordingly reports its "uploaded, indexing queued"
72
+ marker as `indexStatus: "PENDING_INDEX"` — previously it overwrote `status` with
73
+ that value. Poll `document_get` until `indexStatus` is `INDEXED`.
74
+ - **Unknown arguments are now rejected, not ignored.** Calling a tool with an argument
75
+ it does not accept returns an error that names the unrecognized key and lists the
76
+ valid arguments for that tool, instead of silently dropping it. This surfaces typos
77
+ and stale parameter names immediately rather than letting a call quietly do the wrong
78
+ thing. `record_query`'s `field` documentation now also calls out that `externalId` is
79
+ always queryable.
80
+
6
81
  ## 0.5.3 — 2026-06-29
7
82
 
8
83
  SDK refresh. No tool, parameter, or result shapes changed.
package/README.md CHANGED
@@ -55,6 +55,21 @@ developer portal. The command then:
55
55
  Restart your MCP client and you're done. It's idempotent (re-run any time);
56
56
  `--rotate` replaces this machine's key.
57
57
 
58
+ **Want to browse the data yourself?** `bootstrap` sets up the key for your
59
+ *agent*, not a login for *you* — so a blueprint's context won't appear in the
60
+ data-plane app's switcher until you join your own user to it (the app lists only
61
+ contexts your user has access in). Grant yourself a role once, either in the admin
62
+ app (**Access → Contexts → _your context_ → Profiles → Create profile**, pick
63
+ yourself from the by-email picker, choose a role — no raw id needed) or from the
64
+ CLI with `--principal me` (resolves to your own user):
65
+
66
+ ```bash
67
+ vectros access grant --principal me --context <context-id> --role <role>
68
+ ```
69
+
70
+ Blueprints that ship a human role (e.g. `agentic-sdlc`'s `editor`) let you use
71
+ `--role`; otherwise grant inline scopes with `--actions records:r,search:r,…`.
72
+
58
73
  For scripted / agent use, set the sign-in token in the environment and skip
59
74
  the prompts:
60
75
 
@@ -181,8 +196,8 @@ available.
181
196
  |---|---|
182
197
  | `document_ingest` | Create a document — inline text body OR local file upload (file mode is stdio-transport only). Idempotent by `externalId`; optional `schemaId` + `payload` for a typed, lookup-queryable document. |
183
198
  | `document_query` | Query documents by lookup field (equality / range / prefix, with `asc`/`desc` ordering) or list mode (filter by ownership + type). |
184
- | `document_get` | Fetch a document by id (metadata; optional text truncated at ~8K tokens; optional presigned `downloadUrl` for file-backed documents). |
185
- | `document_update` | Patch a document's metadata / typed payload (deep-merged); optimistic concurrency via `expectedVersion`. |
199
+ | `document_get` | Fetch a document by id (metadata incl. lifecycle `status` + processing `indexStatus`; optional text truncated at ~8K tokens; optional presigned `downloadUrl` for file-backed documents). |
200
+ | `document_update` | Patch a document's metadata / typed payload (deep-merged); archive/restore via `status` (`ARCHIVED` soft-retracts from search, `ACTIVE` restores); optimistic concurrency via `expectedVersion`. |
186
201
  | `document_delete` | Permanently delete a document by id (removes it and its indexed content). |
187
202
 
188
203
  **Folders** (group records + documents)