@thalovant/mcp-server 0.1.6 → 0.1.8
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 +12 -0
- package/dist/index.js +33 -19
- package/package.json +7 -4
- package/server.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.8
|
|
4
|
+
|
|
5
|
+
- Tightened memory tool input validation to match the control-plane API exactly: `title` max 160, `content` max 4096, `source` max 64, `consentScope` max 128, `consentVersion` max 64, `retentionPolicy` max 64 on create/update, and list `query` max 240, so invalid values fail with a clear client-side error instead of an opaque API 422.
|
|
6
|
+
- Capped `thalovant_list_public_hubs` `limit` at 48 to match the public hubs endpoint, which silently clamps larger page sizes; authenticated `thalovant_list_hubs` keeps its limit of 100.
|
|
7
|
+
- Corrected `thalovant_get_hub` and `thalovant_create_client_identity` descriptions: the authenticated hub routes require a hub UUID; slugs are only accepted by the public hub tools.
|
|
8
|
+
|
|
9
|
+
## 0.1.7
|
|
10
|
+
|
|
11
|
+
- Updated the MCP transport SDK to 1.30.0, removing the affected Hono adapter dependency range.
|
|
12
|
+
- Updated the Thalovant Node SDK compatibility floor to 0.2.21 and refreshed the JOSE runtime dependency.
|
|
13
|
+
- Included the dependency and transitive security updates merged after 0.1.6.
|
|
14
|
+
|
|
3
15
|
## 0.1.6
|
|
4
16
|
|
|
5
17
|
- Publish the exact npm tarball with a durable CycloneDX SBOM and GitHub provenance and SBOM attestations.
|
package/dist/index.js
CHANGED
|
@@ -14,10 +14,11 @@ import { mkdir } from "node:fs/promises";
|
|
|
14
14
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
15
15
|
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
16
16
|
import { z } from "zod";
|
|
17
|
-
const VERSION = "0.1.
|
|
17
|
+
const VERSION = "0.1.8";
|
|
18
18
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
19
19
|
const MAX_TIMEOUT_MS = 300_000;
|
|
20
20
|
const MAX_LIMIT = 100;
|
|
21
|
+
const MAX_PUBLIC_HUBS_LIMIT = 48;
|
|
21
22
|
const DEFAULT_HTTP_BODY_LIMIT_BYTES = 1_048_576;
|
|
22
23
|
const DEFAULT_HTTP_RATE_LIMIT_MAX = 120;
|
|
23
24
|
const DEFAULT_HTTP_RATE_LIMIT_WINDOW_MS = 60_000;
|
|
@@ -48,7 +49,14 @@ const SECRET_KEYS = [
|
|
|
48
49
|
"secret",
|
|
49
50
|
];
|
|
50
51
|
const protocolSchema = z.enum(["wss", "https", "mqtt"]);
|
|
51
|
-
const limitSchema = z.number().int().min(1).max(MAX_LIMIT).default(25);
|
|
52
|
+
const limitSchema = z.number().int().min(1).max(MAX_LIMIT).default(25).describe("Page size, 1-100.");
|
|
53
|
+
const publicHubsLimitSchema = z
|
|
54
|
+
.number()
|
|
55
|
+
.int()
|
|
56
|
+
.min(1)
|
|
57
|
+
.max(MAX_PUBLIC_HUBS_LIMIT)
|
|
58
|
+
.default(25)
|
|
59
|
+
.describe("Page size, 1-48. The public hubs endpoint caps page size at 48.");
|
|
52
60
|
const optionalCursorSchema = z.string().min(1).optional();
|
|
53
61
|
const jsonRecordSchema = z.record(z.unknown());
|
|
54
62
|
const controlPlaneSchema = {
|
|
@@ -897,9 +905,9 @@ export function createServer() {
|
|
|
897
905
|
}));
|
|
898
906
|
registerThalovantTool(server, "thalovant_list_public_hubs", {
|
|
899
907
|
title: "List Public Hubs",
|
|
900
|
-
description: "List Thalovant public hubs. This read-only discovery call does not require authentication.",
|
|
908
|
+
description: "List Thalovant public hubs. This read-only discovery call does not require authentication. Page size is capped at 48.",
|
|
901
909
|
inputSchema: {
|
|
902
|
-
limit:
|
|
910
|
+
limit: publicHubsLimitSchema,
|
|
903
911
|
cursor: optionalCursorSchema,
|
|
904
912
|
apiUrl: controlPlaneSchema.apiUrl,
|
|
905
913
|
},
|
|
@@ -946,10 +954,13 @@ export function createServer() {
|
|
|
946
954
|
});
|
|
947
955
|
registerThalovantTool(server, "thalovant_get_hub", {
|
|
948
956
|
title: "Get Hub",
|
|
949
|
-
description: "Fetch one authenticated Thalovant hub by
|
|
957
|
+
description: "Fetch one authenticated Thalovant hub by UUID.",
|
|
950
958
|
inputSchema: {
|
|
951
959
|
...controlPlaneSchema,
|
|
952
|
-
hubId: z
|
|
960
|
+
hubId: z
|
|
961
|
+
.string()
|
|
962
|
+
.min(1)
|
|
963
|
+
.describe("Hub UUID. This authenticated route rejects slugs; slugs are only accepted by the public hub tools (thalovant_get_public_hub)."),
|
|
953
964
|
},
|
|
954
965
|
annotations: {
|
|
955
966
|
readOnlyHint: true,
|
|
@@ -965,7 +976,10 @@ export function createServer() {
|
|
|
965
976
|
description: "Create a Thalovant client identity for a hub. The identity is secret; output is redacted unless savePath is used.",
|
|
966
977
|
inputSchema: {
|
|
967
978
|
...controlPlaneSchema,
|
|
968
|
-
hubId: z
|
|
979
|
+
hubId: z
|
|
980
|
+
.string()
|
|
981
|
+
.min(1)
|
|
982
|
+
.describe("Hub UUID. This authenticated route rejects slugs; slugs are only accepted by the public hub tools (thalovant_get_public_hub)."),
|
|
969
983
|
name: z.string().min(1).max(128),
|
|
970
984
|
siteId: z.string().min(1).optional(),
|
|
971
985
|
ownerId: z.string().min(1).optional(),
|
|
@@ -1259,7 +1273,7 @@ export function createServer() {
|
|
|
1259
1273
|
kind: z.enum(["note", "preference", "fact"]).optional(),
|
|
1260
1274
|
ownerId: z.string().min(1).optional(),
|
|
1261
1275
|
hubId: z.string().min(1).optional(),
|
|
1262
|
-
query: z.string().min(1).optional(),
|
|
1276
|
+
query: z.string().min(1).max(240).optional(),
|
|
1263
1277
|
includeDeleted: z.boolean().optional(),
|
|
1264
1278
|
includeExpired: z.boolean().optional(),
|
|
1265
1279
|
limit: limitSchema,
|
|
@@ -1314,16 +1328,16 @@ export function createServer() {
|
|
|
1314
1328
|
...controlPlaneSchema,
|
|
1315
1329
|
scope: z.enum(["personal", "workspace", "hub"]).optional(),
|
|
1316
1330
|
kind: z.enum(["note", "preference", "fact"]).optional(),
|
|
1317
|
-
title: z.string().max(
|
|
1318
|
-
content: z.string().min(1).max(
|
|
1331
|
+
title: z.string().max(160).nullable().optional(),
|
|
1332
|
+
content: z.string().min(1).max(4_096),
|
|
1319
1333
|
tags: z.array(z.string().min(1)).optional(),
|
|
1320
1334
|
ownerId: z.string().min(1).optional(),
|
|
1321
1335
|
hubId: z.string().min(1).optional(),
|
|
1322
|
-
source: z.string().min(1).optional(),
|
|
1336
|
+
source: z.string().min(1).max(64).optional(),
|
|
1323
1337
|
metadata: jsonRecordSchema.optional(),
|
|
1324
|
-
consentScope: z.string().min(1).optional(),
|
|
1325
|
-
consentVersion: z.string().nullable().optional(),
|
|
1326
|
-
retentionPolicy: z.string().min(1).optional(),
|
|
1338
|
+
consentScope: z.string().min(1).max(128).optional(),
|
|
1339
|
+
consentVersion: z.string().max(64).nullable().optional(),
|
|
1340
|
+
retentionPolicy: z.string().min(1).max(64).optional(),
|
|
1327
1341
|
expiresAt: z.string().nullable().optional(),
|
|
1328
1342
|
},
|
|
1329
1343
|
annotations: {
|
|
@@ -1345,13 +1359,13 @@ export function createServer() {
|
|
|
1345
1359
|
...controlPlaneSchema,
|
|
1346
1360
|
memoryId: z.string().min(1),
|
|
1347
1361
|
kind: z.enum(["note", "preference", "fact"]).optional(),
|
|
1348
|
-
title: z.string().max(
|
|
1349
|
-
content: z.string().min(1).max(
|
|
1362
|
+
title: z.string().max(160).nullable().optional(),
|
|
1363
|
+
content: z.string().min(1).max(4_096).optional(),
|
|
1350
1364
|
tags: z.array(z.string().min(1)).optional(),
|
|
1351
1365
|
metadata: jsonRecordSchema.optional(),
|
|
1352
|
-
consentScope: z.string().min(1).optional(),
|
|
1353
|
-
consentVersion: z.string().nullable().optional(),
|
|
1354
|
-
retentionPolicy: z.string().min(1).optional(),
|
|
1366
|
+
consentScope: z.string().min(1).max(128).optional(),
|
|
1367
|
+
consentVersion: z.string().max(64).nullable().optional(),
|
|
1368
|
+
retentionPolicy: z.string().min(1).max(64).optional(),
|
|
1355
1369
|
expiresAt: z.string().nullable().optional(),
|
|
1356
1370
|
clearExpiresAt: z.boolean().optional(),
|
|
1357
1371
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thalovant/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
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",
|
|
@@ -63,11 +63,14 @@
|
|
|
63
63
|
"node": ">=20"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
67
|
-
"@thalovant/sdk": "^0.2.
|
|
68
|
-
"jose": "^6.2.
|
|
66
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
67
|
+
"@thalovant/sdk": "^0.2.21",
|
|
68
|
+
"jose": "^6.2.8",
|
|
69
69
|
"zod": "^3.25.76"
|
|
70
70
|
},
|
|
71
|
+
"overrides": {
|
|
72
|
+
"fast-uri": "3.1.5"
|
|
73
|
+
},
|
|
71
74
|
"devDependencies": {
|
|
72
75
|
"@types/node": "^22.18.12",
|
|
73
76
|
"typescript": "^5.9.3",
|
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.1.
|
|
10
|
+
"version": "0.1.8",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@thalovant/mcp-server",
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.8",
|
|
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.1.
|
|
22
|
+
"identifier": "ghcr.io/thalovant/thalovant-mcp:0.1.8",
|
|
23
23
|
"transport": {
|
|
24
24
|
"type": "streamable-http",
|
|
25
25
|
"url": "http://127.0.0.1:3000/mcp"
|