executeJCRQuery
Run JCR queries to retrieve specific content or data from Adobe Experience Manager using this tool. Supports query execution with optional result limits for efficient content management.
Instructions
Execute JCR query
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Implementation Reference
- Core handler implementation: Executes QueryBuilder fulltext search on cq:Page nodes under /content with input validation, security checks against SQL injection patterns, and error handling via safeExecute.async executeJCRQuery(query, limit = 20) { return safeExecute(async () => { if (!query || typeof query !== 'string' || query.trim().length === 0) { throw new Error('Query is required and must be a non-empty string. Note: Only QueryBuilder fulltext is supported, not JCR SQL2.'); } // Basic security validation const lower = query.toLowerCase(); if (/drop|delete|update|insert|exec|script|\.|<script/i.test(lower) || query.length > 1000) { throw new Error('Query contains potentially unsafe patterns or is too long'); } const response = await this.httpClient.get('/bin/querybuilder.json', { params: { path: '/content', type: 'cq:Page', fulltext: query, 'p.limit': limit } }); return { query, results: response.data.hits || [], total: response.data.total || 0, limit }; }, 'executeJCRQuery');
- dist/mcp-server.js:209-220 (registration)MCP tool registration: Defines the tool name, description, and input schema (query required string, optional limit number) for the Model Context Protocol server.{ name: 'executeJCRQuery', description: 'Execute JCR query', inputSchema: { type: 'object', properties: { query: { type: 'string' }, limit: { type: 'number' }, }, required: ['query'], }, },
- dist/mcp-server.js:671-674 (handler)Top-level MCP request handler dispatch: Extracts parameters and calls AEMConnector.executeJCRQuery, formats result as MCP response.case 'executeJCRQuery': { const { query, limit } = args; const result = await aemConnector.executeJCRQuery(query, limit); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
- dist/aem-connector-new.d.ts:46-46 (schema)TypeScript interface definition for executeJCRQuery method signature.executeJCRQuery(query: string, limit?: number): Promise<import("./interfaces/index.js").JCRQueryResponse>;
- dist/aem-connector-new.js:139-140 (helper)Delegation from AEMConnector to SearchOperations module.async executeJCRQuery(query, limit) { return this.searchOps.executeJCRQuery(query, limit);