@turbot/guardrails-mcp
Version:
MCP server for interacting with Turbot Guardrails.
114 lines (113 loc) • 4 kB
JavaScript
import { executeQuery } from "../utils/graphqlClient.js";
import { logger } from '../services/pinoLogger.js';
import { formatJsonToolResponse, errorResponse, formatGraphQLError } from '../utils/responseFormatter.mjs';
export const tool = {
name: "guardrails_policy_setting_show",
description: "Show detailed information about a specific policy setting.",
inputSchema: {
type: "object",
properties: {
id: {
type: "string",
description: "The ID of the policy setting to show (e.g. '320152411455166')"
}
},
required: ["id"],
additionalProperties: false
},
handler: async ({ id }) => {
logger.info("Starting show_guardrails_policy_setting tool execution");
try {
const query = `
query ShowPolicySetting($id: ID!) {
policySetting(id: $id) {
default
enforce
exception
input
isCalculated
note
orphan
precedence
template
templateInput
validFromTimestamp
validToTimestamp
value
valueSource
turbot {
id
createTimestamp
updateTimestamp
}
type {
uri
trunk {
title
}
}
resource {
data
metadata
trunk {
title
}
turbot {
id
akas
tags
}
type {
uri
}
}
}
}
`;
logger.debug("Executing GraphQL query with ID:", id);
const result = JSON.parse(await executeQuery(query, { id }));
logger.info("Query executed successfully");
// Transform the response to flatten and reorganize fields
const policySetting = result.policySetting;
const transformedResult = {
id: policySetting.turbot.id,
default: policySetting.default,
enforce: policySetting.enforce,
exception: policySetting.exception,
input: policySetting.input,
isCalculated: policySetting.isCalculated,
note: policySetting.note,
orphan: policySetting.orphan,
precedence: policySetting.precedence,
template: policySetting.template,
templateInput: policySetting.templateInput,
validFromTimestamp: policySetting.validFromTimestamp,
validToTimestamp: policySetting.validToTimestamp,
value: policySetting.value,
valueSource: policySetting.valueSource,
type: {
uri: policySetting.type.uri,
title: policySetting.type.trunk.title
},
turbot: {
createTimestamp: policySetting.turbot.createTimestamp,
updateTimestamp: policySetting.turbot.updateTimestamp
},
resource: {
id: policySetting.resource.turbot.id,
title: policySetting.resource.trunk?.title || null,
typeUri: policySetting.resource.type.uri,
akas: policySetting.resource.turbot.akas,
tags: policySetting.resource.turbot.tags,
data: policySetting.resource.data,
metadata: policySetting.resource.metadata
}
};
return formatJsonToolResponse(transformedResult);
}
catch (error) {
logger.error("Error in show_guardrails_policy_setting:", error);
return errorResponse(formatGraphQLError(error, id));
}
}
};