1. 11 Dec, 2025 8 commits
  2. 08 Dec, 2025 4 commits
  3. 07 Dec, 2025 13 commits
  4. 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
  5. 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
  6. 03 Dec, 2025 4 commits