1. 05 Feb, 2026 1 commit
  2. 04 Feb, 2026 17 commits
  3. 30 Jan, 2026 1 commit
  4. 28 Jan, 2026 2 commits
    • Introduce clean adapter layer between Moqui infrastructure and MCP protocol:
      
      - transport/MoquiMcpTransport: Interface abstracting transport concerns
      - transport/SseTransport: SSE implementation with session management
      - adapter/McpSessionAdapter: Maps Moqui Visit to MCP sessions
      - adapter/McpToolAdapter: Maps MCP tools/methods to Moqui services
      - adapter/MoquiNotificationMcpBridge: Bridges Moqui notifications to MCP
      
      Simplify EnhancedMcpServlet to orchestrator role, removing inline session
      management, SSE logic, and tool dispatch. Remove redundant session
      validation in Initialize service (MoquiAuthFilter handles auth).
      
      Delete obsolete files:
      - VisitBasedMcpSession.groovy (replaced by McpSessionAdapter)
      - JsonRpcMessage.groovy (using plain Maps)
      - MoquiMcpTransport.groovy (replaced by new interface)
      Ean Schuessler committed
    • - Index business process workflows from BUSINESS_PROCESSES wiki space
      - Add workflow support to search and help tools
      - Improve documentation with better organized help content
      - Add type attributes to seed data files
      - Enhance error handling for workflow loading
      Ean Schuessler committed
  5. 23 Jan, 2026 1 commit
    • - Fix column extraction to include fields with both search and display widgets
      - Add all ID fields to row ref as pipe-delimited key=value pairs for unambiguous LLM parsing
      - Show NULL values as '(none)' in grid cells for consistency
      - Add ARIA-compliant action result feedback (role=alert for errors, role=status for success)
      - Pass actionResult through BrowseScreens ARIA mode
      - Hide batch_operations tool until fixed
      - Default renderMode to 'aria' instead of 'compact'
      Ean Schuessler committed
  6. 21 Jan, 2026 9 commits
    • When pseudoId differs from the internal productId (e.g., DEMO_VAR_GR_SM_COPY
      vs 100204), models were using the display ID for service calls causing FK errors.
      
      Now extracts the actual entity ID from the row's link URL and includes it in
      the row data:
      - compact: {id: 'DEMO_VAR_GR_SM_COPY', productId: '100204', link: '...'}
      - aria: {ref: 'DEMO_VAR_GR_SM_COPY', productId: '100204', ...}
      
      This is a generic solution that works for any entity type by parsing the
      primary key parameter from the Edit link URL.
      
      Fixes QA issue where models used pseudoId for applyProductFeatures causing
      'record does not exist' referential integrity errors.
      Ean Schuessler committed
    • - FTL: Capture Moqui pagination vars (pageIndex, pageSize, pageMaxIndex, listCount)
      - Compact mode: Add nextCursor object with pageIndex, pageSize, hasMore
      - ARIA mode: Add nextCursor to grid nodes
      - Add totalCount to show full result size
      
      Usage: Pass nextCursor values as parameters to get next page:
        parameters: {pageIndex: 1, pageSize: 20}
      
      Response format:
        nextCursor: {pageIndex: 1, pageSize: 20, hasMore: true}
        totalCount: 29
      Ean Schuessler committed
    • - FTL: Detect header-field search widgets (text-find, date-find, etc.)
      - FTL: Add 'searchable' flag and search-specific types to field metadata
      - ARIA: Add role='search' landmark before grids with searchable fields
      - Compact: Add searchParams array listing filterable parameters
      - Filter out 'get*' transitions (autocomplete helpers) from transitions list
      
      This helps LLM clients understand how to filter form-list results by
      passing parameters, rather than trying to call autocomplete transitions.
      Ean Schuessler committed
    • XML mode renders nearly empty screen hierarchy (just path structure, no content
      or data), which isn't useful for MCP clients.
      
      Remaining render modes:
      - compact: structured actionable summary (default)
      - aria: accessibility tree for field discovery
      - text: plain text rendering
      - html: full HTML rendering
      Ean Schuessler committed
    • These modes render Vue.js wrapper templates for web frontends, not actual
      screen content. They only show outer container HTML with subscreen placeholders,
      which isn't useful for MCP clients.
      
      Remaining render modes:
      - compact: structured actionable summary (default)
      - aria: accessibility tree for field discovery
      - text: plain text rendering
      - html: full HTML rendering
      - xml: XML rendering
      Ean Schuessler committed
    • The mcp render mode exposed too much internal detail (service names, full
      metadata) which confused smaller models into trying to call services directly.
      
      Changes:
      - Remove 'mcp' from renderMode descriptions in tool definitions
      - Map renderMode='mcp' to 'compact' if explicitly requested
      - Update AGENTS.md to remove mcp mode documentation
      - Internal rendering still uses mcp mode, just not exposed to users
      
      Users should use:
      - compact (default): actionable summary
      - aria: accessibility tree for field discovery
      - text/html: rendered output
      Ean Schuessler committed
    • Adds clear instructions in root wiki doc explaining:
      - How to execute actions (use action parameter, NOT service calls)
      - How to get dropdown options (use moqui_get_screen_details)
      - How to get action documentation (use moqui_get_help with help URI)
      - Updated screen paths to use apps/PopcAdmin format
      - Added global navigation paths (Messages, Tasks, Calendar)
      
      This helps models understand how to use the system after we removed
      service names and dropdown examples from responses.
      Ean Schuessler committed
    • ARIA and compact modes now cleaner for smaller models:
      
      - Remove service names from actions (confuses models into trying to call services)
      - Rename 'describedby' to 'help' for clarity (points to moqui_get_help tool)
      - Remove wiki:screen references (not useful, wiki content already in response)
      - Fix grid row refs to use specific IDs (productFeatureId, toProductId) instead
        of repeating generic productId for all rows
      - Filter navigation links: remove cross-app links, remove action URLs with
        encoded timestamps (fromDate/thruDate parameters)
      - Remove dropdown options counts and random examples - just indicate type,
        use moqui_get_screen_details for actual options
      
      This significantly reduces context volume and eliminates patterns that
      caused smaller models to hallucinate service calls.
      Ean Schuessler committed
    • ARIA mode was truncating grid rows to 3, links to 10, and actions to 15.
      This caused models to miss important data (e.g., only seeing 3 of 8 features
      or 3 of 16 variant associations).
      
      Now ARIA mode shows complete data like text mode does.
      Ean Schuessler committed
  7. 20 Jan, 2026 5 commits
    • Adds globalNav array to every browse_screens response with links to:
      - My Notifications (apps/my/User/Notifications)
      - My Messages (apps/my/User/Messages/FindMessage)
      - My Calendar (apps/my/User/Calendar/MyCalendar)
      - My Tasks (apps/my/User/Task/MyTasks)
      
      These mirror the MyAccountNav component in the web UI and are always
      available regardless of which app the user is currently browsing.
      
      Also adds a hint in uiNarrative.notes about globalNav and search.
      Ean Schuessler committed
    • The username parameter was being injected into screen render params, which
      conflicted with FindCustomer's 'username' search field. This caused the
      screen to filter results to only show customers with username matching
      the current user (john.sales*), returning 0 results.
      
      User context is already available via ec.user for authorization purposes,
      so injecting these params was redundant and harmful.
      Ean Schuessler committed
    • Critical fix: Errors now correctly captured and reported
      - Capture errors immediately after render() in CustomScreenTestImpl
      - Added saveMessagesToSession() to WebFacadeStub for framework compatibility
      - Actions that fail validation now report status:'error' instead of false success
      
      Documentation fix: Clarify two different feature services
      - applyProductFeatures: Apply EXISTING features to products (most common)
      - createProductFeature: Create NEW feature definitions (rare)
      - Updated EditProduct and ProductFeature wiki docs with correct examples
      Ean Schuessler committed
    • serverInfo now includes:
      - hostname and ipAddress for server identification
      - javaVersion and javaVendor for environment info
      - serverStartTime (epoch ms) for uptime calculation
      - moquiVersion, runtimePath for deployment verification
      - currentUser/currentUserId for auth confirmation
      
      Follows MCP standard - info returned via initialize response
      Ean Schuessler committed
    • Critical fixes:
      - Set resolvedScreenDef after successful literal path resolution (was falling back to webroot)
      - Traverse default subscreens when looking up transitions (matching action discovery logic)
      - Build full path including subscreens for framework transition execution
      
      New features:
      - moqui_batch_operations tool for multi-step workflows
      - Enhanced validation error handling with field-level details
      - ARIA mode now includes value, ref, description, describedby attributes
      
      Documentation:
      - Added render modes table and examples to AGENTS.md
      - Updated README with MARIA format explanation
      - Added MCP_SERVICE_DOCS wiki space with service parameter docs
      Ean Schuessler committed
  8. 19 Jan, 2026 4 commits