@thalovant/mcp-server 0.6.4 → 0.6.6
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 +15 -0
- package/README.md +5 -1
- package/dist/index.js +5 -5
- package/package.json +4 -4
- package/server.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
|
+
Last Edit: Codex (exact runtime model identifier unavailable) - 2026-10-25 - Motive: Document the scoped dependency security patch.
|
|
2
|
+
|
|
1
3
|
# Changelog
|
|
2
4
|
|
|
5
|
+
## 0.6.6 - Unreleased
|
|
6
|
+
|
|
7
|
+
- Update body-parser to 2.4.0 (CVE-2026-111181), Zod to 4.6.7 (patched bounds checks from 4.6.6), and the existing fast-uri override to 3.1.9. No audit suppression is added.
|
|
8
|
+
- Migrate five records to Zod 4's explicit string-key signature. Bounded arrays reject oversized input before parsing elements. UUIDs now enforce standard version/variant bits (plus nil/max UUIDs); memory-list offsets reject unsafe integers.
|
|
9
|
+
- Preserve the 50 default tools, Thalovant SDK version, permissions and transport behavior. Zod 4's generated input schemas inline repeated records, add string property names and omit the previous `additionalProperties: false` on stripping objects; unknown input keys remain stripped at runtime.
|
|
10
|
+
- Align package, registry and OCI metadata at 0.6.6. Publication, published-artifact smoke checks and deployment remain separate release steps.
|
|
11
|
+
|
|
12
|
+
## 0.6.5 - 2026-10-23
|
|
13
|
+
|
|
14
|
+
- Lock the runtime transitive dependency `ip-address` to 10.7.4, fixing the IPv6 zone-identifier parsing denial of service (CVE-2026-111997). The MCP and Thalovant SDK versions, tool schemas, and protocol behavior are unchanged.
|
|
15
|
+
- Update development dependencies Vite to 8.3.3 and Vitest with its matching packages to 4.1.12, fixing CVE-2026-112942, CVE-2026-112949, and CVE-2026-112950. Neither Vite nor Vitest is included in the production OCI runtime.
|
|
16
|
+
- Align `package.json`, `server.json`, the OCI label, and the README at 0.6.5. Existing release security checks and published-artifact smoke checks remain unchanged.
|
|
17
|
+
|
|
3
18
|
## 0.6.4 — 2026-10-19
|
|
4
19
|
|
|
5
20
|
- **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.
|
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
Last Edit: Codex (exact runtime model identifier unavailable) - 2026-10-25 - Motive: Record security dependency compatibility and the next patch version.
|
|
2
|
+
|
|
1
3
|
# Thalovant MCP Server
|
|
2
4
|
|
|
3
5
|
[](https://m8ven.ai/mcp/thalovant-thalovant-mcp-1cyhb4)
|
|
@@ -540,13 +542,15 @@ Runtime calls sharing the same hub client identity run sequentially within one
|
|
|
540
542
|
MCP process. Use a distinct client identity for each independently running MCP
|
|
541
543
|
server so the hub can keep their sessions separate.
|
|
542
544
|
|
|
543
|
-
Version 0.6.
|
|
545
|
+
Version 0.6.6 requires `@thalovant/sdk` `^0.9.9` (0.9.9 through versions below 0.10.0). Since 0.5.1 the server enforces
|
|
544
546
|
secure effective MQTT URLs and carries a single connection deadline through
|
|
545
547
|
MQTT setup and HTTP failure cleanup. Runtime tools support
|
|
546
548
|
HiveMind v3 Noise over WSS, HTTPS and MQTT over TLS. `thalovant_healthcheck`
|
|
547
549
|
reports readiness only after authentication; a reachable hub or broker alone
|
|
548
550
|
does not establish a runtime session.
|
|
549
551
|
|
|
552
|
+
The Zod 4 security migration preserves the 50 default tools and string-keyed record values. Its JSON Schema output inlines repeated records, identifies string property names, and omits `additionalProperties: false` on stripping objects; unknown input keys are still stripped before handlers receive them. UUID validation now enforces standard version/variant bits (plus nil/max UUIDs), and memory-list offsets must be safe integers. See the [security audit](https://github.com/thalovant/thalovant-mcp/blob/main/AUDIT.md) for evidence and release gates.
|
|
553
|
+
|
|
550
554
|
Keep the SDK configuration directory persistent and private between server
|
|
551
555
|
restarts (`~/.config/thalovant`, or the configured XDG/Windows equivalent). It
|
|
552
556
|
contains the client Noise key and trusted server pins. An authentication
|
package/dist/index.js
CHANGED
|
@@ -75,7 +75,7 @@ const publicHubsLimitSchema = z
|
|
|
75
75
|
.default(25)
|
|
76
76
|
.describe("Page size, 1-48. The public hubs endpoint caps page size at 48.");
|
|
77
77
|
const optionalCursorSchema = z.string().min(1).optional();
|
|
78
|
-
const jsonRecordSchema = z.record(z.unknown());
|
|
78
|
+
const jsonRecordSchema = z.record(z.string(), z.unknown());
|
|
79
79
|
const controlPlaneSchema = {
|
|
80
80
|
loginScope: z
|
|
81
81
|
.string()
|
|
@@ -197,8 +197,8 @@ const hubEtagSchema = z
|
|
|
197
197
|
.describe("Required. The hub's current etag, sent as If-Match for optimistic locking. Read it from the `etag` field in the hub resource BODY returned by thalovant_get_hub — the API does not send an ETag response header, so you must fetch the hub first. A missing or stale value fails with HTTP 412 and changes nothing: re-fetch the hub, take the new etag, and retry.");
|
|
198
198
|
const runtimeGroupResourceLimitsSchema = z
|
|
199
199
|
.object({
|
|
200
|
-
requests: z.record(z.string()).optional(),
|
|
201
|
-
limits: z.record(z.string()).optional(),
|
|
200
|
+
requests: z.record(z.string(), z.string()).optional(),
|
|
201
|
+
limits: z.record(z.string(), z.string()).optional(),
|
|
202
202
|
})
|
|
203
203
|
.optional();
|
|
204
204
|
const runtimeGroupSpecSchema = z
|
|
@@ -217,7 +217,7 @@ const releaseOptionsSchema = {
|
|
|
217
217
|
channel: z.string().min(1).optional().describe("Release channel. Falls back to the workspace release policy when omitted."),
|
|
218
218
|
mode: z.string().min(1).optional().describe('Release mode. Passing images without mode switches to "custom".'),
|
|
219
219
|
version: z.string().min(1).optional().describe("Pinned release version."),
|
|
220
|
-
images: z.record(z.string().min(1)).optional().describe("Explicit image overrides. Switches to custom mode unless mode is also set. Non-admins may pass only images the platform releases for each key: a catalog pin of the stable or alpha channel, the resource's current, recommended or release-policy image, or the platform's default image; runtime core also accepts any tag or digest of ghcr.io/thalovant/ovos-core and hub listener any tag or digest of ghcr.io/thalovant/hivemind-listener, while bus and preview_bridge take only the listed images. Anything else fails with 403 platform_image_required, whose error lists allowed_images and allowed_repositories per refused key."),
|
|
220
|
+
images: z.record(z.string(), z.string().min(1)).optional().describe("Explicit image overrides. Switches to custom mode unless mode is also set. Non-admins may pass only images the platform releases for each key: a catalog pin of the stable or alpha channel, the resource's current, recommended or release-policy image, or the platform's default image; runtime core also accepts any tag or digest of ghcr.io/thalovant/ovos-core and hub listener any tag or digest of ghcr.io/thalovant/hivemind-listener, while bus and preview_bridge take only the listed images. Anything else fails with 403 platform_image_required, whose error lists allowed_images and allowed_repositories per refused key."),
|
|
221
221
|
reason: z.string().min(1).optional().describe("Audit reason recorded with the release."),
|
|
222
222
|
};
|
|
223
223
|
function releaseOptionsFrom(args) {
|
|
@@ -1620,7 +1620,7 @@ export function createServer() {
|
|
|
1620
1620
|
languages: z.array(z.string().trim().min(1).max(100)).min(1).max(20).default(["en-us"]),
|
|
1621
1621
|
speakable: z.boolean().default(false).describe("Render intent patterns with locale slot examples; preserve complete-phrase priority."),
|
|
1622
1622
|
sentence: z.boolean().default(false).describe("Capitalize and punctuate examples using the selected locale. Implies speakable rendering."),
|
|
1623
|
-
slots: z.record(z.string().max(500)).optional().describe("Example values for named intent slots."),
|
|
1623
|
+
slots: z.record(z.string(), z.string().max(500)).optional().describe("Example values for named intent slots."),
|
|
1624
1624
|
exampleLimit: z.number().int().min(1).max(20).default(2),
|
|
1625
1625
|
describe: z.boolean().default(true),
|
|
1626
1626
|
fallback: z.boolean().default(true).describe("Try engine manifests if the intent listing is refused or unanswered."),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thalovant/mcp-server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
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",
|
|
@@ -66,14 +66,14 @@
|
|
|
66
66
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
67
67
|
"@thalovant/sdk": "^0.9.9",
|
|
68
68
|
"jose": "^6.2.8",
|
|
69
|
-
"zod": "^
|
|
69
|
+
"zod": "^4.6.6"
|
|
70
70
|
},
|
|
71
71
|
"overrides": {
|
|
72
|
-
"fast-uri": "3.1.
|
|
72
|
+
"fast-uri": "3.1.9"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/node": "^22.18.12",
|
|
76
76
|
"typescript": "^5.9.3",
|
|
77
|
-
"vitest": "^4.1.
|
|
77
|
+
"vitest": "^4.1.12"
|
|
78
78
|
}
|
|
79
79
|
}
|
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.
|
|
10
|
+
"version": "0.6.6",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@thalovant/mcp-server",
|
|
15
|
-
"version": "0.6.
|
|
15
|
+
"version": "0.6.6",
|
|
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.
|
|
22
|
+
"identifier": "ghcr.io/thalovant/thalovant-mcp:0.6.6",
|
|
23
23
|
"transport": {
|
|
24
24
|
"type": "streamable-http",
|
|
25
25
|
"url": "http://127.0.0.1:3000/mcp"
|