claude-threads 1.15.0 → 1.15.1

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
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.15.1] - 2026-05-05
11
+
12
+ ### Fixed
13
+ - **Numeric tool args no longer fail at the MCP boundary when the runtime sends them as strings.** Surfaced live during dogfooding of v1.15.0: calling `search_messages` with `max_results: 5` returned `Invalid input: expected number, received string` from the MCP framework, because the Claude MCP runtime sometimes serializes integer tool arguments as JSON strings before they reach the server, and the receiving `z.number().int()` schema rejected them at parse time. Switched the four affected fields to `z.coerce.number().int()` — `read_post.max_messages`, `list_thread.max_messages`, `read_channel_history.max_messages`, `search_messages.max_results` — so either form parses. Downstream `clamp*` helpers already defend against non-finite / non-positive values, so coercion can't widen the contract beyond the documented caps; non-integer strings like `"1.5"` still fail because `.int()` runs after coercion. Schemas exported so a contract test can verify the coercion without spinning up the full MCP transport. (#375)
14
+
10
15
  ## [1.15.0] - 2026-05-05
11
16
 
12
17
  ### Added
@@ -57416,7 +57416,7 @@ var sendFileInputSchema = {
57416
57416
  var readPostInputSchema = {
57417
57417
  url: exports_external.string().describe("Permalink URL to a post on the chat platform the bot is connected to. Must be on the same host as the bot."),
57418
57418
  include_thread: exports_external.boolean().optional().describe("When true, also fetch surrounding messages in the same thread (oldest first). Defaults to false."),
57419
- max_messages: exports_external.number().int().optional().describe(`Maximum thread messages to return when include_thread is true. Defaults to ${DEFAULT_THREAD_LIMIT}, capped at ${MAX_THREAD_LIMIT}.`)
57419
+ max_messages: exports_external.coerce.number().int().optional().describe(`Maximum thread messages to return when include_thread is true. Defaults to ${DEFAULT_THREAD_LIMIT}, capped at ${MAX_THREAD_LIMIT}.`)
57420
57420
  };
57421
57421
  var reactToPostInputSchema = {
57422
57422
  url: exports_external.string().describe("Permalink URL to a post the bot can already see (its own channel, or a public channel on the same instance)."),
@@ -57428,15 +57428,15 @@ var updateOwnPostInputSchema = {
57428
57428
  };
57429
57429
  var listThreadInputSchema = {
57430
57430
  url: exports_external.string().optional().describe("Permalink to any post in the target thread. If omitted, the current session thread is read."),
57431
- max_messages: exports_external.number().int().optional().describe(`Maximum messages to return (oldest first). Defaults to ${DEFAULT_THREAD_LIMIT}, capped at ${MAX_THREAD_LIMIT}.`)
57431
+ max_messages: exports_external.coerce.number().int().optional().describe(`Maximum messages to return (oldest first). Defaults to ${DEFAULT_THREAD_LIMIT}, capped at ${MAX_THREAD_LIMIT}.`)
57432
57432
  };
57433
57433
  var readChannelHistoryInputSchema = {
57434
57434
  channel_id: exports_external.string().describe("Channel identifier. Mattermost: the 26-char channel id. Slack: the channel id (C…/G…). " + "Must be the bot's own channel or a public channel on the same instance."),
57435
- max_messages: exports_external.number().int().optional().describe("Maximum messages to return (oldest first). Defaults to 20, capped at 100.")
57435
+ max_messages: exports_external.coerce.number().int().optional().describe("Maximum messages to return (oldest first). Defaults to 20, capped at 100.")
57436
57436
  };
57437
57437
  var searchMessagesInputSchema = {
57438
57438
  query: exports_external.string().describe("Search query (platform-specific syntax). Mattermost supports phrase quoting and from:user filters."),
57439
- max_results: exports_external.number().int().optional().describe("Maximum results to return. Defaults to 10, capped at 25.")
57439
+ max_results: exports_external.coerce.number().int().optional().describe("Maximum results to return. Defaults to 10, capped at 25.")
57440
57440
  };
57441
57441
  var sendDmInputSchema = {
57442
57442
  recipient: exports_external.string().describe("Recipient identifier. Mattermost: a username (with or without leading @). " + "Slack: a user ID (e.g. 'U0123ABC' or '<@U0123ABC>'). The recipient must be a " + "current member of the bot's channel."),
@@ -58191,6 +58191,10 @@ main().catch((err) => {
58191
58191
  process.exit(1);
58192
58192
  });
58193
58193
  export {
58194
+ searchMessagesInputSchema,
58195
+ readPostInputSchema,
58196
+ readChannelHistoryInputSchema,
58197
+ listThreadInputSchema,
58194
58198
  handleUpdateOwnPostWith,
58195
58199
  handleSendFileWith,
58196
58200
  handleSendDmWith,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-threads",
3
- "version": "1.15.0",
3
+ "version": "1.15.1",
4
4
  "description": "Share Claude Code sessions live in a Mattermost channel with interactive features",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",