1. 20 Jan, 2026 1 commit
    • 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
  2. 19 Jan, 2026 8 commits
    • When looking up wiki docs for a screen, now walks up the path hierarchy
      to find the most specific match. For example, for path
      'Catalog/Product/EditProduct/Assocs', it tries:
      
      1. Catalog/Product/EditProduct/Assocs (most specific)
      2. Catalog/Product/EditProduct (inherits if no specific doc)
      3. Catalog/Product
      4. Catalog
      
      This allows parent screen docs to apply to all child tabs/subscreens
      unless overridden with more specific documentation.
      
      Updated both getWikiInstructions (used by execute#ScreenAsMcpTool) and
      loadWikiContent (used by moqui_browse_screens) to use this approach.
      Ean Schuessler committed
    • Clarifies that User/Messages is a container and FindMessage should be
      used for full functionality (actions, transitions).
      Ean Schuessler committed
    • Shows screen-transition actions like editMessage, messageThread in a
      'transitions' array. Filters out internal actions (formSelectColumns,
      formSaveFind, screenDoc, actions).
      Ean Schuessler committed
    • - Updated PartyMessages wiki docs to emphasize partyId is required
      - Added missingRequired and error fields to compact format when
        required parameters are missing
      - This helps LLMs understand why a screen shows no forms/grids
      Ean Schuessler committed
    • Added MCP screen documentation for:
      - FindParty: Quick actions for creating people, orgs, accounts, employees
      - EditParty: Party detail management, roles, classifications, user accounts
      - PartyMessages/FindMessage: Internal messaging between parties
      - FindProduct: Product search and creation, variant workflow overview
      - EditProduct: Features, associations, complete variant setup guide
      
      Each doc includes example action calls with parameters.
      Ean Schuessler committed
    • - Add compact render mode (now default): LLM-optimized ~75% smaller output
        - Shows forms with fields, grids with sample rows, actions with services
        - Truncates dropdown options with fetch hints
      
      - Add ARIA render mode: W3C accessibility tree format
        - Maps Moqui fields to ARIA roles (textbox, combobox, checkbox, etc.)
      
      - Fix action execution to use framework transitions
        - Actions now append to screen path for proper transition handling
        - Framework handles inheritance, pre/post actions, response handling
      
      - Fix CSRF bypass for MCP requests
        - Set moqui.request.authenticated=true in MockHttpServletRequest attributes
      Ean Schuessler committed
    • - Remove remaining isTerse references from UiNarrativeBuilder
      - Truncate dropdown options to 10 in browse_screens with fetchHint
      - get_screen_details returns full options via mcpFullOptions flag
      - Extract wiki summary as top-level field in responses
      - Add extractSummary helper for first non-header paragraph
      Ean Schuessler committed
    • - Fix sri.getFieldOptions() call to pass drop-down node instead of parent field node
      - Remove terse parameter from all services and serialization
      - Increase safety limits by 10x: lists 10K items, strings 1MB, unknown types 10K chars
      - Add form-list field metadata extraction in FTL macros
      - Simplify McpFieldOptionsService to use CustomScreenTestImpl approach
      - Clean up redundant _fixed.groovy file
      Ean Schuessler committed
  3. 15 Jan, 2026 1 commit
    • - Extract service name and in-map from transition XML
      - Capture depends-on parameter attribute for field name mapping
      - Parse in-map parameter mapping for proper service calls
      - Support server-search autocomplete with term parameter
      - Fallback to ScreenAsMcpTool for entity-find transitions
      - Enhanced response format detection and error handling
      
      This implements TODO 1-3 from AGENTS.md:
      - TODO 1: Capture Depends-on Parameter Attribute
      - TODO 2: Extract Transition Service Name
      - TODO 3: Parse in-map Parameter Mapping
      
      Files modified:
      - DefaultScreenMacros.mcp.ftl: Extract transition metadata during screen render
      - McpFieldOptionsService.groovy: Use extracted metadata for intelligent autocomplete
      Ean Schuessler committed
  4. 13 Jan, 2026 7 commits
    • Error Handling:
      - Check ec.message.hasError() before and after transaction flush
      - Return "status": "error" with error messages instead of false success
      - Prevents silent failures when constraint violations occur (e.g., invalid Party IDs)
      
      Dropdown Metadata:
      - Capture static dropdown options from sri.getFieldOptions()
      - Capture dynamic-options config (transition, serverSearch, minLength, parameterMap)
      - Enables model to understand searchable dropdowns vs static lists
      
      This improves the model's ability to:
      1. See clear error messages when operations fail
      2. Understand dropdown behavior (server search vs static)
      3. Take corrective action based on error feedback
      Ean Schuessler committed
    • Fix path references in data files to use forward slash notation:
      - /PopCommerce/PopCommerceAdmin.Catalog.Product → /PopCommerce/PopCommerceAdmin/Catalog/Product
      - /PopCommerce/PopCommerceAdmin.Order.FindOrder → /PopCommerce/PopCommerceAdmin/Order/FindOrder
      - /PopCommerce/PopCommerceRoot.Customer → /PopCommerce/PopCommerceRoot/Customer
      
      Also updates:
      - AGENTS.md: Remove completed path delimiter test items
      - Fix wiki page path references (SimpleScreens.Root → SimpleScreens/Root)
      
      Aligns with slash-based path system adopted in earlier refactor.
      Ean Schuessler committed
    • Ean Schuessler committed
    • - EnhancedMcpServlet: Reuse existing ExecutionContext from MoquiAuthFilter instead of creating duplicate
      - EnhancedMcpServlet: Removed manual EC destruction - auth filter handles cleanup
      - McpServices: Skip EntityFind objects in serialization (they're query definitions, not data)
      - McpServices: Make patchScreenRenderForNullFieldNode static for call from static context
      - McpServices: Remove renderedContent for renderMode 'mcp' to avoid JSON duplication/truncation
      - AGENTS.md: Document rebuild.sh script usage
      - mcp.sh: Use hidden session file (.mcp_session_USER)
      - rebuild.sh: Fix shell syntax error and add startup wait logic
      Ean Schuessler committed
    • Move verbose per-request logging (request body, session management,
      SSE connections, method processing) from INFO to DEBUG level.
      Keep INFO for significant events like new Visit creation.
      Ean Schuessler committed
    • - 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
      Ean Schuessler committed
  5. 12 Jan, 2026 4 commits
    • - Add field types: radio, display, link, file-upload, hidden
      - Add link types: action, delete, external, button
      - Add action types: service-action, form-action, screen-transition, delete-action
      - Enhance parameter metadata with type, required, defaultValue
      - Classify actions automatically by service/name patterns
      - Update narrative builder to describe action/link types
      - Defensive parameter extraction with reflection fallbacks
      Ean Schuessler committed
    • - Safe navigation of formNode and fieldNode attributes using ?parent
      - Fallback to empty string for null field values in display/text macros
      - Use getActiveScreenDef() for screen name resolution in formListWidget
      - Prevents NullPointerException in EditPrices and other list screens.
      Ean Schuessler committed
    • - Resolve NonHashException in macros by avoiding .add() on sequences.
      - Fix 'Maps with null keys' JSON error by ensuring string keys.
      - Stabilize form macros with null-safe checks.
      - Update McpServices and CustomScreenTestImpl for better semantic data handling.
      Ean Schuessler committed
    • Extract core MCP logic into modular services (ResolveScreenPath, RenderScreenNarrative, ExecuteScreenAction) and update screen path conventions to use slash notation (e.g., /PopCommerce/Product) instead of dot notation. This aligns MCP navigation with browser URLs and improves path resolution reliability.
      
      - Split McpServices.xml into specialized services for better maintainability
      - Update DefaultScreenMacros.mcp.ftl to generate slash-based links
      - Update prompts and documentation to reflect new path convention
      - Enhance CustomScreenTestImpl to support slash path parsing
      - Add AGENTS.md documenting self-guided narrative screens architecture
      Ean Schuessler committed
  6. 09 Jan, 2026 2 commits
    • - Create UiNarrativeBuilder class for structured, story-like UI descriptions
        - screen: 50-80 words describing current state
        - actions: 80-120 words with exact tool invocation examples
        - navigation: 30-40 words for navigating to related screens
        - notes: 30-50 words for truncation, permissions, constraints
      
      - Enhance mcp.ftl macros to capture semantic metadata
        - form-single: Track field names, types, validation rules
        - form-list: Capture totalItems, displayedItems, truncated flags
        - Store metadata in mcpSemanticData for narrative generation
      
      - Deprecate DefaultScreenMacros.json.ftl
        - Update MoquiConf.xml to map both mcp and json to mcp.ftl
        - Remove redundant 218-line template with no semantic capture
      
      - Integrate uiNarrative into BrowseScreens service
        - Generate narrative using UiNarrativeBuilder
        - Include uiNarrative in result map
        - Provide screenDef for context
      
      - Remove redundant semantic state extraction
        - Delete fallback logic that extracted forms/lists from screen definition
        - Rely exclusively on mcpSemanticData captured by macros
      
      - Improve smart truncation in serializeMoquiObject
        - terse mode: 10 items, 200 char strings
        - non-terse mode: 50 items, no string truncation (fixed bug)
        - Add _hasMore flag to truncated data metadata
      
      - Fix CustomScreenTestImpl postRenderContext capture
        - Capture context before pop to preserve mcpSemanticData
      Ean Schuessler committed
  7. 05 Jan, 2026 1 commit
  8. 02 Jan, 2026 4 commits
  9. 31 Dec, 2025 2 commits
  10. 30 Dec, 2025 1 commit
  11. 29 Dec, 2025 1 commit
  12. 23 Dec, 2025 8 commits