@etm-professional-control/winccoa-mcp-server
Version:
MCP Server for WinCC OA with field-specific configurations
57 lines (52 loc) • 2.36 kB
JavaScript
/**
* Datapoint Type Management Tools
*
* MCP tools for retrieving datapoint type information.
*/
import { z } from 'zod';
import { createSuccessResponse, createErrorResponse } from '../../utils/helpers.js';
/**
* Register datapoint type management tools
* @param server - MCP server instance
* @param context - Server context with winccoa, configs, etc.
* @returns Number of tools registered
*/
export function registerTools(server, context) {
const { winccoa } = context;
server.tool("dp-type-get", `Get structure of a data point type as a tree of nodes.
dpt: Data point type name to retrieve structure for
includeSubTypes: Optional flag to include subtypes in the result (default: false)
Returns: WinccoaDpTypeNode structure representing the complete hierarchy of the data point type
including all elements, their data types, and structural relationships.`, {
dpType: z.string(),
withSubTypes: z.boolean().optional()
}, async ({ dpType, withSubTypes }) => {
try {
const result = winccoa.dpTypeGet(dpType, withSubTypes);
return createSuccessResponse(result);
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
console.error(`Error getting datapoint type ${dpType}:`, error);
return createErrorResponse(`Failed to get datapoint type ${dpType}: ${errorMessage}`);
}
});
server.tool("dp-type-name", `Returns the data point type for the given data point name.
dpName: Name of the data point (for example, 'valve.opening')
Returns: DP type as a string, or empty string if data point doesn't exist or error occurs.
Example: dpTypeName('Valve17.opening') might return 'AnalogValve'`, {
dpName: z.string()
}, async ({ dpName }) => {
try {
const result = winccoa.dpTypeName(dpName);
return createSuccessResponse({ dpName, typeName: result });
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
console.error(`Error getting type name for ${dpName}:`, error);
return createErrorResponse(`Failed to get type name for ${dpName}: ${errorMessage}`);
}
});
return 2; // Number of tools registered
}
//# sourceMappingURL=dp_types.js.map