@tiwater/office-mcp 0.21.39 → 0.21.41

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.
@@ -20,7 +20,8 @@
20
20
  "type": "string",
21
21
  "minLength": 1,
22
22
  "description": "Absolute path for a new JSON file containing the complete result. Existing files are never overwritten.",
23
- "x-tiwater-file-role": "write"
23
+ "x-tiwater-file-role": "write",
24
+ "x-tiwater-file-effect": false
24
25
  }
25
26
  },
26
27
  "required": [
@@ -54,12 +54,6 @@
54
54
  "additionalProperties": false,
55
55
  "description": "Optional parent OpenXML address. Only nearest published children are returned."
56
56
  },
57
- "limit": {
58
- "default": 50,
59
- "type": "integer",
60
- "minimum": 1,
61
- "maximum": 2147483647
62
- },
63
57
  "offset": {
64
58
  "default": 0,
65
59
  "type": "integer",
@@ -70,7 +64,8 @@
70
64
  "type": "string",
71
65
  "minLength": 1,
72
66
  "description": "Optional path for retaining the complete requested page. May be combined with returnContent.",
73
- "x-tiwater-file-role": "write"
67
+ "x-tiwater-file-role": "write",
68
+ "x-tiwater-file-effect": false
74
69
  }
75
70
  },
76
71
  "required": [
@@ -57,7 +57,8 @@
57
57
  "type": "string",
58
58
  "minLength": 1,
59
59
  "description": "Optional path for retaining the complete selected observation. May be combined with returnContent.",
60
- "x-tiwater-file-role": "write"
60
+ "x-tiwater-file-role": "write",
61
+ "x-tiwater-file-effect": false
61
62
  }
62
63
  },
63
64
  "required": [
@@ -30,7 +30,8 @@
30
30
  "type": "string",
31
31
  "minLength": 1,
32
32
  "description": "Optional path for retaining the selected detailed row page. May be combined with returnContent.",
33
- "x-tiwater-file-role": "write"
33
+ "x-tiwater-file-role": "write",
34
+ "x-tiwater-file-effect": false
34
35
  }
35
36
  },
36
37
  "required": ["input", "table", "returnContent"],
@@ -71,7 +71,7 @@
71
71
  },
72
72
  "range": {
73
73
  "type": "object",
74
- "description": "Optional Unicode-scalar substring of the selected object's observed text. For a cell, offsets use its docx_read_table text with one newline between direct paragraphs. The selected native runs and paragraph boundaries are retained. Omit it to copy the complete selected object.",
74
+ "description": "Optional Unicode-scalar substring of the selected object's observed text. For a cell, offsets use its docx_read_table text with one newline between direct paragraphs. Length zero selects empty content and clears the target. The selected native runs and paragraph boundaries are retained. Omit it to copy the complete selected object.",
75
75
  "properties": {
76
76
  "start": {
77
77
  "type": "integer",
@@ -80,7 +80,7 @@
80
80
  },
81
81
  "length": {
82
82
  "type": "integer",
83
- "exclusiveMinimum": 0,
83
+ "minimum": 0,
84
84
  "maximum": 9007199254740991
85
85
  }
86
86
  },
@@ -80,7 +80,7 @@
80
80
  "range": {
81
81
  "type": "object", "properties": {
82
82
  "start": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
83
- "length": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }
83
+ "length": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
84
84
  }, "required": ["start", "length"], "additionalProperties": false
85
85
  }
86
86
  }, "required": ["address"], "additionalProperties": false
@@ -17,7 +17,8 @@
17
17
  "type": "string",
18
18
  "minLength": 1,
19
19
  "description": "Optional new JSON artifact path for retaining the complete table index. May be combined with returnContent.",
20
- "x-tiwater-file-role": "write"
20
+ "x-tiwater-file-role": "write",
21
+ "x-tiwater-file-effect": false
21
22
  },
22
23
  "offset": {
23
24
  "type": "integer",
@@ -15,7 +15,8 @@
15
15
  "type": "string",
16
16
  "minLength": 1,
17
17
  "description": "Absolute path for a new JSON file containing the complete result. Existing files are never overwritten.",
18
- "x-tiwater-file-role": "write"
18
+ "x-tiwater-file-role": "write",
19
+ "x-tiwater-file-effect": false
19
20
  }
20
21
  },
21
22
  "required": [
@@ -48,7 +48,8 @@
48
48
  "type": "string",
49
49
  "minLength": 1,
50
50
  "description": "Absolute path for a new JSON file containing the complete result. Existing files are never overwritten.",
51
- "x-tiwater-file-role": "write"
51
+ "x-tiwater-file-role": "write",
52
+ "x-tiwater-file-effect": false
52
53
  }
53
54
  },
54
55
  "required": [
@@ -23,7 +23,8 @@
23
23
  "type": "string",
24
24
  "minLength": 1,
25
25
  "description": "Absolute path for a new JSON file containing the complete result. Existing files are never overwritten.",
26
- "x-tiwater-file-role": "write"
26
+ "x-tiwater-file-role": "write",
27
+ "x-tiwater-file-effect": false
27
28
  }
28
29
  },
29
30
  "required": [
@@ -27,12 +27,6 @@
27
27
  "maximum": 9007199254740991,
28
28
  "description": "Zero-based text-segment offset within the selected shape. Continue only when another segment is needed."
29
29
  },
30
- "limit": {
31
- "type": "integer",
32
- "minimum": 1,
33
- "maximum": 4,
34
- "description": "Maximum text segments in this bounded page."
35
- },
36
30
  "returnContent": {
37
31
  "type": "boolean",
38
32
  "description": "Return this selected technical page directly when it fits the response limit. May be combined with output."
@@ -41,9 +35,10 @@
41
35
  "type": "string",
42
36
  "minLength": 1,
43
37
  "description": "Optional immutable JSON artifact path for this selected technical page. May be combined with returnContent.",
44
- "x-tiwater-file-role": "write"
38
+ "x-tiwater-file-role": "write",
39
+ "x-tiwater-file-effect": false
45
40
  }
46
41
  },
47
- "required": ["input", "slideNumber", "shapeId", "limit", "returnContent"],
42
+ "required": ["input", "slideNumber", "shapeId", "returnContent"],
48
43
  "additionalProperties": false
49
44
  }
@@ -21,12 +21,6 @@
21
21
  "maximum": 9007199254740991,
22
22
  "description": "Zero-based shape offset in native z-order on the selected slide. Continue only when another selected shape is needed."
23
23
  },
24
- "limit": {
25
- "type": "integer",
26
- "minimum": 1,
27
- "maximum": 8,
28
- "description": "Maximum shapes in this bounded page."
29
- },
30
24
  "returnContent": {
31
25
  "type": "boolean",
32
26
  "description": "Return this selected technical page directly when it fits the response limit. May be combined with output."
@@ -35,9 +29,10 @@
35
29
  "type": "string",
36
30
  "minLength": 1,
37
31
  "description": "Optional immutable JSON artifact path for this selected technical page. May be combined with returnContent.",
38
- "x-tiwater-file-role": "write"
32
+ "x-tiwater-file-role": "write",
33
+ "x-tiwater-file-effect": false
39
34
  }
40
35
  },
41
- "required": ["input", "slideNumber", "limit", "returnContent"],
36
+ "required": ["input", "slideNumber", "returnContent"],
42
37
  "additionalProperties": false
43
38
  }
@@ -15,7 +15,8 @@
15
15
  "type": "string",
16
16
  "minLength": 1,
17
17
  "description": "Absolute path for a new JSON file containing the complete result. Existing files are never overwritten.",
18
- "x-tiwater-file-role": "write"
18
+ "x-tiwater-file-role": "write",
19
+ "x-tiwater-file-effect": false
19
20
  }
20
21
  },
21
22
  "required": [
@@ -2,7 +2,7 @@
2
2
  "schema": "tiwater.office-provider-contract-manifest/v1",
3
3
  "provider": {
4
4
  "id": "@tiwater/office-mcp",
5
- "version": "0.21.39"
5
+ "version": "0.21.41"
6
6
  },
7
7
  "tools": [
8
8
  {
@@ -31,11 +31,11 @@
31
31
  "name": "docx_compare",
32
32
  "providerContract": {
33
33
  "source": "packages/docx-cli/contracts/mcp-input/docx_compare.schema.json",
34
- "sha256": "a6d59ee785d8ab3994eb6f539b48411b272565ac136219de58d39a449b3112f3"
34
+ "sha256": "bcad394d99a118cee1b1b5d62fc08acba2b77de27d6c29c63535049150f2016a"
35
35
  },
36
36
  "inputContract": {
37
37
  "path": "office/contracts/docx_compare.schema.json",
38
- "sha256": "a6d59ee785d8ab3994eb6f539b48411b272565ac136219de58d39a449b3112f3"
38
+ "sha256": "bcad394d99a118cee1b1b5d62fc08acba2b77de27d6c29c63535049150f2016a"
39
39
  }
40
40
  },
41
41
  {
@@ -119,11 +119,11 @@
119
119
  "name": "docx_list_objects",
120
120
  "providerContract": {
121
121
  "source": "packages/docx-cli/contracts/mcp-input/docx_list_objects.schema.json",
122
- "sha256": "f00b36f429ef4e6c68fcb39fd141024897a97ecac89378e3fc1e45cd6c04e906"
122
+ "sha256": "1f8d857c837d258e14959895260ac7f5c5041b381cdc936c2c4194e0c0b949ae"
123
123
  },
124
124
  "inputContract": {
125
125
  "path": "office/contracts/docx_list_objects.schema.json",
126
- "sha256": "f00b36f429ef4e6c68fcb39fd141024897a97ecac89378e3fc1e45cd6c04e906"
126
+ "sha256": "1f8d857c837d258e14959895260ac7f5c5041b381cdc936c2c4194e0c0b949ae"
127
127
  }
128
128
  },
129
129
  {
@@ -141,22 +141,22 @@
141
141
  "name": "docx_read_object",
142
142
  "providerContract": {
143
143
  "source": "packages/docx-cli/contracts/mcp-input/docx_read_object.schema.json",
144
- "sha256": "ab93256991eaf665dfc096cf7df9ba2b4ba26ad6c11813d885a3c5ff2c2fa45b"
144
+ "sha256": "bb75dc704a2da4dfbd69004a21697d6824011036e1153778b839357f642c7057"
145
145
  },
146
146
  "inputContract": {
147
147
  "path": "office/contracts/docx_read_object.schema.json",
148
- "sha256": "ab93256991eaf665dfc096cf7df9ba2b4ba26ad6c11813d885a3c5ff2c2fa45b"
148
+ "sha256": "bb75dc704a2da4dfbd69004a21697d6824011036e1153778b839357f642c7057"
149
149
  }
150
150
  },
151
151
  {
152
152
  "name": "docx_read_table",
153
153
  "providerContract": {
154
154
  "source": "packages/docx-cli/contracts/mcp-input/docx_read_table.schema.json",
155
- "sha256": "0b7a5669daeaa6f8e171ba01542b4bfd065cd282a32943e7b5b5854551b4afc7"
155
+ "sha256": "a0d13fb70cc43d7ee7f3be9730f98df9a5e988d33fb7454b44f5e455d068b950"
156
156
  },
157
157
  "inputContract": {
158
158
  "path": "office/contracts/docx_read_table.schema.json",
159
- "sha256": "0b7a5669daeaa6f8e171ba01542b4bfd065cd282a32943e7b5b5854551b4afc7"
159
+ "sha256": "a0d13fb70cc43d7ee7f3be9730f98df9a5e988d33fb7454b44f5e455d068b950"
160
160
  }
161
161
  },
162
162
  {
@@ -174,11 +174,11 @@
174
174
  "name": "docx_replace_content_from_source",
175
175
  "providerContract": {
176
176
  "source": "packages/docx-cli/contracts/mcp-input/docx_replace_content_from_source.schema.json",
177
- "sha256": "04740981ad30190be4625ce3a2640b48abec02a9bc0eccc3e0e7d4fe40dbc6e0"
177
+ "sha256": "9e739afeeda64a6014f180f97667402e98a4b0c8a79a182d6a6ef7a1c5f31cff"
178
178
  },
179
179
  "inputContract": {
180
180
  "path": "office/contracts/docx_replace_content_from_source.schema.json",
181
- "sha256": "04740981ad30190be4625ce3a2640b48abec02a9bc0eccc3e0e7d4fe40dbc6e0"
181
+ "sha256": "9e739afeeda64a6014f180f97667402e98a4b0c8a79a182d6a6ef7a1c5f31cff"
182
182
  }
183
183
  },
184
184
  {
@@ -207,11 +207,11 @@
207
207
  "name": "docx_set_table",
208
208
  "providerContract": {
209
209
  "source": "packages/docx-cli/contracts/mcp-input/docx_set_table.schema.json",
210
- "sha256": "a99576434d3358b18bf006efa6f05ae5657aaf4bfc5f828fa6edc87306e98b8b"
210
+ "sha256": "d9a9f09ee3ca13764120bcf58e501a3edc508333b01aa4e6d299db8ba7bf2834"
211
211
  },
212
212
  "inputContract": {
213
213
  "path": "office/contracts/docx_set_table.schema.json",
214
- "sha256": "a99576434d3358b18bf006efa6f05ae5657aaf4bfc5f828fa6edc87306e98b8b"
214
+ "sha256": "d9a9f09ee3ca13764120bcf58e501a3edc508333b01aa4e6d299db8ba7bf2834"
215
215
  }
216
216
  },
217
217
  {
@@ -251,44 +251,44 @@
251
251
  "name": "docx_table_index",
252
252
  "providerContract": {
253
253
  "source": "packages/docx-cli/contracts/mcp-input/docx_table_index.schema.json",
254
- "sha256": "737052f653fe0d222bfc2b808e0fbc298376ab88cf052352888ff02e5b71ed52"
254
+ "sha256": "4dbc4079269d5c37ed8fd213f3987bea82843c2e5d4d17fae169cecd17d44964"
255
255
  },
256
256
  "inputContract": {
257
257
  "path": "office/contracts/docx_table_index.schema.json",
258
- "sha256": "737052f653fe0d222bfc2b808e0fbc298376ab88cf052352888ff02e5b71ed52"
258
+ "sha256": "4dbc4079269d5c37ed8fd213f3987bea82843c2e5d4d17fae169cecd17d44964"
259
259
  }
260
260
  },
261
261
  {
262
262
  "name": "docx_validate",
263
263
  "providerContract": {
264
264
  "source": "packages/docx-cli/contracts/mcp-input/docx_validate.schema.json",
265
- "sha256": "57c25f53aa319dc0e9aafc5cd3fa5f0ea12f28c50fe4a39955caa40e2dfc12d5"
265
+ "sha256": "06d5f29f7ed23ab53fdf7a5de09cbfb6a800e7a19ae076a3d6d80abf22c464be"
266
266
  },
267
267
  "inputContract": {
268
268
  "path": "office/contracts/docx_validate.schema.json",
269
- "sha256": "57c25f53aa319dc0e9aafc5cd3fa5f0ea12f28c50fe4a39955caa40e2dfc12d5"
269
+ "sha256": "06d5f29f7ed23ab53fdf7a5de09cbfb6a800e7a19ae076a3d6d80abf22c464be"
270
270
  }
271
271
  },
272
272
  {
273
273
  "name": "docx_validate_font_policy",
274
274
  "providerContract": {
275
275
  "source": "packages/docx-cli/contracts/mcp-input/docx_validate_font_policy.schema.json",
276
- "sha256": "1ef0ae13622931c92054b4cf492957c7d9d16f659b2d333c67c065f0bc4750d4"
276
+ "sha256": "75e98324c6a8387f0207d83ba1a80b351d487c15d386b542e2130956b1237904"
277
277
  },
278
278
  "inputContract": {
279
279
  "path": "office/contracts/docx_validate_font_policy.schema.json",
280
- "sha256": "1ef0ae13622931c92054b4cf492957c7d9d16f659b2d333c67c065f0bc4750d4"
280
+ "sha256": "75e98324c6a8387f0207d83ba1a80b351d487c15d386b542e2130956b1237904"
281
281
  }
282
282
  },
283
283
  {
284
284
  "name": "docx_validate_toc_style_policy",
285
285
  "providerContract": {
286
286
  "source": "packages/docx-cli/contracts/mcp-input/docx_validate_toc_style_policy.schema.json",
287
- "sha256": "e2317dfc690901a89ed3d8b0307674132f65977cee29cb6ace138e5c87d04603"
287
+ "sha256": "5a98a3073a8e149a591254ef4e93f27d3b8f5dbce3204199d7155365f00088ef"
288
288
  },
289
289
  "inputContract": {
290
290
  "path": "office/contracts/docx_validate_toc_style_policy.schema.json",
291
- "sha256": "e2317dfc690901a89ed3d8b0307674132f65977cee29cb6ace138e5c87d04603"
291
+ "sha256": "5a98a3073a8e149a591254ef4e93f27d3b8f5dbce3204199d7155365f00088ef"
292
292
  }
293
293
  },
294
294
  {
@@ -350,22 +350,22 @@
350
350
  "name": "pptx_read_shape",
351
351
  "providerContract": {
352
352
  "source": "packages/pptx-cli/contracts/mcp-input/pptx_read_shape.schema.json",
353
- "sha256": "63bf1819f95514dad3d6f43a58795aa8b57bf9d1f7075edcfb11ddd3253b83e4"
353
+ "sha256": "0311db4e2675773d0dde0cb7751722394a4ae4b06ef828a09c0843a849299009"
354
354
  },
355
355
  "inputContract": {
356
356
  "path": "office/contracts/pptx_read_shape.schema.json",
357
- "sha256": "63bf1819f95514dad3d6f43a58795aa8b57bf9d1f7075edcfb11ddd3253b83e4"
357
+ "sha256": "0311db4e2675773d0dde0cb7751722394a4ae4b06ef828a09c0843a849299009"
358
358
  }
359
359
  },
360
360
  {
361
361
  "name": "pptx_read_slide",
362
362
  "providerContract": {
363
363
  "source": "packages/pptx-cli/contracts/mcp-input/pptx_read_slide.schema.json",
364
- "sha256": "3a2aaca3fd11da490863e1a2d60bf2f120e4e24991b457e316de04b5c9cc889a"
364
+ "sha256": "831b4573bad0ed325682ac16275e122b44c515bceab21c4d0a82db9e90d54cf7"
365
365
  },
366
366
  "inputContract": {
367
367
  "path": "office/contracts/pptx_read_slide.schema.json",
368
- "sha256": "3a2aaca3fd11da490863e1a2d60bf2f120e4e24991b457e316de04b5c9cc889a"
368
+ "sha256": "831b4573bad0ed325682ac16275e122b44c515bceab21c4d0a82db9e90d54cf7"
369
369
  }
370
370
  },
371
371
  {
@@ -394,11 +394,11 @@
394
394
  "name": "pptx_validate",
395
395
  "providerContract": {
396
396
  "source": "packages/pptx-cli/contracts/mcp-input/pptx_validate.schema.json",
397
- "sha256": "57c25f53aa319dc0e9aafc5cd3fa5f0ea12f28c50fe4a39955caa40e2dfc12d5"
397
+ "sha256": "06d5f29f7ed23ab53fdf7a5de09cbfb6a800e7a19ae076a3d6d80abf22c464be"
398
398
  },
399
399
  "inputContract": {
400
400
  "path": "office/contracts/pptx_validate.schema.json",
401
- "sha256": "57c25f53aa319dc0e9aafc5cd3fa5f0ea12f28c50fe4a39955caa40e2dfc12d5"
401
+ "sha256": "06d5f29f7ed23ab53fdf7a5de09cbfb6a800e7a19ae076a3d6d80abf22c464be"
402
402
  }
403
403
  },
404
404
  {
@@ -482,11 +482,11 @@
482
482
  "name": "xlsx_read_range",
483
483
  "providerContract": {
484
484
  "source": "packages/xlsx-cli/contracts/mcp-input/xlsx_read_range.schema.json",
485
- "sha256": "04b0ce1b912047f774fbbbb6ba7cf55e5e53a9b74d6f027d9c21b4d6d7397225"
485
+ "sha256": "66a5ff24b1a207d70aa278b81a8efba5dc272af2f7a7c12331154e8aa8d8f3dd"
486
486
  },
487
487
  "inputContract": {
488
488
  "path": "office/contracts/xlsx_read_range.schema.json",
489
- "sha256": "04b0ce1b912047f774fbbbb6ba7cf55e5e53a9b74d6f027d9c21b4d6d7397225"
489
+ "sha256": "66a5ff24b1a207d70aa278b81a8efba5dc272af2f7a7c12331154e8aa8d8f3dd"
490
490
  }
491
491
  },
492
492
  {
@@ -581,11 +581,11 @@
581
581
  "name": "xlsx_validate",
582
582
  "providerContract": {
583
583
  "source": "packages/xlsx-cli/contracts/mcp-input/xlsx_validate.schema.json",
584
- "sha256": "57c25f53aa319dc0e9aafc5cd3fa5f0ea12f28c50fe4a39955caa40e2dfc12d5"
584
+ "sha256": "06d5f29f7ed23ab53fdf7a5de09cbfb6a800e7a19ae076a3d6d80abf22c464be"
585
585
  },
586
586
  "inputContract": {
587
587
  "path": "office/contracts/xlsx_validate.schema.json",
588
- "sha256": "57c25f53aa319dc0e9aafc5cd3fa5f0ea12f28c50fe4a39955caa40e2dfc12d5"
588
+ "sha256": "06d5f29f7ed23ab53fdf7a5de09cbfb6a800e7a19ae076a3d6d80abf22c464be"
589
589
  }
590
590
  }
591
591
  ]
@@ -25,12 +25,6 @@
25
25
  "maximum": 9007199254740991,
26
26
  "description": "Zero-based cell offset in row-major order within the selected range. Continue only when another selected cell is needed."
27
27
  },
28
- "limit": {
29
- "type": "integer",
30
- "minimum": 1,
31
- "maximum": 256,
32
- "description": "Maximum selected cells in this bounded page."
33
- },
34
28
  "returnContent": {
35
29
  "type": "boolean",
36
30
  "description": "Return this selected technical page directly when it fits the response limit. May be combined with output."
@@ -39,9 +33,10 @@
39
33
  "type": "string",
40
34
  "minLength": 1,
41
35
  "description": "Optional immutable JSON artifact path for this selected technical page. May be combined with returnContent.",
42
- "x-tiwater-file-role": "write"
36
+ "x-tiwater-file-role": "write",
37
+ "x-tiwater-file-effect": false
43
38
  }
44
39
  },
45
- "required": ["input", "sheet", "range", "limit", "returnContent"],
40
+ "required": ["input", "sheet", "range", "returnContent"],
46
41
  "additionalProperties": false
47
42
  }
@@ -15,7 +15,8 @@
15
15
  "type": "string",
16
16
  "minLength": 1,
17
17
  "description": "Absolute path for a new JSON file containing the complete result. Existing files are never overwritten.",
18
- "x-tiwater-file-role": "write"
18
+ "x-tiwater-file-role": "write",
19
+ "x-tiwater-file-effect": false
19
20
  }
20
21
  },
21
22
  "required": [
package/office/index.mjs CHANGED
@@ -558,7 +558,7 @@ const tools = [
558
558
  },
559
559
  {
560
560
  name: 'docx_list_objects',
561
- description: 'Page through mixed nearest-child OpenXML objects only when document order or paragraph relationships are required. Set returnContent true to return a byte-bounded object page. Provide output to store the complete requested page and return its artifact receipt. These channels are independent and may be used together; at least one is required. Continue from receipt.nextOffset only when an unreturned object is needed for the current decision. Do not use this tool to locate tables or read a whole document: use docx_table_index to locate tables, then a narrow table or object read.',
561
+ description: 'Page through mixed nearest-child OpenXML objects only when document order or paragraph relationships are required. The provider chooses the bounded page size. Set returnContent true to return the selected object page. Provide output to store the complete requested page and return its artifact receipt. These channels are independent and may be used together; at least one is required. Continue from receipt.nextOffset only when an unreturned object is needed for the current decision. Do not use this tool to locate tables or read a whole document: use docx_table_index to locate tables, then a narrow table or object read.',
562
562
  inputSchema: inputContract('docx_list_objects'),
563
563
  outputSchema: docxListObjectsOutput,
564
564
  annotations: { readOnlyHint: true, idempotentHint: true },
@@ -784,7 +784,7 @@ const tools = [
784
784
  },
785
785
  {
786
786
  name: 'xlsx_read_range',
787
- description: 'Read one explicit native A1 cell or rectangular range from one current XLSX worksheet. Pages use a row-major cell offset and return physical presence, raw and formatted values, normalized value type, formula metadata, style, rich text, and merged-range ownership. The receipt always reports remaining cells and the next offset. Continue only when another selected cell is needed. Set returnContent true to return the selected page when it fits the response limit. Provide output to store the same complete selected page as an immutable artifact. These channels are independent and may be used together; at least one is required. This tool does not infer regions, headers, records, field meanings, or business mappings; convert legacy XLS before reading Open XML cells.',
787
+ description: 'Read one explicit native A1 cell or rectangular range from one current XLSX worksheet. The provider chooses the bounded page size. Pages use a row-major cell offset and return physical presence, raw and formatted values, normalized value type, formula metadata, style, rich text, and merged-range ownership. The receipt always reports remaining cells and the next offset. Continue only when another selected cell is needed. Set returnContent true to return the selected page when it fits the response limit. Provide output to store the same complete selected page as an immutable artifact. These channels are independent and may be used together; at least one is required. This tool does not infer regions, headers, records, field meanings, or business mappings; convert legacy XLS before reading Open XML cells.',
788
788
  inputSchema: inputContract('xlsx_read_range'),
789
789
  outputSchema: xlsxRangeReadOutput,
790
790
  annotations: { readOnlyHint: true, idempotentHint: true },
@@ -819,7 +819,7 @@ const tools = [
819
819
  },
820
820
  {
821
821
  name: 'pptx_read_slide',
822
- description: 'List one selected PPTX slide as bounded pages of compact native shape identities in z-order. Each identity includes its shape id, kind, geometry, text preview, object counts, placeholder facts, media identity, and whether it contains a table. The receipt reports the selected slide, its layout and master paths, remaining shapes, and the next offset. Continue only when another shape on this slide is needed; use pptx_read_shape for bounded text and effective formatting of one selected shape. Set returnContent true to return the selected page when it fits the response limit. Provide output to store the same complete selected page as an immutable artifact. These channels are independent and may be used together; at least one is required. This tool does not select templates, assign business roles, infer repairs, or inspect another slide.',
822
+ description: 'List one selected PPTX slide as bounded pages of compact native shape identities in z-order. The provider chooses the bounded page size. Each identity includes its shape id, kind, geometry, text preview, object counts, placeholder facts, media identity, and whether it contains a table. The receipt reports the selected slide, its layout and master paths, remaining shapes, and the next offset. Continue only when another shape on this slide is needed; use pptx_read_shape for bounded text and effective formatting of one selected shape. Set returnContent true to return the selected page when it fits the response limit. Provide output to store the same complete selected page as an immutable artifact. These channels are independent and may be used together; at least one is required. This tool does not select templates, assign business roles, infer repairs, or inspect another slide.',
823
823
  inputSchema: inputContract('pptx_read_slide'),
824
824
  outputSchema: largeResultOutput('pptx_read_slide').extend({
825
825
  summary: pptxSlidePageSummary,
@@ -830,7 +830,7 @@ const tools = [
830
830
  },
831
831
  {
832
832
  name: 'pptx_read_shape',
833
- description: 'Read one native PPTX shape selected from pptx_read_slide as bounded text segments. Each segment retains its run and paragraph identity, text offset, paragraph alignment, effective text formatting, direct formatting, and formatting source. Long run text is split without changing its native run identity. The receipt reports remaining segments and the next offset. Continue only when another segment of this shape is needed. Set returnContent true to return the selected page when it fits the response limit. Provide output to store the same complete selected page as an immutable artifact. These channels are independent and may be used together; at least one is required. This tool does not choose formatting, derive repairs, or inspect another shape.',
833
+ description: 'Read one native PPTX shape selected from pptx_read_slide as bounded text segments. The provider chooses the bounded page size. Each segment retains its run and paragraph identity, text offset, paragraph alignment, effective text formatting, direct formatting, and formatting source. Long run text is split without changing its native run identity. The receipt reports remaining segments and the next offset. Continue only when another segment of this shape is needed. Set returnContent true to return the selected page when it fits the response limit. Provide output to store the same complete selected page as an immutable artifact. These channels are independent and may be used together; at least one is required. This tool does not choose formatting, derive repairs, or inspect another shape.',
834
834
  inputSchema: inputContract('pptx_read_shape'),
835
835
  outputSchema: largeResultOutput('pptx_read_shape').extend({
836
836
  summary: pptxShapeTextPageSummary,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiwater/office-mcp",
3
- "version": "0.21.39",
3
+ "version": "0.21.41",
4
4
  "description": "Published MCP distribution for independent Tiwater Office, PDF, and Text document capabilities",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -2,7 +2,7 @@
2
2
  "schema": "tiwater.pdf-provider-contract-manifest/v1",
3
3
  "provider": {
4
4
  "id": "@tiwater/office-mcp",
5
- "version": "0.21.39"
5
+ "version": "0.21.41"
6
6
  },
7
7
  "runtime": {
8
8
  "command": "tiwater-pdf"
@@ -14,12 +14,6 @@
14
14
  "maximum": 9007199254740991,
15
15
  "description": "Zero-based line offset in the exact current source revision."
16
16
  },
17
- "limit": {
18
- "type": "integer",
19
- "minimum": 1,
20
- "maximum": 200,
21
- "description": "Maximum number of lines in this bounded page."
22
- },
23
17
  "returnContent": {
24
18
  "type": "boolean",
25
19
  "description": "Return this selected line page directly when it fits the response limit. May be combined with output."
@@ -28,9 +22,10 @@
28
22
  "type": "string",
29
23
  "minLength": 1,
30
24
  "description": "Optional immutable JSON artifact path for this selected line page. May be combined with returnContent.",
31
- "x-tiwater-file-role": "write"
25
+ "x-tiwater-file-role": "write",
26
+ "x-tiwater-file-effect": false
32
27
  }
33
28
  },
34
- "required": ["input", "offset", "limit", "returnContent"],
29
+ "required": ["input", "offset", "returnContent"],
35
30
  "additionalProperties": false
36
31
  }
@@ -2,7 +2,7 @@
2
2
  "schema": "tiwater.text-provider-contract-manifest/v1",
3
3
  "provider": {
4
4
  "id": "@tiwater/office-mcp",
5
- "version": "0.21.39"
5
+ "version": "0.21.41"
6
6
  },
7
7
  "tools": [
8
8
  {
@@ -20,11 +20,11 @@
20
20
  "name": "text_read_lines",
21
21
  "providerContract": {
22
22
  "source": "servers/text/provider-contracts/text_read_lines.schema.json",
23
- "sha256": "0f9202f0b45bbd35b3ba4bebec7776da41f2c8668c7cdece068c44102f518bb6"
23
+ "sha256": "cf855e8131f5f2cfbb65185986d0f85ab87fb0efa5000c31491e10cc7ead3c3a"
24
24
  },
25
25
  "inputContract": {
26
26
  "path": "text/contracts/text_read_lines.schema.json",
27
- "sha256": "0f9202f0b45bbd35b3ba4bebec7776da41f2c8668c7cdece068c44102f518bb6"
27
+ "sha256": "cf855e8131f5f2cfbb65185986d0f85ab87fb0efa5000c31491e10cc7ead3c3a"
28
28
  }
29
29
  }
30
30
  ]
package/text/index.mjs CHANGED
@@ -113,7 +113,7 @@ const definitions = [
113
113
  },
114
114
  {
115
115
  name: 'text_read_lines',
116
- description: 'Read one explicit zero-based line page from one exact supported plain-text revision. The receipt reports remaining lines and nextOffset; continue only when another line is needed. Set returnContent true to return the selected page when it fits the response limit. Provide output to retain the same complete page. These channels are independent and may be used together; at least one is required. Lines retain their exact decoded text and terminator; the provider does not interpret fields, records, key-value pairs, sections, Markdown, or business meaning.',
116
+ description: 'Read one explicit zero-based line page from one exact supported plain-text revision. The provider chooses the bounded page size. The receipt reports remaining lines and nextOffset; continue only when another line is needed. Set returnContent true to return the selected page when it fits the response limit. Provide output to retain the same complete page. These channels are independent and may be used together; at least one is required. Lines retain their exact decoded text and terminator; the provider does not interpret fields, records, key-value pairs, sections, Markdown, or business meaning.',
117
117
  outputSchema: largeResultOutput(linePage).extend({ summary: linePageReceipt }).strict(),
118
118
  handler: textReadLines,
119
119
  },
@@ -165,7 +165,7 @@ async function textInspect(args) {
165
165
  }
166
166
 
167
167
  async function textReadLines(args) {
168
- const observation = await readTextLines(args.input, args.offset, args.limit);
168
+ const observation = await readTextLines(args.input, args.offset);
169
169
  const delivered = await deliverLargeJsonResult({
170
170
  tool: 'text_read_lines',
171
171
  args,
@@ -6,6 +6,7 @@ import { fileArtifact } from '../_shared/large-json-result.mjs';
6
6
  const supportedExtensions = new Set(['.txt', '.text', '.log', '.csv', '.tsv', '.md', '.markdown']);
7
7
  const openingLineLimit = 8;
8
8
  const openingTextLimit = 160;
9
+ const linePageLimit = 200;
9
10
 
10
11
  export async function inspectText(inputValue) {
11
12
  const observation = await observeText(inputValue);
@@ -30,17 +31,14 @@ export async function inspectText(inputValue) {
30
31
  };
31
32
  }
32
33
 
33
- export async function readTextLines(inputValue, requestedOffset, requestedLimit) {
34
+ export async function readTextLines(inputValue, requestedOffset) {
34
35
  if (!Number.isSafeInteger(requestedOffset) || requestedOffset < 0) {
35
36
  throw Object.assign(new Error('offset must be a non-negative safe integer'), { code: -32602 });
36
37
  }
37
- if (!Number.isSafeInteger(requestedLimit) || requestedLimit < 1 || requestedLimit > 200) {
38
- throw Object.assign(new Error('limit must be a safe integer from 1 through 200'), { code: -32602 });
39
- }
40
38
  const observation = await observeText(inputValue);
41
39
  const source = await fileArtifact(observation.input);
42
40
  const offset = Math.min(requestedOffset, observation.lines.length);
43
- const selected = observation.lines.slice(offset, offset + requestedLimit);
41
+ const selected = observation.lines.slice(offset, offset + linePageLimit);
44
42
  const nextOffset = offset + selected.length < observation.lines.length
45
43
  ? offset + selected.length
46
44
  : null;