72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
/**
|
|
* UI/Process management tools for KiCAD MCP server
|
|
*/
|
|
|
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
import { z } from "zod";
|
|
import { logger } from "../logger.js";
|
|
|
|
export function registerUITools(server: McpServer, callKicadScript: Function) {
|
|
// Get MCP/KiCAD backend and loaded file state
|
|
server.tool(
|
|
"get_backend_state",
|
|
"Return the active backend, realtime status, loaded project/board paths, and dirty state.",
|
|
{},
|
|
async () => {
|
|
logger.info("Getting KiCAD backend state");
|
|
const result = await callKicadScript("get_backend_state", {});
|
|
return {
|
|
content: [
|
|
{
|
|
type: "text",
|
|
text: JSON.stringify(result, null, 2),
|
|
},
|
|
],
|
|
};
|
|
},
|
|
);
|
|
|
|
// Check if KiCAD UI is running
|
|
server.tool("check_kicad_ui", "Check if KiCAD UI is currently running", {}, async () => {
|
|
logger.info("Checking KiCAD UI status");
|
|
const result = await callKicadScript("check_kicad_ui", {});
|
|
return {
|
|
content: [
|
|
{
|
|
type: "text",
|
|
text: JSON.stringify(result, null, 2),
|
|
},
|
|
],
|
|
};
|
|
});
|
|
|
|
// Launch KiCAD UI
|
|
server.tool(
|
|
"launch_kicad_ui",
|
|
"Launch KiCAD UI, optionally with a project file",
|
|
{
|
|
projectPath: z.string().optional().describe("Optional path to .kicad_pcb file to open"),
|
|
autoLaunch: z
|
|
.boolean()
|
|
.optional()
|
|
.describe("Whether to launch KiCAD if not running (default: true)"),
|
|
},
|
|
async (args: { projectPath?: string; autoLaunch?: boolean }) => {
|
|
logger.info(
|
|
`Launching KiCAD UI${args.projectPath ? " with project: " + args.projectPath : ""}`,
|
|
);
|
|
const result = await callKicadScript("launch_kicad_ui", args);
|
|
return {
|
|
content: [
|
|
{
|
|
type: "text",
|
|
text: JSON.stringify(result, null, 2),
|
|
},
|
|
],
|
|
};
|
|
},
|
|
);
|
|
|
|
logger.info("UI management tools registered");
|
|
}
|