1. 07 Dec, 2025 11 commits
  2. 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:
      :white_check_mark: Lock waits reduced from 88+ seconds to 5-6 seconds (80-90% improvement)
      :white_check_mark: MCP protocol compliance restored - no more validation errors
      :white_check_mark: Session lifecycle working correctly - immediate usability after initialization
      :white_check_mark: All MCP tools and functionality operational
      
      Maintains security model while eliminating performance bottlenecks.
      Ean Schuessler committed
  3. 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
  4. 03 Dec, 2025 4 commits
  5. 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
  6. 29 Nov, 2025 3 commits
  7. 28 Nov, 2025 4 commits
  8. 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
  9. 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