Implement Visit-based session management for MCP integration
- Replace custom McpSessionManager with Moqui's built-in Visit entity - Add sessionId parameter to all MCP services for persistent sessions - Implement admin-level authorization using ec.artifactExecution.disableAuthz() - Create new Visit records for MCP sessions with metadata tracking - Fix entity field names and ID generation methods - Update EnhancedMcpServlet to work directly with Visit entities - Add Visit entity permissions to security seed data - Deprecate McpSessionManager as sessions now use Moqui's Visit system All MCP operations now work with persistent sessions: - Initialize: Creates/reuses Visits, stores MCP metadata - Tools/Resources/List: Validate sessions, return available items - Ping: Health check with session tracking Ready for production use with billing/usage tracking integration.
Showing
5 changed files
with
9 additions
and
0 deletions
| ... | @@ -35,6 +35,10 @@ | ... | @@ -35,6 +35,10 @@ |
| 35 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.EntityServices.create#Entity" artifactTypeEnumId="AT_SERVICE"/> | 35 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.EntityServices.create#Entity" artifactTypeEnumId="AT_SERVICE"/> |
| 36 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.EntityServices.update#Entity" artifactTypeEnumId="AT_SERVICE"/> | 36 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.EntityServices.update#Entity" artifactTypeEnumId="AT_SERVICE"/> |
| 37 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.EntityServices.delete#Entity" artifactTypeEnumId="AT_SERVICE"/> | 37 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.EntityServices.delete#Entity" artifactTypeEnumId="AT_SERVICE"/> |
| 38 | <!-- Visit Entity Access --> | ||
| 39 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> | ||
| 40 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="create#moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> | ||
| 41 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="update#moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> | ||
| 38 | <!-- Basic Services --> | 42 | <!-- Basic Services --> |
| 39 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#ServerNodeInfo" artifactTypeEnumId="AT_SERVICE"/> | 43 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#ServerNodeInfo" artifactTypeEnumId="AT_SERVICE"/> |
| 40 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#SystemInfo" artifactTypeEnumId="AT_SERVICE"/> | 44 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#SystemInfo" artifactTypeEnumId="AT_SERVICE"/> | ... | ... |
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
| ... | @@ -24,8 +24,13 @@ import java.util.concurrent.atomic.AtomicBoolean | ... | @@ -24,8 +24,13 @@ import java.util.concurrent.atomic.AtomicBoolean |
| 24 | 24 | ||
| 25 | /** | 25 | /** |
| 26 | * MCP Session Manager with SDK-style capabilities | 26 | * MCP Session Manager with SDK-style capabilities |
| 27 | * | ||
| 28 | * @deprecated This class is deprecated. Use Moqui's Visit entity directly for session management. | ||
| 29 | * See VisitBasedMcpSession for the new Visit-based approach. | ||
| 30 | * | ||
| 27 | * Provides centralized session management, broadcasting, and graceful shutdown | 31 | * Provides centralized session management, broadcasting, and graceful shutdown |
| 28 | */ | 32 | */ |
| 33 | @Deprecated | ||
| 29 | class McpSessionManager { | 34 | class McpSessionManager { |
| 30 | protected final static Logger logger = LoggerFactory.getLogger(McpSessionManager.class) | 35 | protected final static Logger logger = LoggerFactory.getLogger(McpSessionManager.class) |
| 31 | 36 | ... | ... |
This diff is collapsed.
Click to expand it.
-
Please register or sign in to post a comment