Increase MCP truncation limits to support complete workflows
- Terse mode: 50 items/5000 chars (from 30/2000) - Non-terse mode: 1000 items/50000 chars (from 250/5000) - Prioritizes operational data completeness over token savings - Prevents "ghost errors" from arbitrary data dropping
Showing
1 changed file
with
15 additions
and
15 deletions
| ... | @@ -568,7 +568,7 @@ | ... | @@ -568,7 +568,7 @@ |
| 568 | <parameter name="action"><description>Action being processed: if not null, use real screen rendering instead of test mock</description></parameter> | 568 | <parameter name="action"><description>Action being processed: if not null, use real screen rendering instead of test mock</description></parameter> |
| 569 | <parameter name="renderMode" default="mcp"><description>Render mode: mcp, text, html, xml, vuet, qvt</description></parameter> | 569 | <parameter name="renderMode" default="mcp"><description>Render mode: mcp, text, html, xml, vuet, qvt</description></parameter> |
| 570 | <parameter name="sessionId"><description>Session ID for user context restoration</description></parameter> | 570 | <parameter name="sessionId"><description>Session ID for user context restoration</description></parameter> |
| 571 | <parameter name="terse" type="Boolean" default="false"><description>If true, return minimal data (10 items, 200 chars strings). If false, include full data (50 items, no truncation).</description></parameter> | 571 | <parameter name="terse" type="Boolean" default="false"><description>If true, return condensed data (50 items, 5000 char strings). If false, include full data (1000 items, 50k char strings).</description></parameter> |
| 572 | </in-parameters> | 572 | </in-parameters> |
| 573 | <out-parameters> | 573 | <out-parameters> |
| 574 | <parameter name="result" type="Map"/> | 574 | <parameter name="result" type="Map"/> |
| ... | @@ -661,20 +661,20 @@ serializeMoquiObject = { obj, depth = 0, isTerse = false -> | ... | @@ -661,20 +661,20 @@ serializeMoquiObject = { obj, depth = 0, isTerse = false -> |
| 661 | if (obj instanceof Iterable) { | 661 | if (obj instanceof Iterable) { |
| 662 | def list = obj.collect() | 662 | def list = obj.collect() |
| 663 | // Apply truncation only if terse mode is enabled | 663 | // Apply truncation only if terse mode is enabled |
| 664 | if (isTerse && list.size() > 10) { | 664 | if (isTerse && list.size() > 50) { |
| 665 | ec.logger.info("serializeMoquiObject: Terse mode - truncating list from ${list.size()} to 10 items") | 665 | ec.logger.info("serializeMoquiObject: Terse mode - truncating list from ${list.size()} to 50 items") |
| 666 | def truncated = list.take(10) | 666 | def truncated = list.take(50) |
| 667 | def resultList = truncated.collect { serializeMoquiObject(it, depth + 1, isTerse) } | 667 | def resultList = truncated.collect { serializeMoquiObject(it, depth + 1, isTerse) } |
| 668 | return [ | 668 | return [ |
| 669 | _items: resultList, | 669 | _items: resultList, |
| 670 | _totalCount: list.size(), | 670 | _totalCount: list.size(), |
| 671 | _truncated: true, | 671 | _truncated: true, |
| 672 | _hasMore: true, | 672 | _hasMore: true, |
| 673 | _message: "Terse mode: showing first 10 of ${list.size()} items. Set terse=false to get more data." | 673 | _message: "Terse mode: showing first 50 of ${list.size()} items. Set terse=false to get full data." |
| 674 | ] | 674 | ] |
| 675 | } | 675 | } |
| 676 | // Increased limits for non-terse mode | 676 | // Increased limits for non-terse mode - effectively unlimited for operational use |
| 677 | def maxItems = isTerse ? 10 : 250 | 677 | def maxItems = isTerse ? 50 : 1000 |
| 678 | def truncated = list.take(maxItems) | 678 | def truncated = list.take(maxItems) |
| 679 | def resultList = truncated.collect { serializeMoquiObject(it, depth + 1, isTerse) } | 679 | def resultList = truncated.collect { serializeMoquiObject(it, depth + 1, isTerse) } |
| 680 | if (!isTerse && list.size() > maxItems) { | 680 | if (!isTerse && list.size() > maxItems) { |
| ... | @@ -700,21 +700,21 @@ serializeMoquiObject = { obj, depth = 0, isTerse = false -> | ... | @@ -700,21 +700,21 @@ serializeMoquiObject = { obj, depth = 0, isTerse = false -> |
| 700 | } | 700 | } |
| 701 | if (obj instanceof String) { | 701 | if (obj instanceof String) { |
| 702 | // Apply truncation only if terse mode is enabled | 702 | // Apply truncation only if terse mode is enabled |
| 703 | if (isTerse && obj.length() > 200) { | 703 | if (isTerse && obj.length() > 5000) { |
| 704 | return [ | 704 | return [ |
| 705 | _value: obj.substring(0, 200) + "...", | 705 | _value: obj.substring(0, 5000) + "...", |
| 706 | _fullLength: obj.length(), | 706 | _fullLength: obj.length(), |
| 707 | _truncated: true, | 707 | _truncated: true, |
| 708 | _message: "Terse mode: truncated to 200 chars. Set terse=false to get more data." | 708 | _message: "Terse mode: truncated to 5000 chars. Set terse=false to get more data." |
| 709 | ] | 709 | ] |
| 710 | } | 710 | } |
| 711 | // Non-terse limit increased to 2000 for safety but much larger than before | 711 | // Non-terse limit increased to 50000 for safety |
| 712 | if (!isTerse && obj.length() > 2000) { | 712 | if (!isTerse && obj.length() > 50000) { |
| 713 | return [ | 713 | return [ |
| 714 | _value: obj.substring(0, 2000) + "...", | 714 | _value: obj.substring(0, 50000) + "...", |
| 715 | _fullLength: obj.length(), | 715 | _fullLength: obj.length(), |
| 716 | _truncated: true, | 716 | _truncated: true, |
| 717 | _message: "Truncated to 2000 chars for safety." | 717 | _message: "Truncated to 50000 chars for safety." |
| 718 | ] | 718 | ] |
| 719 | } | 719 | } |
| 720 | return obj | 720 | return obj |
| ... | @@ -1330,7 +1330,7 @@ def wikiInstructions = getWikiInstructions(inputScreenPath) | ... | @@ -1330,7 +1330,7 @@ def wikiInstructions = getWikiInstructions(inputScreenPath) |
| 1330 | <parameter name="renderMode" default="mcp"><description>Render mode: mcp (default), text, html, xml, vuet, qvt</description></parameter> | 1330 | <parameter name="renderMode" default="mcp"><description>Render mode: mcp (default), text, html, xml, vuet, qvt</description></parameter> |
| 1331 | <parameter name="parameters" type="Map"><description>Parameters to pass to screen during rendering or action</description></parameter> | 1331 | <parameter name="parameters" type="Map"><description>Parameters to pass to screen during rendering or action</description></parameter> |
| 1332 | <parameter name="sessionId"/> | 1332 | <parameter name="sessionId"/> |
| 1333 | <parameter name="terse" type="Boolean" default="false"><description>If true, return minimal data (10 items, 200 chars strings). If false, include full data (50 items, no truncation).</description></parameter> | 1333 | <parameter name="terse" type="Boolean" default="false"><description>If true, return condensed data (50 items, 5000 char strings). If false, include full data (1000 items, 50k char strings).</description></parameter> |
| 1334 | </in-parameters> | 1334 | </in-parameters> |
| 1335 | <out-parameters> | 1335 | <out-parameters> |
| 1336 | <parameter name="result" type="Map"/> | 1336 | <parameter name="result" type="Map"/> | ... | ... |
-
Please register or sign in to post a comment