@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 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.6";
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: limitSchema,
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 id.",
957
+ description: "Fetch one authenticated Thalovant hub by UUID.",
950
958
  inputSchema: {
951
959
  ...controlPlaneSchema,
952
- hubId: z.string().min(1),
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.string().min(1).describe("Hub id or slug accepted by the Thalovant SDK."),
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(512).nullable().optional(),
1318
- content: z.string().min(1).max(20_000),
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(512).nullable().optional(),
1349
- content: z.string().min(1).max(20_000).optional(),
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.6",
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.29.0",
67
- "@thalovant/sdk": "^0.2.15",
68
- "jose": "^6.2.3",
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.6",
10
+ "version": "0.1.8",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@thalovant/mcp-server",
15
- "version": "0.1.6",
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.6",
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"