rhombus-node-mcp
Version:
MCP server for Rhombus API
63 lines (62 loc) • 2.34 kB
JavaScript
import { z } from "zod";
import { postApi } from "../network.js";
import { addConfirmationParams, isConfirmed, requireConfirmation } from "../utils/confirmation.js";
async function rebootCameras(cameraUuids, requestModifiers) {
let successCount = 0;
let errorCount = 0;
for (const cameraUuid in cameraUuids) {
try {
const body = { cameraUuid };
const response = await postApi("/camera/reboot", body, requestModifiers);
if (response.error) {
errorCount++;
}
else {
successCount++;
}
}
catch (error) {
const ret = `Error rebooting cameras: ${error}`;
return { error: true, status: ret };
}
let status;
if (successCount === cameraUuids.length)
status = "SUCCESS";
else if (successCount > 0 && successCount < cameraUuids.length)
status = "PARTIAL_SUCCESS";
else
status = "ERROR";
return { status, successCount, errorCount };
}
}
export function createTool(server) {
server.tool("reboot-cameras", "this tool is for rebooting one or more cameras causing them to reconnect to the server, this is a helpful option when a camera is experiencing connectivity issues or is in need of troubleshooting. THIS TOOL PERFORMS AN ACTION.", addConfirmationParams({
cameraUuids: z
.array(z.string())
.describe("An array of camera UUID strings which are unique identifiers for cameras"),
}), async ({ cameraUuids, confirmationId }, extra) => {
const confirmation = requireConfirmation(confirmationId);
if (!isConfirmed(confirmation)) {
return confirmation;
}
const cameraRebootData = await rebootCameras(cameraUuids, extra._meta?.requestModifiers);
if (!cameraRebootData) {
return {
content: [
{
type: "text",
text: "Failed to reboot cameras",
},
],
};
}
return {
content: [
{
type: "text",
text: JSON.stringify(cameraRebootData),
},
],
};
});
}