@thalovant/mcp-server 0.6.3 → 0.6.4

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
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.4 — 2026-10-19
4
+
5
+ - **Descriptions that say what a runtime tool changes.** `thalovant_send_action`, `thalovant_send_code` and `thalovant_wait_for_event` had one-line descriptions that didn't say whether the tool changes anything. A scanner that reads only names and descriptions rated all three as high-risk tools that execute, `thalovant_wait_for_event` included, though it was already annotated `readOnlyHint: true`. `thalovant_send_action` now says the hub routes its payload like a spoken request, so a skill may act on it. `thalovant_send_code` says the hub receives its value as an exact utterance, and both say they return without waiting for a reply and that `THALOVANT_MCP_READONLY` leaves them out. `thalovant_wait_for_event` says it only listens and sends the hub nothing, and that `sessionId`, `requestId` and `context` filter which events count. `payload`, `title`, `value`, `kind`, `label` and `eventName` now have their own descriptions. Schemas, annotations and behaviour are unchanged.
6
+ - The Claude Desktop and Codex examples start the published package with `npx -y @thalovant/mcp-server`. They used to point at a path on one developer's machine.
7
+ - `package.json`, `server.json`, the OCI label, the README and this file move to 0.6.4 together.
8
+
3
9
  ## 0.6.3 — 2026-10-11
4
10
 
5
11
  - **Sentences in the language the hub answers in.** `thalovant_intent_inventory` takes `@thalovant/sdk` 0.9.9, which lists a language the hub never loaded in one of the hub's own languages: the same language in another region first, then the hub's own language, then the one with the most sentences. A hub loads its `lang` and `secondary_langs` and lists nothing under any other tag, so on 2026-10-11 a ja-JP, es-ES or de-DE request came back empty on every public hub, even though the hub answers those people. The output's `listed_in` names the language each requested language was listed in. `examples` are now rendered from that language (they used to be rendered from the requested tag and came back empty). `presentation.notes` says when the sentences are in another language, so an agent can tell the user.
package/README.md CHANGED
@@ -24,6 +24,8 @@ Thalovant publishes SDKs for Python, Node.js, Go, and Rust. This server uses Nod
24
24
 
25
25
  ## Install
26
26
 
27
+ Run the published package with `npx -y @thalovant/mcp-server`, or build it from a checkout:
28
+
27
29
  ```bash
28
30
  npm install
29
31
  npm run build
@@ -308,8 +310,8 @@ Recommended: authenticate with a scoped API token so the MCP config never contai
308
310
  {
309
311
  "mcpServers": {
310
312
  "thalovant": {
311
- "command": "node",
312
- "args": ["/home/goldyfruit/Development/Thalovant/mcp/dist/index.js"],
313
+ "command": "npx",
314
+ "args": ["-y", "@thalovant/mcp-server"],
313
315
  "env": {
314
316
  "THALOVANT_API_TOKEN": "tvpat_...",
315
317
  "THALOVANT_PROFILE": "prod"
@@ -327,8 +329,8 @@ Use the same stdio command in your MCP client config:
327
329
  {
328
330
  "mcpServers": {
329
331
  "thalovant": {
330
- "command": "node",
331
- "args": ["/home/goldyfruit/Development/Thalovant/mcp/dist/index.js"],
332
+ "command": "npx",
333
+ "args": ["-y", "@thalovant/mcp-server"],
332
334
  "env": {
333
335
  "THALOVANT_API_TOKEN": "tvpat_...",
334
336
  "THALOVANT_PROFILE": "prod"
@@ -538,7 +540,7 @@ Runtime calls sharing the same hub client identity run sequentially within one
538
540
  MCP process. Use a distinct client identity for each independently running MCP
539
541
  server so the hub can keep their sessions separate.
540
542
 
541
- Version 0.6.3 requires `@thalovant/sdk` `^0.9.9` (0.9.9 through versions below 0.10.0). Since 0.5.1 the server enforces
543
+ Version 0.6.4 requires `@thalovant/sdk` `^0.9.9` (0.9.9 through versions below 0.10.0). Since 0.5.1 the server enforces
542
544
  secure effective MQTT URLs and carries a single connection deadline through
543
545
  MQTT setup and HTTP failure cleanup. Runtime tools support
544
546
  HiveMind v3 Noise over WSS, HTTPS and MQTT over TLS. `thalovant_healthcheck`
package/dist/index.js CHANGED
@@ -1717,11 +1717,11 @@ export function createServer() {
1717
1717
  });
1718
1718
  registerThalovantTool(server, "thalovant_send_action", {
1719
1719
  title: "Send Action",
1720
- description: "Send a structured action payload to a Thalovant hub.",
1720
+ description: "Send one action to a Thalovant hub using a saved identity, the way a button or a shortcut would. The hub routes payload like a spoken request, so the skill that takes it can change things: switch a light, start a timer, play music. Returns once the action is sent, without waiting for the reply; use thalovant_ask to read the answer. THALOVANT_MCP_READONLY leaves this tool out.",
1721
1721
  inputSchema: {
1722
1722
  ...runtimeAuthSchema,
1723
- payload: z.string().min(1).max(20_000),
1724
- title: z.string().min(1).max(512).optional(),
1723
+ payload: z.string().min(1).max(20_000).describe("The request the hub routes, in words, such as \"turn on the kitchen light\"."),
1724
+ title: z.string().min(1).max(512).optional().describe("A label carried with the action in its context (input.title)."),
1725
1725
  lang: z.string().min(1).optional(),
1726
1726
  sessionId: z.string().min(1).optional(),
1727
1727
  requestId: z.string().min(1).optional(),
@@ -1749,12 +1749,12 @@ export function createServer() {
1749
1749
  });
1750
1750
  registerThalovantTool(server, "thalovant_send_code", {
1751
1751
  title: "Send Code",
1752
- description: "Send an exact typed, scanned, barcode, QR, or serial value to a Thalovant hub.",
1752
+ description: "Send one exact value to a Thalovant hub using a saved identity: something typed, scanned, a barcode, a QR code or a serial number. The hub receives it as an utterance whose input is marked exact, and a skill that recognizes the value may act on it. Returns once the value is sent, without waiting for a reply. THALOVANT_MCP_READONLY leaves this tool out.",
1753
1753
  inputSchema: {
1754
1754
  ...runtimeAuthSchema,
1755
- value: z.string().min(1).max(20_000),
1756
- kind: z.string().min(1).max(64).optional(),
1757
- label: z.string().min(1).max(128).optional(),
1755
+ value: z.string().min(1).max(20_000).describe("The value exactly as read; only leading and trailing spaces are trimmed."),
1756
+ kind: z.string().min(1).max(64).optional().describe("What the value is, such as barcode, qr or serial. Defaults to code."),
1757
+ label: z.string().min(1).max(128).optional().describe("A label carried with the value in its context (input.label)."),
1758
1758
  lang: z.string().min(1).optional(),
1759
1759
  sessionId: z.string().min(1).optional(),
1760
1760
  requestId: z.string().min(1).optional(),
@@ -1806,10 +1806,10 @@ export function createServer() {
1806
1806
  });
1807
1807
  registerThalovantTool(server, "thalovant_wait_for_event", {
1808
1808
  title: "Wait For Event",
1809
- description: "Wait for one named hub event using a saved identity.",
1809
+ description: "Wait for one named hub event using a saved identity and return it: the first eventName the hub sends once the connection is made, or a timeout error after timeoutMs. sessionId, requestId and context narrow it to events carrying the same values. Listens only: it opens the connection and sends the hub no message, so it changes nothing.",
1810
1810
  inputSchema: {
1811
1811
  ...runtimeAuthSchema,
1812
- eventName: z.string().min(1).max(256),
1812
+ eventName: z.string().min(1).max(256).describe("The bus message type to wait for, such as speak or recognizer_loop:utterance."),
1813
1813
  timeoutMs: z.number().int().min(1_000).max(MAX_TIMEOUT_MS).default(DEFAULT_TIMEOUT_MS),
1814
1814
  sessionId: z.string().min(1).optional(),
1815
1815
  requestId: z.string().min(1).optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thalovant/mcp-server",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "Stdio and Streamable HTTP MCP server for Thalovant control-plane and hub runtime APIs.",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/server.json CHANGED
@@ -7,19 +7,19 @@
7
7
  "url": "https://github.com/thalovant/thalovant-mcp",
8
8
  "source": "github"
9
9
  },
10
- "version": "0.6.3",
10
+ "version": "0.6.4",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@thalovant/mcp-server",
15
- "version": "0.6.3",
15
+ "version": "0.6.4",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }
19
19
  },
20
20
  {
21
21
  "registryType": "oci",
22
- "identifier": "ghcr.io/thalovant/thalovant-mcp:0.6.3",
22
+ "identifier": "ghcr.io/thalovant/thalovant-mcp:0.6.4",
23
23
  "transport": {
24
24
  "type": "streamable-http",
25
25
  "url": "http://127.0.0.1:3000/mcp"