@azure-devops/mcp 2.3.0-nightly.20251221 → 2.3.0-nightly.20251222

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -100,6 +100,7 @@ function trimPullRequest(pr, includeDescription = false) {
100
100
  isDraft: pr.isDraft,
101
101
  sourceRefName: pr.sourceRefName,
102
102
  targetRefName: pr.targetRefName,
103
+ project: pr.repository?.project?.name,
103
104
  };
104
105
  }
105
106
  function configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider) {
@@ -838,15 +839,15 @@ function configureRepoTools(server, tokenProvider, connectionProvider, userAgent
838
839
  rightFileStartOffset: z
839
840
  .number()
840
841
  .optional()
841
- .describe("Position of first character of the thread's span in right file. The line number of a thread's position. The character offset of a thread's position inside of a line. Starts at 1. Must only be set if rightFileStartLine is also specified. (optional)"),
842
+ .describe("Position of first character of the thread's span in right file. The line number of a thread's position. The character offset of a thread's position inside of a line. Starts at 1. Must be set if rightFileStartLine is also specified. (optional)"),
842
843
  rightFileEndLine: z
843
844
  .number()
844
845
  .optional()
845
- .describe("Position of last character of the thread's span in right file. The line number of a thread's position. Starts at 1. Must only be set if rightFileStartLine is also specified. (optional)"),
846
+ .describe("Position of last character of the thread's span in right file. The line number of a thread's position. Starts at 1. Must be set if rightFileStartLine is also specified. (optional)"),
846
847
  rightFileEndOffset: z
847
848
  .number()
848
849
  .optional()
849
- .describe("Position of last character of the thread's span in right file. The character offset of a thread's position inside of a line. Must only be set if rightFileEndLine is also specified. (optional)"),
850
+ .describe("Position of last character of the thread's span in right file. The character offset of a thread's position inside of a line. Must be set if rightFileEndLine is also specified. (optional)"),
850
851
  }, async ({ repositoryId, pullRequestId, content, project, filePath, status, rightFileStartLine, rightFileStartOffset, rightFileEndLine, rightFileEndOffset }) => {
851
852
  try {
852
853
  const connection = await connectionProvider();
@@ -884,6 +885,12 @@ function configureRepoTools(server, tokenProvider, connectionProvider, userAgent
884
885
  isError: true,
885
886
  };
886
887
  }
888
+ if (rightFileEndOffset === undefined) {
889
+ return {
890
+ content: [{ type: "text", text: "rightFileEndOffset must be specified if rightFileEndLine is specified." }],
891
+ isError: true,
892
+ };
893
+ }
887
894
  threadContext.rightFileEnd = { line: rightFileEndLine };
888
895
  if (rightFileEndOffset !== undefined) {
889
896
  if (rightFileEndOffset < 1) {
@@ -895,6 +902,28 @@ function configureRepoTools(server, tokenProvider, connectionProvider, userAgent
895
902
  threadContext.rightFileEnd.offset = rightFileEndOffset;
896
903
  }
897
904
  }
905
+ if (rightFileEndOffset !== undefined && rightFileEndLine === undefined) {
906
+ return {
907
+ content: [{ type: "text", text: "rightFileEndLine must be specified if rightFileEndOffset is specified." }],
908
+ isError: true,
909
+ };
910
+ }
911
+ if (rightFileStartLine !== undefined && rightFileStartOffset !== undefined) {
912
+ if (rightFileEndLine === undefined || rightFileEndOffset === undefined) {
913
+ return {
914
+ content: [{ type: "text", text: "rightFileEndLine and rightFileEndOffset must both be specified when rightFileStartLine and rightFileStartOffset are both specified." }],
915
+ isError: true,
916
+ };
917
+ }
918
+ }
919
+ if (rightFileStartLine !== undefined && rightFileEndLine !== undefined && rightFileStartLine === rightFileEndLine) {
920
+ if (rightFileEndOffset !== undefined && rightFileStartOffset !== undefined && rightFileEndOffset < rightFileStartOffset) {
921
+ return {
922
+ content: [{ type: "text", text: "rightFileEndOffset must be greater than or equal to rightFileStartOffset when both are on the same line." }],
923
+ isError: true,
924
+ };
925
+ }
926
+ }
898
927
  const thread = await gitApi.createThread({ comments: [{ content: content }], threadContext: threadContext, status: CommentThreadStatus[status] }, repositoryId, pullRequestId, project);
899
928
  const trimmedThread = trimPullRequestThread(thread);
900
929
  return {
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const packageVersion = "2.3.0-nightly.20251221";
1
+ export const packageVersion = "2.3.0-nightly.20251222";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-devops/mcp",
3
- "version": "2.3.0-nightly.20251221",
3
+ "version": "2.3.0-nightly.20251222",
4
4
  "mcpName": "microsoft.com/azure-devops",
5
5
  "description": "MCP server for interacting with Azure DevOps",
6
6
  "license": "MIT",
@@ -41,7 +41,7 @@
41
41
  "@azure/identity": "^4.10.0",
42
42
  "@azure/msal-node": "^3.6.0",
43
43
  "@modelcontextprotocol/sdk": "1.24.3",
44
- "azure-devops-extension-api": "^4.252.0",
44
+ "azure-devops-extension-api": "^4.264.0",
45
45
  "azure-devops-extension-sdk": "^4.0.2",
46
46
  "azure-devops-node-api": "^15.1.0",
47
47
  "winston": "^3.18.3",
@@ -62,7 +62,7 @@
62
62
  "lint-staged": "^16.2.7",
63
63
  "prettier": "3.7.3",
64
64
  "shx": "^0.4.0",
65
- "ts-jest": "^29.4.0",
65
+ "ts-jest": "^29.4.6",
66
66
  "tsconfig-paths": "^4.2.0",
67
67
  "typescript": "^5.9.3",
68
68
  "typescript-eslint": "^8.48.0"