Skip to content

Commit 3d969ea

Browse files
authored
Adding UserAgent where it was missing (#411)
Adding UserAgent where it was missing. ## GitHub issue number None. ## **Associated Risks** None. ## ✅ **PR Checklist** - [x] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [x] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [x] Title of the pull request is clear and informative. - [x] 👌 Code hygiene - [x] 🔭 Telemetry added, updated, or N/A - [x] 📄 Documentation added, updated, or N/A - [x] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** Ran the tests. Tested some of the tools manually.
1 parent cacec23 commit 3d969ea

File tree

8 files changed

+107
-93
lines changed

8 files changed

+107
-93
lines changed

src/tools.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import { configureWorkTools } from "./tools/work.js";
1717
import { configureWorkItemTools } from "./tools/workitems.js";
1818

1919
function configureAllTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>, userAgentProvider: () => string) {
20-
configureCoreTools(server, tokenProvider, connectionProvider);
20+
configureCoreTools(server, tokenProvider, connectionProvider, userAgentProvider);
2121
configureWorkTools(server, tokenProvider, connectionProvider);
22-
configureBuildTools(server, tokenProvider, connectionProvider);
23-
configureRepoTools(server, tokenProvider, connectionProvider);
22+
configureBuildTools(server, tokenProvider, connectionProvider, userAgentProvider);
23+
configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider);
2424
configureWorkItemTools(server, tokenProvider, connectionProvider, userAgentProvider);
2525
configureReleaseTools(server, tokenProvider, connectionProvider);
2626
configureWikiTools(server, tokenProvider, connectionProvider);

src/tools/auth.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import { AccessToken } from "@azure/identity";
55
import { WebApi } from "azure-devops-node-api";
66

7-
async function getCurrentUserDetails(tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>) {
7+
async function getCurrentUserDetails(tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>, userAgentProvider: () => string) {
88
const connection = await connectionProvider();
99
const url = `${connection.serverUrl}/_apis/connectionData`;
1010
const token = (await tokenProvider()).token;
@@ -13,6 +13,7 @@ async function getCurrentUserDetails(tokenProvider: () => Promise<AccessToken>,
1313
headers: {
1414
"Authorization": `Bearer ${token}`,
1515
"Content-Type": "application/json",
16+
"User-Agent": userAgentProvider(),
1617
},
1718
});
1819
const data = await response.json();

src/tools/builds.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const BUILD_TOOLS = {
2121
update_build_stage: "build_update_build_stage",
2222
};
2323

24-
function configureBuildTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>) {
24+
function configureBuildTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>, userAgentProvider: () => string) {
2525
server.tool(
2626
BUILD_TOOLS.get_definitions,
2727
"Retrieves a list of build definitions for a given project.",
@@ -340,6 +340,7 @@ function configureBuildTools(server: McpServer, tokenProvider: () => Promise<Acc
340340
headers: {
341341
"Content-Type": "application/json",
342342
"Authorization": `Bearer ${token.token}`,
343+
"User-Agent": userAgentProvider(),
343344
},
344345
body: JSON.stringify(body),
345346
});

src/tools/core.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function filterProjectsByName(projects: ProjectInfo[], projectNameFilter: string
2121
return projects.filter((project) => project.name?.toLowerCase().includes(lowerCaseFilter));
2222
}
2323

24-
function configureCoreTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>) {
24+
function configureCoreTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>, userAgentProvider: () => string) {
2525
server.tool(
2626
CORE_TOOLS.list_project_teams,
2727
"Retrieve a list of teams for the specified Azure DevOps project.",
@@ -114,6 +114,7 @@ function configureCoreTools(server: McpServer, tokenProvider: () => Promise<Acce
114114
headers: {
115115
"Authorization": `Bearer ${token.token}`,
116116
"Content-Type": "application/json",
117+
"User-Agent": userAgentProvider(),
117118
},
118119
});
119120

src/tools/repos.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ function filterReposByName(repositories: GitRepository[], repoNameFilter: string
9797
return filteredByName;
9898
}
9999

100-
function configureRepoTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>) {
100+
function configureRepoTools(server: McpServer, tokenProvider: () => Promise<AccessToken>, connectionProvider: () => Promise<WebApi>, userAgentProvider: () => string) {
101101
server.tool(
102102
REPO_TOOLS.create_pull_request,
103103
"Create a new pull request.",
@@ -292,7 +292,7 @@ function configureRepoTools(server: McpServer, tokenProvider: () => Promise<Acce
292292
};
293293

294294
if (created_by_me || i_am_reviewer) {
295-
const data = await getCurrentUserDetails(tokenProvider, connectionProvider);
295+
const data = await getCurrentUserDetails(tokenProvider, connectionProvider, userAgentProvider);
296296
const userId = data.authenticatedUser.id;
297297
if (created_by_me) {
298298
searchCriteria.creatorId = userId;
@@ -359,7 +359,7 @@ function configureRepoTools(server: McpServer, tokenProvider: () => Promise<Acce
359359
};
360360

361361
if (created_by_me || i_am_reviewer) {
362-
const data = await getCurrentUserDetails(tokenProvider, connectionProvider);
362+
const data = await getCurrentUserDetails(tokenProvider, connectionProvider, userAgentProvider);
363363
const userId = data.authenticatedUser.id;
364364
if (created_by_me) {
365365
gitPullRequestSearchCriteria.creatorId = userId;

0 commit comments

Comments
 (0)