@thalovant/mcp-server 0.4.0 → 0.5.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
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 — 2026-09-13
4
+
5
+ - Use Node SDK 0.7.0 inventory models and Python-compatible question detection.
6
+ - Add an inventory `presentation` view with derived skill titles, explicit phrase-language order, and unknown catalog metadata preserved.
7
+ - Gate PRs and publication on the shared SDK acceptance contract and check for drift every six hours.
8
+
9
+ ## 0.4.1 — 2026-09-12
10
+
11
+ - Use Node SDK 0.6.1 with thalovant-languages 0.2.1 listing data, matching Python 0.6.8 across 270 languages.
12
+ - Verify Spanish questions and complete French phrases through the encrypted runtime inventory tool.
13
+
3
14
  ## 0.4.0 — 2026-09-12
4
15
 
5
16
  - Add locale-aware sentence inventory examples with SDK 0.6.0, canonical slot defaults and unique rendered limits.
package/README.md CHANGED
@@ -393,6 +393,14 @@ adds at most 1500ms. A silent listing can use engine manifests; disable this wit
393
393
  per-principal policy. `thalovant_get_operation` reads an operation ID returned by
394
394
  provisioning without replaying the write.
395
395
 
396
+ The additive `presentation` object contains the shared SDK inventory shape:
397
+ `cache_version`, `hub_id`, `hub_name`, `source`, `generated_at`, `skills`, `notes`,
398
+ and `languages_present`. Skill titles are derived from IDs. Runtime discovery
399
+ cannot prove catalog locales or hub display metadata, so those fields remain
400
+ unknown (empty lists/strings), with explanatory notes. Intent language order is
401
+ explicit and survives JSON key sorting. Each tool call retains its own identity
402
+ lease; the server does not persist inventory or share a session across callers.
403
+
396
404
  ## Request hints, embedded audio, and configuration merging
397
405
 
398
406
  `thalovant_ask` accepts `sttLang`, an ordered `pipeline`, and `location`
@@ -464,7 +472,7 @@ Runtime calls sharing the same hub client identity run sequentially within one
464
472
  MCP process. Use a distinct client identity for each independently running MCP
465
473
  server so the hub can keep their sessions separate.
466
474
 
467
- Version 0.4.0 requires `@thalovant/sdk` `^0.6.0` (0.6.0 through versions below 0.7.0). This release enforces
475
+ Version 0.5.0 requires `@thalovant/sdk` `^0.7.0` (0.7.0 through versions below 0.8.0). This release enforces
468
476
  secure effective MQTT URLs and carries a single connection deadline through
469
477
  MQTT setup and HTTP failure cleanup. Runtime tools support
470
478
  HiveMind v3 Noise over WSS, HTTPS and MQTT over TLS. `thalovant_healthcheck`
@@ -560,7 +568,7 @@ Read history with `thalovant_list_hub_skill_history` (`hubId`, optional `limit`)
560
568
 
561
569
 
562
570
  Inventory `sentence: true` implies speakable rendering and capitalizes/punctuates
563
- examples using bundled thalovant-languages 0.1.1 rules. Regional locale matching
571
+ examples using bundled thalovant-languages 0.2.1 rules. Regional locale matching
564
572
  follows OVOS distances; explicit `slots` override locale sample values. Complete
565
573
  phrases rank first, and `exampleLimit` counts unique nonempty rendered results.
566
574
  Raw intent definitions remain in the response; unknown locales retain bare text.
@@ -568,3 +576,8 @@ Raw intent definitions remain in the response; unknown locales retain bare text.
568
576
  The CLI handles SIGTERM and SIGINT in stdio and HTTP modes, including when it
569
577
  runs as the container's PID 1. It closes sessions and HTTP connections before a
570
578
  successful exit, with a ten-second failure deadline for stalled cleanup.
579
+
580
+ Version 0.5.0 uses Node SDK 0.7.0 with Python 0.7.2-compatible inventory
581
+ and question detection, including Unicode question marks and omitted-language patterns. With `sentence: true`, Spanish questions receive their question
582
+ mark and complete French phrases keep their final period. Undescribed
583
+ languages remain bare.
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { inventoryPresentation } from "./inventory-output.js";
2
3
  import { runtimeReplyContent } from "./reply-output.js";
3
4
  import { throwIfRuntimeCancelled, withRuntimeLease } from "./runtime-lease.js";
4
5
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -1361,6 +1362,7 @@ export function createServer() {
1361
1362
  const inventory = await client.intents(languages, { describe, fallback, timeoutMs: clampTimeout(timeoutMs) });
1362
1363
  return jsonContent(redactSecrets({
1363
1364
  ...inventory.asObject(),
1365
+ presentation: inventoryPresentation(inventory),
1364
1366
  examples: inventory.intents.map(intent => ({ id: intent.id,
1365
1367
  languages: Object.fromEntries(inventory.languages.map(lang => [lang, intent.examples(lang, exampleLimit, { speakable, sentence, slots })])),
1366
1368
  })),
@@ -0,0 +1,12 @@
1
+ import type { HubIntentInventory } from "@thalovant/sdk";
2
+ /** Add a display view without claiming catalogue metadata from runtime phrases. */
3
+ export declare function inventoryPresentation(runtime: HubIntentInventory, generatedAt?: string): {
4
+ languages_present: string[];
5
+ cache_version: number;
6
+ hub_id: string;
7
+ hub_name: string;
8
+ source: string;
9
+ generated_at: string;
10
+ notes: string[];
11
+ skills: import("@thalovant/sdk").InventorySkillData[];
12
+ };
@@ -0,0 +1,12 @@
1
+ import { Inventory, Intent, Skill, friendlyTitle, languagesPresent } from "@thalovant/sdk";
2
+ /** Add a display view without claiming catalogue metadata from runtime phrases. */
3
+ export function inventoryPresentation(runtime, generatedAt = new Date().toISOString()) {
4
+ const notes = [
5
+ "Skill titles are derived from IDs; catalogue locales and hub metadata are unknown.",
6
+ `Runtime discovery source: ${runtime.source}.`,
7
+ ...runtime.denied.map(query => `Query refused or unanswered: ${query}.`),
8
+ ...(!runtime.fallbacksKnown ? ["Fallback skill support is unknown."] : []),
9
+ ];
10
+ const inventory = new Inventory("", "", "hub", generatedAt, runtime.skills.map(skill => new Skill(skill.skillId, friendlyTitle(skill.skillId), [], skill.intents.map(intent => new Intent(intent.id, intent.name, intent.skillId, intent.engine, intent.phrases, intent.languages)))), notes);
11
+ return { ...inventory.asObject(), languages_present: languagesPresent(inventory) };
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thalovant/mcp-server",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
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",
@@ -64,7 +64,7 @@
64
64
  },
65
65
  "dependencies": {
66
66
  "@modelcontextprotocol/sdk": "^1.30.0",
67
- "@thalovant/sdk": "^0.6.0",
67
+ "@thalovant/sdk": "^0.7.0",
68
68
  "jose": "^6.2.8",
69
69
  "zod": "^3.25.76"
70
70
  },
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.4.0",
10
+ "version": "0.5.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@thalovant/mcp-server",
15
- "version": "0.4.0",
15
+ "version": "0.5.0",
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.4.0",
22
+ "identifier": "ghcr.io/thalovant/thalovant-mcp:0.5.0",
23
23
  "transport": {
24
24
  "type": "streamable-http",
25
25
  "url": "http://127.0.0.1:3000/mcp"