Skip to main content
Glama

SFCC Development MCP Server

by taurgis
system-object-tool-config.ts5.92 kB
import { GenericToolSpec, ToolExecutionContext } from '../core/handlers/base-handler.js'; import { ToolArguments } from '../core/handlers/base-handler.js'; import { ValidationHelpers, CommonValidations } from '../core/handlers/validation-helpers.js'; import { OCAPIClient } from '../clients/ocapi-client.js'; export const SYSTEM_OBJECT_TOOL_NAMES = [ 'get_system_object_definitions', 'get_system_object_definition', 'search_system_object_attribute_definitions', 'search_custom_object_attribute_definitions', 'search_site_preferences', 'search_system_object_attribute_groups', ] as const; export type SystemObjectToolName = typeof SYSTEM_OBJECT_TOOL_NAMES[number]; export const SYSTEM_OBJECT_TOOL_NAMES_SET = new Set<SystemObjectToolName>(SYSTEM_OBJECT_TOOL_NAMES); /** * Configuration for system object tools * Maps each tool to its validation, execution, and messaging logic */ export const SYSTEM_OBJECT_TOOL_CONFIG: Record<SystemObjectToolName, GenericToolSpec<ToolArguments, any>> = { get_system_object_definitions: { defaults: (args: ToolArguments) => args, validate: (_args: ToolArguments, _toolName: string) => { // No validation needed for list operation }, exec: async (args: ToolArguments, context: ToolExecutionContext) => { const client = context.ocapiClient as OCAPIClient; // Pass pagination parameters to the client const params = { start: args.start as number, count: args.count as number, select: args.select as string, }; // Remove undefined values to avoid sending them Object.keys(params).forEach(key => { if (params[key as keyof typeof params] === undefined) { delete params[key as keyof typeof params]; } }); return client.systemObjects.getSystemObjectDefinitions(Object.keys(params).length > 0 ? params : undefined); }, logMessage: (args: ToolArguments) => `Get system object definitions (start: ${args?.start ?? 0}, count: ${args?.count ?? 200})`, }, get_system_object_definition: { defaults: (args: ToolArguments) => args, validate: (args: ToolArguments, toolName: string) => { ValidationHelpers.validateArguments(args, CommonValidations.requiredString('objectType'), toolName); }, exec: async (args: ToolArguments, context: ToolExecutionContext) => { const client = context.ocapiClient as OCAPIClient; return client.systemObjects.getSystemObjectDefinition(args.objectType as string); }, logMessage: (args: ToolArguments) => `Get system object definition for ${args?.objectType}`, }, search_system_object_attribute_definitions: { defaults: (args: ToolArguments) => ({ ...args, searchRequest: args.searchRequest ?? { query: { match_all_query: {} }, select: '(**)', count: 200, }, }), validate: (args: ToolArguments, toolName: string) => { ValidationHelpers.validateArguments(args, CommonValidations.requiredString('objectType'), toolName); }, exec: async (args: ToolArguments, context: ToolExecutionContext) => { const client = context.ocapiClient as OCAPIClient; return client.systemObjects.searchSystemObjectAttributeDefinitions( args.objectType as string, args.searchRequest as any, ); }, logMessage: (args: ToolArguments) => `Search system object attributes for ${args?.objectType}`, }, search_custom_object_attribute_definitions: { defaults: (args: ToolArguments) => ({ ...args, searchRequest: args.searchRequest ?? { query: { match_all_query: {} }, count: 200, }, }), validate: (args: ToolArguments, toolName: string) => { ValidationHelpers.validateArguments(args, CommonValidations.requiredString('objectType'), toolName); }, exec: async (args: ToolArguments, context: ToolExecutionContext) => { const client = context.ocapiClient as OCAPIClient; return client.systemObjects.searchCustomObjectAttributeDefinitions( args.objectType as string, args.searchRequest as any, ); }, logMessage: (args: ToolArguments) => `Search custom object attributes for ${args?.objectType}`, }, search_site_preferences: { defaults: (args: ToolArguments) => ({ ...args, instanceType: args.instanceType ?? 'sandbox', searchRequest: args.searchRequest ?? { query: { match_all_query: {} }, count: 200, }, options: args.options ?? { expand: 'value' }, }), validate: (args: ToolArguments, toolName: string) => { ValidationHelpers.validateArguments(args, CommonValidations.requiredString('groupId'), toolName); }, exec: async (args: ToolArguments, context: ToolExecutionContext) => { const client = context.ocapiClient as OCAPIClient; return client.sitePreferences.searchSitePreferences( args.groupId as string, args.instanceType as string, args.searchRequest as any, args.options as any, ); }, logMessage: (args: ToolArguments) => `Search site preferences group ${args?.groupId}`, }, search_system_object_attribute_groups: { defaults: (args: ToolArguments) => ({ ...args, searchRequest: args.searchRequest ?? { query: { match_all_query: {} }, count: 200, }, }), validate: (args: ToolArguments, toolName: string) => { ValidationHelpers.validateArguments(args, CommonValidations.requiredString('objectType'), toolName); }, exec: async (args: ToolArguments, context: ToolExecutionContext) => { const client = context.ocapiClient as OCAPIClient; return client.systemObjects.searchSystemObjectAttributeGroups( args.objectType as string, args.searchRequest as any, ); }, logMessage: (args: ToolArguments) => `Search attribute groups for ${args?.objectType}`, }, };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/taurgis/sfcc-dev-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server