@mcp-apps/azure-devops-mcp-server
Version:
A Model Context Protocol (MCP) server for Azure DevOps integration
324 lines (279 loc) • 8.77 kB
text/typescript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// Import tools
import { listWorkItemsTool } from "./tools/list-work-items";
import { createWorkItemTool } from "./tools/create-work-item";
import { updateWorkItemTool } from "./tools/update-work-item";
import { listRepositoriesTool } from "./tools/git-list-repositories";
import { listPullRequestsTool } from "./tools/git-list-pull-requests";
import { getRepositoryFileTool } from "./tools/git-get-repository-file";
import { createPullRequestTool } from "./tools/git-create-pull-request";
import { listProjectsTool } from "./tools/projects";
import { gitCommandTool } from "./tools/git-command";
import { cloneRepositoryTool } from "./tools/git-clone-repository";
import { createBranchTool } from "./tools/git-create-branch";
import { pushChangesTool } from "./tools/git-push-changes";
import { getRepositoryStatusTool } from "./tools/git-get-repository-status";
import { commitChangesTool } from "./tools/git-commit-changes";
import {
listBuildPipelinesTool,
getBuildPipelineDetailsTool,
listBuildRunsTool,
listReleasePipelinesTool,
getReleasePipelineDetailsTool,
listReleaseRunsTool
} from "./tools/pipelines";
import {
queryTestCasesTool,
getTestCaseDetailsTool,
createTestCaseTool
} from "./tools/test-cases.js";
// Import new PR analysis tools
import { getPRBasicInfoTool } from "./tools/get-pr-basic-info";
import { getPRCodeDiffsTool } from "./tools/get-pr-code-diffs";
import { getPRDetailedChangesTool } from "./tools/get-pr-detailed-changes";
import { getPRTestImpactTool } from "./tools/get-pr-test-impact";
import { getRepositoryContextTool } from "./tools/get-repository-context";
// Import PR review-action tools
import { setPullRequestVoteTool } from "./tools/git-set-pr-vote";
import { listPullRequestThreadsTool } from "./tools/git-list-pr-threads";
import { addPullRequestCommentTool } from "./tools/git-add-pr-comment";
import { replyPullRequestCommentTool } from "./tools/git-reply-pr-comment";
// Import search tools
import { searchCodeTool, searchWorkItemsTool, searchWikiTool } from "./tools/search";
// Create server instance
const server = new McpServer({
name: "azure-devops-mcp-server",
description: "Azure DevOps MCP Server",
version: "1.0.0",
});
// 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
);
// Register PR analysis tools
server.tool(
getPRBasicInfoTool.name,
getPRBasicInfoTool.description,
getPRBasicInfoTool.parameters,
getPRBasicInfoTool.handler
);
server.tool(
getPRCodeDiffsTool.name,
getPRCodeDiffsTool.description,
getPRCodeDiffsTool.parameters,
getPRCodeDiffsTool.handler
);
server.tool(
getPRDetailedChangesTool.name,
getPRDetailedChangesTool.description,
getPRDetailedChangesTool.parameters,
getPRDetailedChangesTool.handler
);
server.tool(
getPRTestImpactTool.name,
getPRTestImpactTool.description,
getPRTestImpactTool.parameters,
getPRTestImpactTool.handler
);
server.tool(
getRepositoryContextTool.name,
getRepositoryContextTool.description,
getRepositoryContextTool.parameters,
getRepositoryContextTool.handler
);
// Register PR review-action tools (vote / comment / reply)
server.tool(
setPullRequestVoteTool.name,
setPullRequestVoteTool.description,
setPullRequestVoteTool.parameters,
setPullRequestVoteTool.handler
);
server.tool(
listPullRequestThreadsTool.name,
listPullRequestThreadsTool.description,
listPullRequestThreadsTool.parameters,
listPullRequestThreadsTool.handler
);
server.tool(
addPullRequestCommentTool.name,
addPullRequestCommentTool.description,
addPullRequestCommentTool.parameters,
addPullRequestCommentTool.handler
);
server.tool(
replyPullRequestCommentTool.name,
replyPullRequestCommentTool.description,
replyPullRequestCommentTool.parameters,
replyPullRequestCommentTool.handler
);
// Register search tools (code / work items / wiki)
server.tool(
searchCodeTool.name,
searchCodeTool.description,
searchCodeTool.parameters,
searchCodeTool.handler
);
server.tool(
searchWorkItemsTool.name,
searchWorkItemsTool.description,
searchWorkItemsTool.parameters,
searchWorkItemsTool.handler
);
server.tool(
searchWikiTool.name,
searchWikiTool.description,
searchWikiTool.parameters,
searchWikiTool.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();