diff --git a/tools/Mcp/README.md b/tools/Mcp/README.md index e99d152dabae..204d465f5adc 100644 --- a/tools/Mcp/README.md +++ b/tools/Mcp/README.md @@ -52,6 +52,23 @@ This MCP server is designed to work with Azure PowerShell module development wor ## Usage +### Add as mcp server in Github Copilot Agent mode + +Simple add this mcp server to your user `settings.json` in VsCode to include: + +```json + "mcp": { + "servers": { + "az-pwsh-mcp-server": { + "type": "stdio", + "command": "sh", + "args": ["-c", "npm install && npm run fresh"], + "cwd": "./azure-powershell/tools/Mcp", + }, + } + } +``` + ### As an MCP Server The server runs on stdio and can be integrated with MCP-compatible clients: diff --git a/tools/Mcp/package.json b/tools/Mcp/package.json index 01a3027772ea..fff41806944a 100644 --- a/tools/Mcp/package.json +++ b/tools/Mcp/package.json @@ -8,7 +8,8 @@ }, "scripts": { "build": "tsc", - "start": "node build/index.js" + "start": "node build/index.js", + "fresh": "npm run build && npm run start" }, "files": [ "build" diff --git a/tools/Mcp/src/CodegenServer.ts b/tools/Mcp/src/CodegenServer.ts index 47a33d0886bb..e34173faea28 100644 --- a/tools/Mcp/src/CodegenServer.ts +++ b/tools/Mcp/src/CodegenServer.ts @@ -1,11 +1,19 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -import { toolParameterSchema, toolSchema } from "./types.js"; -import specs from "./specs/Specs.json" assert { type: "json" }; -import responses from "./specs/responses.json" assert { type: "json" }; +import { responseSchema, toolParameterSchema, toolSchema } from "./types.js"; import { toolServices } from "./services/toolServices.js"; +import { readFileSync } from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const srcPath = path.resolve(__dirname, "..", "src"); + +const specs = JSON.parse(readFileSync(path.join(srcPath, "specs/specs.json"), "utf-8")); +const responses = JSON.parse(readFileSync(path.join(srcPath, "specs/responses.json"), "utf-8")); + export class CodegenServer { private static _instance: CodegenServer; private _mcp: McpServer; @@ -76,7 +84,7 @@ export class CodegenServer { } initResponses() { - responses?.forEach(response => { + (responses as responseSchema[])?.forEach((response: responseSchema) => { this._responses.set(response.name, response.text); }); } diff --git a/tools/Mcp/src/services/utils.ts b/tools/Mcp/src/services/utils.ts index 11642322d44d..ad4d65cd5f12 100644 --- a/tools/Mcp/src/services/utils.ts +++ b/tools/Mcp/src/services/utils.ts @@ -124,7 +124,7 @@ export async function getExamplesFromSpecs(workingDirectory: string): Promise