@mcp-apps/azure-devops-mcp-server
Version:
A Model Context Protocol (MCP) server for Azure DevOps integration
225 lines (195 loc) • 5.61 kB
text/typescript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// Import tools
import { listWorkItemsTool, createWorkItemTool, updateWorkItemTool } from "./tools/work-items";
import { listRepositoriesTool, listPullRequestsTool, getRepositoryFileTool, createPullRequestTool } from "./tools/repositories";
import { listProjectsTool } from "./tools/projects";
import {
gitCommandTool,
cloneRepositoryTool,
createBranchTool,
pushChangesTool,
getRepositoryStatusTool,
commitChangesTool
} from "./tools/git-commands";
import {
listBuildPipelinesTool,
getBuildPipelineDetailsTool,
listBuildRunsTool,
listReleasePipelinesTool,
getReleasePipelineDetailsTool,
listReleaseRunsTool
} from "./tools/pipelines";
import {
queryTestCasesTool,
getTestCaseDetailsTool,
createTestCaseTool
} from "./tools/test-cases.js";
// FOR TESTING ONLY: Uncomment the following lines to use a specific access token
// import { getAccessToken } from "./utils/token-manager";
// const accessToken = getAccessToken();
// Create server instance
const server = new McpServer({
name: "azure-devops-mcp-server",
description: "Azure DevOps MCP Server",
version: "1.0.0",
capabilities: {
resources: {},
tools: {},
},
});
// Register tools
server.tool(
listWorkItemsTool.name,
listWorkItemsTool.description,
listWorkItemsTool.parameters,
listWorkItemsTool.handler
);
server.tool(
createWorkItemTool.name,
createWorkItemTool.description,
createWorkItemTool.parameters,
createWorkItemTool.handler
);
server.tool(
updateWorkItemTool.name,
updateWorkItemTool.description,
updateWorkItemTool.parameters,
updateWorkItemTool.handler
);
server.tool(
listRepositoriesTool.name,
listRepositoriesTool.description,
listRepositoriesTool.parameters,
listRepositoriesTool.handler
);
server.tool(
listPullRequestsTool.name,
listPullRequestsTool.description,
listPullRequestsTool.parameters,
listPullRequestsTool.handler
);
server.tool(
getRepositoryFileTool.name,
getRepositoryFileTool.description,
getRepositoryFileTool.parameters,
getRepositoryFileTool.handler
);
server.tool(
listProjectsTool.name,
listProjectsTool.description,
listProjectsTool.parameters,
listProjectsTool.handler
);
server.tool(
createPullRequestTool.name,
createPullRequestTool.description,
createPullRequestTool.parameters,
createPullRequestTool.handler
);
// Register Git commands tools
server.tool(
gitCommandTool.name,
gitCommandTool.description,
gitCommandTool.parameters,
gitCommandTool.handler
);
server.tool(
cloneRepositoryTool.name,
cloneRepositoryTool.description,
cloneRepositoryTool.parameters,
cloneRepositoryTool.handler
);
server.tool(
createBranchTool.name,
createBranchTool.description,
createBranchTool.parameters,
createBranchTool.handler
);
server.tool(
pushChangesTool.name,
pushChangesTool.description,
pushChangesTool.parameters,
pushChangesTool.handler
);
server.tool(
getRepositoryStatusTool.name,
getRepositoryStatusTool.description,
getRepositoryStatusTool.parameters,
getRepositoryStatusTool.handler
);
server.tool(
commitChangesTool.name,
commitChangesTool.description,
commitChangesTool.parameters,
commitChangesTool.handler
);
// Register pipeline tools
server.tool(
listBuildPipelinesTool.name,
listBuildPipelinesTool.description,
listBuildPipelinesTool.parameters,
listBuildPipelinesTool.handler
);
server.tool(
getBuildPipelineDetailsTool.name,
getBuildPipelineDetailsTool.description,
getBuildPipelineDetailsTool.parameters,
getBuildPipelineDetailsTool.handler
);
server.tool(
listBuildRunsTool.name,
listBuildRunsTool.description,
listBuildRunsTool.parameters,
listBuildRunsTool.handler
);
server.tool(
listReleasePipelinesTool.name,
listReleasePipelinesTool.description,
listReleasePipelinesTool.parameters,
listReleasePipelinesTool.handler
);
server.tool(
getReleasePipelineDetailsTool.name,
getReleasePipelineDetailsTool.description,
getReleasePipelineDetailsTool.parameters,
getReleasePipelineDetailsTool.handler
);
server.tool(
listReleaseRunsTool.name,
listReleaseRunsTool.description,
listReleaseRunsTool.parameters,
listReleaseRunsTool.handler
);
// Register test case tools
server.tool(
queryTestCasesTool.name,
queryTestCasesTool.description,
queryTestCasesTool.parameters,
queryTestCasesTool.handler
);
server.tool(
getTestCaseDetailsTool.name,
getTestCaseDetailsTool.description,
getTestCaseDetailsTool.parameters,
getTestCaseDetailsTool.handler
);
server.tool(
createTestCaseTool.name,
createTestCaseTool.description,
createTestCaseTool.parameters,
createTestCaseTool.handler
);
// Start the server
async function main() {
try {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Azure DevOps MCP Server running on stdio");
} catch (error) {
console.error("Error starting server:", error);
process.exit(1);
}
}
main();