GetObjectStructure
Retrieve any ADT object's structure as a compact JSON tree by specifying its type and name.
Instructions
[read-only] Retrieve ADT object structure as a compact JSON tree.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| objecttype | Yes | ADT object type (e.g. DDLS/DF) | |
| objectname | Yes | ADT object name (e.g. /CBY/ACQ_DDL) |
Implementation Reference
- Main handler for GetObjectStructure tool. Calls ADT client's getObjectStructure, parses XML response into flat nodes, builds nested tree, and serializes to MCP-compatible text format.
export async function handleGetObjectStructure( context: HandlerContext, args: { objecttype?: string; objectname?: string; object_type?: string; object_name?: string; }, ) { const { connection, logger } = context; try { const objectType = args.objecttype ?? args.object_type; const objectName = args.objectname ?? args.object_name; if (!objectType || !objectName) { throw new Error( 'objecttype/objectname (or object_type/object_name) are required', ); } const client = createAdtClient(connection, logger); const response = await client .getUtils() .getObjectStructure(objectType, objectName); logger?.info(`Fetched object structure for ${objectType}/${objectName}`); // Parse XML response const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '', }); const parsed = parser.parse(response.data); // Get flat node list let nodes = parsed['projectexplorer:objectstructure']?.[ 'projectexplorer:node' ] as FlatObjectStructureNode | FlatObjectStructureNode[] | undefined; if (!nodes) { return { isError: true, content: [ { type: 'text', text: 'No nodes found in object structure response.', }, ], }; } // Ensure nodes is always an array if (!Array.isArray(nodes)) nodes = [nodes]; // Build nested tree const tree = buildNestedTree(nodes); // Serialize to MCP-compatible text format const treeText = `tree:\n${serializeTree(tree)}`; return { isError: false, content: [ { type: 'text', text: treeText, }, ], }; } catch (error) { logger?.error( `Failed to fetch object structure for ${args?.objecttype ?? args?.object_type}/${args?.objectname ?? args?.object_name}`, error, ); return { isError: true, content: [ { type: 'text', text: `ADT error: ${String(error)}`, }, ], }; } } - Input schema for GetObjectStructure tool. Defines 'objecttype' and 'objectname' as required string parameters.
export const TOOL_DEFINITION = { name: 'GetObjectStructure', available_in: ['onprem', 'cloud'] as const, description: '[read-only] Retrieve ADT object structure as a compact JSON tree.', inputSchema: { type: 'object', properties: { objecttype: { type: 'string', description: 'ADT object type (e.g. DDLS/DF)', }, objectname: { type: 'string', description: 'ADT object name (e.g. /CBY/ACQ_DDL)', }, }, required: ['objecttype', 'objectname'], }, } as const; - src/lib/handlers/groups/SystemHandlersGroup.ts:227-235 (registration)Registration of GetObjectStructure tool in SystemHandlersGroup. Maps toolDefinition to handler.
{ toolDefinition: GetObjectStructure_Tool, handler: (args: any) => { return handleGetObjectStructure( this.context, args as { object_type: string; object_name: string }, ); }, }, - Low-level handler for GetObjectStructureLow tool. Directly returns the raw ADT client response with session management support.
export async function handleGetObjectStructure( context: HandlerContext, args: GetObjectStructureArgs, ) { const { connection, logger } = context; try { // Validate required parameters if (!args?.object_type) { return return_error(new Error('object_type is required')); } if (!args?.object_name) { return return_error(new Error('object_name is required')); } // Restore session state if provided if (args.session_id && args.session_state) { const { restoreSessionInConnection } = await import( '../../../lib/utils.js' ); await restoreSessionInConnection( connection, args.session_id, args.session_state, ); } // Create AdtClient and get utilities const client = createAdtClient(connection, logger); const utils = client.getUtils(); logger?.info( `Fetching object structure for ${args.object_type}/${args.object_name}`, ); const result = await utils.getObjectStructure( args.object_type, args.object_name, ); logger?.debug( `Object structure fetched successfully for ${args.object_type}/${args.object_name}`, ); return return_response(result); } catch (error: any) { logger?.error('Failed to fetch object structure', error); return return_error(error); } } - Input schema for GetObjectStructureLow tool. Defines object_type, object_name, session_id, and session_state parameters.
export const TOOL_DEFINITION = { name: 'GetObjectStructureLow', available_in: ['onprem', 'cloud'] as const, description: '[low-level] Retrieve ADT object structure as compact JSON tree. Returns XML response with object structure tree. Can use session_id and session_state from GetSession to maintain the same session.', inputSchema: { type: 'object', properties: { object_type: { type: 'string', description: 'Object type (e.g., "CLAS/OC", "PROG/P", "DEVC/K", "DDLS/DF")', }, object_name: { type: 'string', description: 'Object name (e.g., "ZMY_CLASS", "ZMY_PROGRAM")', }, session_id: { type: 'string', description: 'Session ID from GetSession. If not provided, a new session will be created.', }, session_state: { type: 'object', description: 'Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.', properties: { cookies: { type: 'string' }, csrf_token: { type: 'string' }, cookie_store: { type: 'object' }, }, }, }, required: ['object_type', 'object_name'], }, } as const;