- 07 Dec, 2025 9 commits
-
-
- Change default renderMode from 'html' to 'text' for screen tools - Reduces response size from 89KB to 5.6KB for FindProduct screen - Returns clean table data instead of complex HTML forms with JavaScript - Makes screen tool output LLM-friendly and resolves opencode client parsing issues - Text format shows actual data in readable table format perfect for AI consumption
Ean Schuessler committed -
- Previous edit incorrectly placed variable definition inside JSON map literal - Move actualResult assignment outside JsonOutput.toJson call - Resolves build error: Unexpected input '(' @ line 537Ean Schuessler committed -
- SSE handler was returning generic status message instead of actual service result - Extract actualResult from service response (same as regular HTTP handler) - Tool calls now return proper content including screen execution results - Fixes issue where tools worked but results didn't reach opencode client
Ean Schuessler committed -
- Move list#Tools recursive screen processing logs to debug level - Move ResourcesList entity discovery logs to debug level - Keep high-level summary logs at info level for operational visibility - Significantly reduces log noise during normal MCP operations
Ean Schuessler committed -
Ean Schuessler committed
-
Ean Schuessler committed
-
Ean Schuessler committed
-
Ean Schuessler committed
-
- 05 Dec, 2025 5 commits
-
-
- Add tools/list, tools/call, resources/list, resources/read, and ping methods - Include proper input schemas and descriptions for each method - Add debug logging for tools list generation - Position standard methods at beginning of list for first-page visibility
Ean Schuessler committed -
- Fix XML parsing to use proper Moqui MNode attribute access methods - Add screen definition (sd) fallback to extract actual screen locations - Resolves issue where deeper-level cross-component screens were missing - Now discovers 536 tools instead of 199 (full recursive discovery) - Correctly handles PopCommerce Catalog → SimpleScreens Product → FindProduct - Maintains security model while enabling arbitrary depth screen discovery
Ean Schuessler committed -
- Remove hard-coded PopCommerce filter from list#Tools service - Add proper recursive screen discovery using processScreenWithSubscreens function - Update MCP routing to use list#Tools instead of mcp#ToolsList for tools/list endpoint - Now discovers ALL screens from AuthzCheckView instead of just PopCommerce - Implements proper hierarchical tool naming with dot notation for first-level subscreens - Supports cross-component screen discovery (PopCommerce → SimpleScreens, etc.) - MCPJam inspector can now connect and discover 100+ screen tools This resolves the issue where tools/list returned 0 tools instead of discovering all accessible screens recursively across all components.
Ean Schuessler committed -
## Database Lock Contention Resolution (80-90% improvement) **Problem**: 88+ second database lock waits with AT_ENTITY:moqui.server.Visit **Solution**: Remove unnecessary Visit entity access and implement throttled updates ### Key Changes: - **Removed manual Visit creation fallbacks** - Eliminated duplicate code paths - **Made services stateless** - Removed updateSessionActivity() calls - **Added throttled session updates** - 30-second intervals vs every 5 seconds - **Implemented per-session synchronization** - Prevent concurrent updates - **Disabled authz during Visit access** - Reduces automatic tracking ## MCP Session State Bug Fix **Problem**: Sessions stuck in INITIALIZING state, causing "Session not initialized" errors **Root Cause**: initialize() method never transitioned sessions to INITIALIZED state **Solution**: Proper state transition after successful initialization ### Technical Changes: - **EnhancedMcpServlet.groovy**: Added session state INITIALIZED transition - **McpServices.xml**: Removed Visit.update() calls, disabled authz during operations - **VisitBasedMcpSession.groovy**: Removed session activity updates from sendMessage() ## Results:
Ean Schuessler committed
Lock waits reduced from 88+ seconds to 5-6 seconds (80-90% improvement)
MCP protocol compliance restored - no more validation errors
Session lifecycle working correctly - immediate usability after initialization
All MCP tools and functionality operational
Maintains security model while eliminating performance bottlenecks. -
Ean Schuessler committed
-
- 04 Dec, 2025 6 commits
-
-
- Fixed notifications/initialized to return 202 Accepted instead of 204 No Content - Added comprehensive MCP method implementation (prompts, roots, sampling, etc.) - Enhanced notification handling with proper session state transitions - Updated protocol version support to include 2025-11-25 with backward compatibility - Improved error handling and logging for debugging MCP connections - Added subscription tracking and message storage for advanced features - Fixed Accept header validation per MCP 2025-11-25 specification Resolves the critical two-step handshake issue where MCP Inspector was not receiving the correct response for notifications/initialized.
Ean Schuessler committed -
- Add notification queue mechanism in EnhancedMcpServlet - Register servlet instance for service access - Implement queueNotification() method for async notifications - Add notification delivery in JSON-RPC responses - Include notifications in both tools/list and tools/call services - Add execution timing and success metrics - Handle notification errors gracefully - Support both polling and SSE delivery methods This completes the MCP server notification system allowing real-time communication about tool execution status and metrics.
Ean Schuessler committed -
- Remove sessionId field from initialize response body (not in MCP spec) - Set Mcp-Session-Id header in initialize response using visit ID - Maintain proper header setting for other methods that return sessionId - Ensure MCP protocol compliance for initialization flow
Ean Schuessler committed -
- Allow notifications/initialized without session ID header as it completes initialization process - Add fallback to use visit ID as session ID for both initialize and notifications/initialized methods - Maintain proper session state management and validation for other methods - Follow MCP protocol specification for initialization flow
Ean Schuessler committed -
- Remove 'Moqui screen: component://...' prefix from descriptions - Use clean screen titles as descriptions instead - Fully decode screen paths from encoded tool names using established conventions - Tool names contain all necessary information: _ → /, . indicates XML boundary - Makes MCP tool list cleaner and more logical
Ean Schuessler committed -
Ean Schuessler committed
-
- 03 Dec, 2025 4 commits
-
-
- Remove expensive ToolsList and ResourcesList calls during initialization - Simplify initialize response to only include capabilities declaration - Tools and resources now discovered via separate list requests per MCP spec - Improves initialization speed and ensures protocol compliance
Ean Schuessler committed -
Ean Schuessler committed
-
This is obviously the wrong solution but I want to explore what we need to do to make screens directly explorable. Browser use affords the model the DOM interface, which helps it understand the document. We need to simplify the responses so that the abstraction becomes unnecessary.
Ean Schuessler committed -
Ean Schuessler committed
-
- 01 Dec, 2025 5 commits
-
-
- Add level parameter to processScreenWithSubscreens function - Use dot (.) only for first level subscreens (level == 1) - Use underscore (_) for all deeper levels (level > 1) - Preserves full hierarchy path in parentToolName parameter - Results in correct naming: Catalog.Product, Catalog_Product_FindProduct, Catalog_Product_Content_ContentCompare - Tool execution works with proper screen path resolution
Ean Schuessler committed -
- Use dot (.) only for explicitly defined subscreen items - Use underscore (_) for automatically discovered subscreens - Product.FindProduct now correctly named: screen_PopCommerce_screen_PopCommerceAdmin_Catalog_Product_FindProduct - Tool execution now works with proper screen path resolution - Resolves dot vs underscore naming convention for Moqui MCP tools
Ean Schuessler committed -
- Add parentToolName parameter to processScreenWithSubscreens function - Pass hierarchical tool name through recursive subscreen processing - SimpleScreens now appear under proper PopCommerceAdmin hierarchy - Product.FindProduct tool correctly named: screen_PopCommerce_screen_PopCommerceAdmin_Catalog.Product.FindProduct - Resolves issue where subscreens used file paths instead of hierarchical names
Ean Schuessler committed -
- Fixed missing opening brace and alignment issues in fallback logic - Removed duplicate log statement and extra closing brace - Screen discovery now works correctly for nested subscreens - Product.FindProduct tool now properly discovered under Catalog hierarchy Resolves broken MCP tool hierarchy where subscreens were missing from tools list.
Ean Schuessler committed -
- Separate processScreenWithSubscreens closure definition to fix Groovy closure scope issues - Add proper flattening of subScreenPathList to handle nested collections - Fix subscreen tool naming with dot notation for parent.child relationships - Enhance screen tool execution to support subscreen parameters - Unwrap Moqui service results in EnhancedMcpServlet to avoid double nesting in JSON-RPC responses - Improve error handling and logging throughout screen discovery process Now successfully discovers 29 total tools (17 screen tools + 12 service tools) with proper session management.
Ean Schuessler committed
-
- 29 Nov, 2025 3 commits
-
-
- Fixed property name from subScreenInfoByName to subscreenInfoByName (lowercase 's') - Added proper null checks for screenInfoList before accessing .first() - Added proper object navigation for accessing screen locations via subScreenInfo?.sd?.location - Resolved MissingPropertyException in Screen Discovery service - Screen discovery now working correctly, returning 345 screen tools for users
Ean Schuessler committed -
This resolves the error: 'No signature of method: org.moqui.impl.screen.ScreenFacadeImpl.getScreenInfo() is applicable for argument types: (String)' that occurred when trying to discover subscreens for screens like component://PopCommerce/screen/PopCommerceAdmin/Shipment.xml. The fix changes calls from getScreenInfo() to getScreenInfoList() which is the correct method available in ScreenFacadeImpl.
Ean Schuessler committed -
Ean Schuessler committed
-
- 28 Nov, 2025 4 commits
-
-
Ean Schuessler committed
-
Ean Schuessler committed
-
Ean Schuessler committed
-
Ean Schuessler committed
-
- 27 Nov, 2025 1 commit
-
-
- Created McpScreenTest and McpScreenTestRender interfaces - Rewrote CustomScreenTestImpl to implement MCP-specific interfaces instead of extending framework's buggy ScreenTestImpl - Added all required interface methods for complete functionality - Resolves @Override annotation error on non-existent makeWebFacade method - Maintains MCP functionality while providing independent screen test capabilities
Ean Schuessler committed
-
- 26 Nov, 2025 1 commit
-
-
- Updated screen tool call to use correct PopCommerce catalog screen - Added proper error assertions to fail test when isError is true - Added content validation to fail test when no products returned - Added blue product validation to ensure search criteria is met - Replaced warning messages with actual test failures The test now properly validates that PopCommerce catalog search works and actually finds blue products instead of just printing warnings.
Ean Schuessler committed
-
- 25 Nov, 2025 2 commits
-
-
- Replace unhelpful URL fallbacks with comprehensive error details - Include error type, message, stack trace, and context information - Add troubleshooting suggestions for common issues - Maintain test compatibility while improving debugging experience This makes MCP screen rendering failures much more actionable for developers.
Ean Schuessler committed -
- Contains working servlet implementation with URL fallback behavior - Tests passing with current approach - Ready to implement error exposure improvements
Ean Schuessler committed
-