get_data_element
Fetch the complete definition of an SAP DDIC data element, including data type, length, and semantic attributes, using the data element name and optional system ID.
Instructions
Fetch DDIC data element definition from SAP system
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Data element name (e.g. MATNR) | |
| system_id | No | SAP system ID (e.g. DEV). Omit to use default system. |
Implementation Reference
- src/mcp-server.ts:200-208 (registration)Tool 'get_data_element' is registered in the ListToolsRequestSchema handler with name, description, and input schema (requires 'name' string, optional 'system_id').
{ name: "get_data_element", description: "Fetch DDIC data element definition from SAP system", inputSchema: { type: "object" as const, properties: { name: { type: "string", description: "Data element name (e.g. MATNR)" }, ...SYSTEM_ID_PROP }, required: ["name"], }, }, - src/mcp-server.ts:994-1005 (handler)Handler for 'get_data_element': parses args with NameSchema, calls client.getSourceOrMetadata() with ADT source and metadata URIs for DDIC data elements, then parses XML via parseDataElementXml() if the result contains '<dtel:dataElement>'.
case "get_data_element": { const { name: dtelName } = NameSchema.parse(args); const encoded = encodeURIComponent(dtelName.toUpperCase()); const result = await client.getSourceOrMetadata( `/sap/bc/adt/ddic/dataelements/${encoded}/source/main`, `/sap/bc/adt/ddic/dataelements/${encoded}` ); const text = result.includes("<dtel:dataElement") ? parseDataElementXml(result) : result; return { content: [{ type: "text", text }] }; } - src/adt-client.ts:72-81 (helper)Helper method getSourceOrMetadata() on AdtClient: tries to fetch source text first (sourcePath), falls back to metadata XML (metadataPath) if source returns 404.
async getSourceOrMetadata(sourcePath: string, metadataPath: string): Promise<string> { try { return await this.getSource(sourcePath); } catch (error: unknown) { if (axios.isAxiosError(error) && error.response?.status === 404) { return await this.getMetadata(metadataPath); } throw error; } } - src/dtel-parser.ts:1-44 (helper)Helper module dtel-parser.ts: contains parseDataElementXml() which extracts data element properties from XML (name, description, typeKind, typeName, dataType, length, decimals, field labels, search help, default component name) and formats them as readable text.
function extract(xml: string, tag: string): string { const match = xml.match(new RegExp(`<dtel:${tag}>(.*?)</dtel:${tag}>`)); return match?.[1] ?? ""; } function extractAttr(xml: string, attr: string): string { const match = xml.match(new RegExp(`adtcore:${attr}="([^"]+)"`)); return match?.[1] ?? ""; } export function parseDataElementXml(xml: string): string { const name = extractAttr(xml, "name"); const description = extractAttr(xml, "description"); const typeKind = extract(xml, "typeKind"); const typeName = extract(xml, "typeName"); const dataType = extract(xml, "dataType"); const length = extract(xml, "dataTypeLength").replace(/^0+/, "") || "0"; const decimals = extract(xml, "dataTypeDecimals").replace(/^0+/, "") || "0"; const shortLabel = extract(xml, "shortFieldLabel"); const mediumLabel = extract(xml, "mediumFieldLabel"); const longLabel = extract(xml, "longFieldLabel"); const headingLabel = extract(xml, "headingFieldLabel"); const searchHelp = extract(xml, "searchHelp"); const defaultComp = extract(xml, "defaultComponentName"); const lines = [ `Data Element: ${name}`, `Description: ${description}`, ``, `Type: ${typeKind} → ${typeName}`, `Data Type: ${dataType}(${length}${parseInt(decimals) > 0 ? `, ${decimals}` : ""})`, ``, `Field Labels:`, ` Short: ${shortLabel}`, ` Medium: ${mediumLabel}`, ` Long: ${longLabel}`, ` Heading: ${headingLabel}`, ]; if (searchHelp) lines.push(``, `Search Help: ${searchHelp}`); if (defaultComp) lines.push(`Default Comp: ${defaultComp}`); return lines.join("\n"); } - src/mcp-server.ts:13-14 (schema)Input schema NameSchema used by get_data_element handler: validates that 'name' is a required string.
const NameSchema = z.object({ name: z.string() }); const FunctionModuleSchema = z.object({