MCP ABAP ADT

by mario-andreschak
Verified
import { McpError, ErrorCode, AxiosResponse } from '../lib/utils'; import { makeAdtRequest, return_error, return_response, getBaseUrl } from '../lib/utils'; import convert from 'xml-js'; export async function handleGetPackage(args: any) { try { if (!args?.package_name) { throw new McpError(ErrorCode.InvalidParams, 'Package name is required'); } const nodeContentsUrl = `${await getBaseUrl()}/sap/bc/adt/repository/nodestructure`; const nodeContentsParams = { parent_type: "DEVC/K", parent_name: args.package_name, withShortDescriptions: true }; const package_structure_response = await makeAdtRequest(nodeContentsUrl, 'POST', 30000, undefined, nodeContentsParams); const result = convert.xml2js(package_structure_response.data, {compact: true}); const nodes = result["asx:abap"]?.["asx:values"]?.DATA?.TREE_CONTENT?.SEU_ADT_REPOSITORY_OBJ_NODE || []; const extractedData = (Array.isArray(nodes) ? nodes : [nodes]).filter(node => node.OBJECT_NAME?._text && node.OBJECT_URI?._text ).map(node => ({ OBJECT_TYPE: node.OBJECT_TYPE._text, OBJECT_NAME: node.OBJECT_NAME._text, OBJECT_DESCRIPTION: node.DESCRIPTION?._text, OBJECT_URI: node.OBJECT_URI._text })); return { isError: false, content: [{ type: 'text', text: JSON.stringify(extractedData) }] }; } catch (error) { return return_error(error); } }