Name Last Update
data Loading commit data...
entity Loading commit data...
screen Loading commit data...
service Loading commit data...
template Loading commit data...
AGENTS.md Loading commit data...
README.md Loading commit data...
build.gradle Loading commit data...
component.xml Loading commit data...

Moqui MCP Server v0.2.0

Overview

Simplified MCP server that uses Moqui's native service engine directly, eliminating need for manual tool registry management.

Evolution from v0.1.0 (moqui-mcp) to v0.2.0 (moqui-mcp-2)

Architectural Problems Identified in v0.1.0

The original moqui-mcp implementation had significant architectural duplications with Moqui's native systems:

  1. McpToolRegistry vs Service Engine

    • Manual tool registry duplicated Moqui's service discovery
    • Required manual maintenance of tool definitions
    • Added unnecessary database queries and complexity
  2. McpAuditLog vs ArtifactHit

    • Custom audit logging duplicated Moqui's proven ArtifactHit system
    • Missed built-in performance monitoring and aggregation
    • Separate audit trail instead of unified system-wide analytics
  3. McpSession vs Visit Entity

    • Custom session management duplicated Moqui's Visit entity
    • Lost geo-location, referrer tracking, and other built-in features
    • Separate session lifecycle instead of leveraging existing patterns
  4. McpToolCall vs ArtifactHit

    • Custom tool call tracking duplicated ArtifactHit functionality
    • Manual performance tracking instead of automatic aggregation
    • Separate error handling and logging

v0.2.0 Architectural Solutions

Complete Elimination of Duplications:

  • :x: McpToolRegistry → :white_check_mark: Service Engine (ec.service.getServiceNames())
  • :x: McpAuditLog → :white_check_mark: ArtifactHit (native audit & performance)
  • :x: McpSession → :white_check_mark: Visit Entity (extended with MCP fields)
  • :x: McpToolCall → :white_check_mark: ArtifactHit (with artifactType="MCP")

Key Architectural Changes:

  1. Native Service Discovery ```groovy // Before: Query McpToolRegistry def tools = ec.entity.find("McpToolRegistry").list()

// After: Direct service engine access def allServiceNames = ec.service.getServiceNames() def hasPermission = ec.service.hasPermission(serviceName)


2. **Unified Session Management**
   ```xml
   <!-- Before: Custom McpSession entity -->
   <entity entity-name="McpSession" package="org.moqui.mcp">

   <!-- After: Extend native Visit entity -->
   <extend-entity entity-name="Visit" package="moqui.server">
       <field name="mcpContextToken" type="text-medium"/>
       <field name="mcpStatusId" type="id"/>
       <field name="mcpExpiresDate" type="date-time"/>
   </extend-entity>
  1. System-Wide Analytics ```sql -- Before: Separate MCP tracking SELECT * FROM McpToolCall ORDER BY startTime DESC; SELECT * FROM McpAuditLog WHERE severity = 'McpSeverityWarning';

-- After: Unified system tracking SELECT * FROM moqui.server.ArtifactHit WHERE artifactType = 'MCP' ORDER BY startDateTime DESC; SELECT * FROM moqui.server.ArtifactHitReport WHERE artifactType = 'MCP';


### Benefits Achieved

**Zero Maintenance**:
- No manual tool registry updates
- Automatic reflection of actual Moqui services
- No custom audit infrastructure to maintain

**Maximum Performance**:
- Direct service engine access (no extra lookups)
- Native caching and optimization
- Built-in performance monitoring

**Unified Analytics**:
- MCP operations visible in system-wide reports
- Automatic aggregation via ArtifactHitBin
- Standard reporting tools and dashboards

**Architectural Purity**:
- Follows Moqui's established patterns
- Leverages proven native systems
- REST service pattern (MCP as service invocation layer)

### Technical Implementation

**MCP Operation Flow**:
1. Session creation → `Visit` record with MCP extensions
2. Tool discovery → `ec.service.getServiceNames()` + permission check
3. Tool execution → Direct service call + `ArtifactHit` creation
4. Analytics → Native `ArtifactHitReport` aggregation

**Data Model**:
- Sessions: `moqui.server.Visit` (extended)
- Operations: `moqui.server.ArtifactHit` (filtered)
- Performance: `moqui.server.ArtifactHitBin` (automatic)
- Security: `moqui.security.UserGroupPermission` (native)

This evolution represents a complete architectural alignment with Moqui's core design principles while maintaining full MCP functionality.

## Quick Start

### 1. Add Component to Moqui
Add to your `MoquiConf.xml`:
```xml
<component name="moqui-mcp-2" location="moqui-mcp-2/"/>

2. Start Moqui

./gradlew run

3. Test MCP Server

# Health check
curl http://localhost:8080/mcp-2/health

# Create session
curl -X POST http://localhost:8080/mcp-2/session \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "admin"}'

Integration with Opencode

MCP Skill Configuration

Add to your Opencode configuration:

{
  "skills": [
    {
      "name": "moqui-mcp",
      "type": "mcp",
      "endpoint": "http://localhost:8080/mcp-2",
      "auth": {
        "type": "session",
        "username": "admin",
        "password": "admin"
      },
      "description": "Query business data from Moqui ERP system"
    }
  ]
}

Example Business Questions

Once configured, you can ask:

  • "Show me all active customers"
  • "What are recent orders for ACME Corp?"
  • "List all products in inventory"
  • "Find unpaid invoices"
  • "Show user accounts with admin permissions"

API Endpoints

Session Management

  • POST /session - Create session
  • POST /session/{visitId}/validate - Validate session
  • POST /session/{visitId}/terminate - Terminate session

Tool Operations

  • POST /tools/discover - Discover available tools
  • POST /tools/validate - Validate tool access
  • POST /tools/execute - Execute service tool
  • POST /tools/entity/query - Execute entity query

System

  • GET /health - Server health check

Security Model

Permission-Based Access

Tools are discovered based on user's UserGroupPermission settings:

  • Services: ec.service.hasPermission(serviceName)
  • Entities: ec.user.hasPermission("entity:EntityName", "VIEW")

Audit Trail

All operations are tracked via Moqui's native ArtifactHit system:

  • Automatic performance monitoring
  • Built-in security event tracking
  • Configurable persistence (database/ElasticSearch)
  • Standard reporting via ArtifactHitReport

Monitoring

Check Logs

# MCP operations
tail -f moqui.log | grep "MCP"

# Session activity
tail -f moqui.log | grep "Visit"

Database Queries

-- MCP operations via ArtifactHit
SELECT * FROM moqui.server.ArtifactHit 
WHERE artifactType = 'MCP' 
ORDER BY startDateTime DESC LIMIT 10;

-- MCP sessions (using Visit entity)
SELECT * FROM moqui.server.Visit 
WHERE mcpStatusId = 'McsActive' AND webappName = 'mcp-2';

-- MCP service operations
SELECT * FROM moqui.server.ArtifactHit 
WHERE artifactType = 'MCP' AND artifactSubType = 'Service'
ORDER BY startDateTime DESC LIMIT 10;

-- MCP entity operations  
SELECT * FROM moqui.server.ArtifactHit 
WHERE artifactType = 'MCP' AND artifactSubType = 'Entity'
ORDER BY startDateTime DESC LIMIT 10;

-- Performance analytics
SELECT * FROM moqui.server.ArtifactHitReport 
WHERE artifactType = 'MCP';

Next Steps

  1. Test Basic Functionality: Verify session creation and tool discovery
  2. Configure Opencode Skill: Add MCP skill to your Opencode instance
  3. Test Business Queries: Try natural language business questions
  4. Monitor Performance: Check logs and audit tables
  5. Extend as Needed: Add custom services/entities for specific business logic

Architecture Benefits

  • Zero Maintenance: No manual tool registry updates
  • Always Current: Reflects actual Moqui services in real-time
  • Secure: Uses Moqui's proven permission system
  • Performant: Direct service engine access, no extra lookups
  • Unified Analytics: All MCP operations tracked via native ArtifactHit
  • Built-in Reporting: Uses ArtifactHitReport for standard analytics
  • Native Session Management: Uses Moqui's Visit entity for session tracking
  • REST Service Pattern: MCP is fundamentally a REST service invocation layer
  • Zero Custom Tracking: Eliminates McpToolCall duplication with ArtifactHit

This MVP provides core functionality needed to integrate Moqui with Opencode as an MCP skill for business intelligence queries.