{"versionId":"6e8585ff-49ee-45b0-72b2-08df3875e214","articleId":"3ac3a6e3-ce26-4042-af81-08df392c5d0a","title":"Azure DevOps MCP server | Admin guide","tags":["MCP","System admin","Integrations","All articles"],"content":"<html><head></head><body><p>Connect Theta Assist to Azure DevOps so users can work with project information, work items and wiki pages from an assistant. This guide helps system administrators set up authentication, choose available features, control access and test the connection.</p>\n<div class=\"mce-toc\">\n<h2>Quick links</h2>\n<ul>\n<li><a href=\"#before-you-start\">Before you start</a></li>\n<li><a href=\"#permissions\">1. Add Azure DevOps permissions</a></li>\n<li><a href=\"#authentication\">2. Configure authentication</a></li>\n<li><a href=\"#add-server\">3. Add the MCP server</a></li>\n<li><a href=\"#configure\">4. Set organisation, project and feature options</a>\n<ul>\n<li><a href=\"#mcetoc_1k7681tjo8c\">Choose default values</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8d\">Enable attachment features</a></li>\n<li><a href=\"#enable-wiki\">Enable wiki features</a></li>\n</ul>\n</li>\n<li><a href=\"#access\">5. Set access controls and approvals</a>\n<ul>\n<li><a href=\"#mcetoc_1k7681tjo8e\">Control who can configure and use the server</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8f\">Choose an approval policy</a></li>\n</ul>\n</li>\n<li><a href=\"#assistant\">6. Set up an assistant</a></li>\n<li><a href=\"#test\">7. Run a test task</a>\n<ul>\n<li><a href=\"#mcetoc_1k7681tjo8g\">After completing the test</a></li>\n</ul>\n</li>\n<li><a href=\"#test-wiki\">8. Test wiki reading, searching and editing</a></li>\n<li><a href=\"#troubleshooting\">Troubleshoot setup</a>\n<ul>\n<li><a href=\"#mcetoc_1k7681tjo8h\">The server is missing from the assistant</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8i\">Authentication fails or the wrench icon has a red dot</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8j\">A call uses the wrong organisation or project</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8k\">A work item change is refused</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8l\">An attachment fails</a></li>\n<li><a href=\"#mcetoc_1k7681tjo8m\">A wiki tool is missing or fails</a></li>\n</ul>\n</li>\n</ul>\n</div>\n<h2 id=\"before-you-start\">Before you start</h2>\n<p>You will need:</p>\n<ul>\n<li>System administrator access in Theta Assist.</li>\n<li>Access to the Microsoft Entra app registration used for the connection, and someone authorised to grant consent under your tenant policy.</li>\n<li>The tenant ID, client ID, client secret and redirect settings for the app registration.</li>\n<li>An Azure DevOps account with access to the intended organisation and project.</li>\n<li>A test project where you can create a work item and, if needed, attach a small file.</li>\n<li>For wiki features, access to a wiki, and a non-sensitive test page you are allowed to edit.</li>\n<li>A decision about who can configure the server, who can use the assistant, and which features to enable.</li>\n</ul>\n<p>Check that <strong>Enable MCP Servers</strong> is turned on under <strong>Admin &gt; Tools &gt; Settings</strong>.</p>\n<h2 id=\"permissions\">1. Add Azure DevOps permissions</h2>\n<ol>\n<li>Open the Microsoft Entra admin centre and go to <strong>App registrations</strong>.</li>\n<li>Open the app registration you will use for Azure DevOps. If you reuse an existing registration, check its current integrations before changing it.</li>\n<li>Open <strong>API permissions</strong> and select <strong>Add a permission</strong>.</li>\n<li>Select the <strong>Azure DevOps</strong> API, then choose <strong>Delegated permissions</strong>. These are Azure DevOps permissions, not Microsoft Graph permissions.</li>\n<li>Add the permissions needed for your enabled features from the table below.&nbsp;</li>\n<li>Complete the consent process required by your organisation. Have an authorised administrator grant tenant-wide consent if that is your rollout approach.</li>\n</ol>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<thead>\n<tr>\n<th style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Permission</th>\n<th style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Type</th>\n<th style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.profile</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read the user profile.</td>\n</tr>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.project</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read project and team information.</td>\n</tr>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.work_write</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read and write work items.</td>\n</tr>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.code</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read code information.</td>\n</tr>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.build</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read build information.</td>\n</tr>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.wiki</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read and search wiki pages. Use for read-only wiki access.</td>\n</tr>\n<tr>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">vso.wiki_write</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Delegated</td>\n<td style=\"border: 1px solid #ccc; text-align: left; vertical-align: top; padding: 2px;\">Read and write wiki pages. Use instead of vso.wiki when editing is needed.</td>\n</tr>\n</tbody>\n</table>\n<p>Grant only the permissions needed for the tools you plan to make available. Users also need the corresponding access within Azure DevOps. Adding delegated permissions does not grant them extra organisation, project or wiki access.</p>\n<h2 id=\"authentication\">2. Configure authentication</h2>\n<ol>\n<li>Go to <strong>Admin &gt; Tools &gt; Auth Configurations</strong>.</li>\n<li>Select <strong>+ Add Auth</strong>, or open an existing configuration intended for Azure DevOps.</li>\n<li>Enter a clear name, such as “Azure DevOps production”, and select the appropriate Microsoft OAuth provider.</li>\n<li>Enter the tenant ID, client ID, client secret and OAuth details required by the form. Check that the redirect URI registered in Entra matches the callback used by your Theta Assist deployment.</li>\n<li>Set <strong>Scopes</strong> to the following value:</li>\n</ol>\n<pre><code>https://app.vssps.visualstudio.com/.default offline_access</code></pre>\n<ol start=\"6\">\n<li>Select <strong>Save</strong>.</li>\n</ol>\n<p>The Azure DevOps resource uses the .default scope to request permissions configured for that resource on the app registration. Adding a permission in Entra and entering the OAuth scopes are separate setup steps.</p>\n<p>Do not assume an existing Microsoft Graph authentication configuration has the correct scopes for Azure DevOps. Use an Azure DevOps-specific configuration where changing a shared configuration would affect another integration.</p>\n<p>For the shared authentication fields, see <a href=\"https://help.thetaassist.ai/article/authentication-configurations-admin-guide\">Authentication configurations | Admin guide</a>. Ask users to reconnect Azure DevOps after permissions or consent change.</p>\n<h2 id=\"add-server\">3. Add the MCP server</h2>\n<ol>\n<li>Go to <strong>Admin &gt; Tools &gt; MCP Servers</strong>.</li>\n<li>Select <strong>+ Theta Assist MCP Server</strong>.</li>\n<li>Select <strong>Azure DevOps</strong>. The built-in server details are pre-populated.</li>\n<li>Choose the Azure DevOps <strong>Auth Configuration</strong> you prepared.</li>\n<li>Review the server name and any additional instructions.</li>\n<li>Set the access controls and approval policy described below, then save the server.</li>\n</ol>\n<p><img src=\"https://storage.faqbot.nz/prod/0d5220bc9ad14992d05108dccd460f35/files/pasted_image_select-azure-devops-mcp-server.png_4a386f61-8f6b-48ef-83d5-eca5d6a340dc.png\" alt=\"Azure DevOps in the built-in Theta Assist MCP server picker, marked as requiring authentication.\" width=\"900\"></p>\n<h2 id=\"configure\">4. Set organisation, project and feature options</h2>\n<p>The Azure&nbsp;DevOps Connection section of this page (shown below) allows you to&nbsp;set its defaults and additional features.</p>\n<div><img src=\"https://storage.faqbot.nz/prod/0d5220bc9ad14992d05108dccd460f35/files/pasted_image_article_azure-devops-mcp-server-admin-guide_b508fd10-dc33-4b84-a559-768b15d87978.png\" width=\"800\"></div>\n<p>&nbsp;</p>\n<h3 id=\"mcetoc_1k7681tjo8c\">Choose default values</h3>\n<ol>\n<li>Enter your Azure DevOps organisation name in <strong>Default Organisation</strong>, for example “ThetaDigital”. Use your own organisation name.</li>\n<li>Optionally enter a project name in <strong>Default Project</strong>.</li>\n</ol>\n<p>Defaults let the assistant omit the organisation or project from individual calls. They can still be overridden per call. <strong>They are not access restrictions or an allowlist.</strong> Use Azure DevOps permissions to control access to organisations and projects.</p>\n<h3 id=\"mcetoc_1k7681tjo8d\">Enable attachment features</h3>\n<ol>\n<li>Turn on <strong>Turn work item attachments into secure download links</strong>.</li>\n<li>Turn on <strong>Allow the AI to attach files to work items</strong> if users should be able to upload attachments.</li>\n<li>Set <strong>Maximum file size (MB)</strong>. The supplied configuration uses 60 MB. Choose a lower limit if large uploads time out.</li>\n<li>Set <strong>Allowed file extensions</strong>, or leave the field blank to use the default document, image and data types.</li>\n<li>Turn on <strong>Allow public web addresses as a file source</strong> if your organisation allows attachments to be fetched from public HTTPS addresses.</li>\n<li>Continue to the wiki settings below, then select <strong>Save changes</strong> after choosing the features you need.</li>\n</ol>\n<p>Secure download links download files using the clicking user's Azure DevOps credentials. With this option, attachment file contents are not sent to the model.</p>\n<p>The upload option can attach an AI-generated file, a user-uploaded file, a document link from another tool or, when enabled, a public web address. Uploads use the signed-in user's Azure DevOps permissions.</p>\n<ul>\n<li>The configuration states a maximum of 60 MB per attachment and a default tool call limit of 90 seconds. An upload must finish within the tool call limit.</li>\n<li>Executable file types cannot be allowed. The file's actual contents are checked to determine its type.</li>\n<li>Public URL sources must use HTTPS. Private and internal addresses are refused.</li>\n<li>If public URL sources are off, generated files, uploaded files and document links can still be attached.</li>\n</ul>\n<h3 id=\"enable-wiki\">Enable wiki features</h3>\n<p>Choose whether users need read-only access or editing.</p>\n<ol>\n<li>Confirm the app registration has <strong>vso.wiki</strong> for reading and searching, or <strong>vso.wiki_write</strong> for editing as well.</li>\n<li>Turn on <strong>Allow the AI to search and read wiki pages</strong>.</li>\n<li>If users need editing, also turn on <strong>Allow the AI to create, edit and delete wiki pages</strong>. This is the current grouped setting label. Leave this option off for a read-only setup.</li>\n<li>Select <strong>Save changes</strong>.</li>\n<li>If permissions or consent changed, ask users to reconnect Azure DevOps before testing.</li>\n</ol>\n<p>Wiki reads and edits use the signed-in user's own wiki permissions. Review the tools exposed by the grouped write setting and use <strong>Allowed Tools</strong> to limit available actions where needed. This guide's confirmed release scope and test steps cover reading, searching and editing.</p>\n<h2 id=\"access\">5. Set access controls and approvals</h2>\n<h3 id=\"mcetoc_1k7681tjo8e\">Control who can configure and use the server</h3>\n<ol>\n<li>Go to <strong>Admin &gt; Management &gt; Access Profiles</strong> and create or select a profile for authorised assistant authors.</li>\n<li>Add the relevant users or groups.</li>\n<li>Assign that <strong>Access Profile</strong> to the Azure DevOps MCP server.</li>\n<li>Review who can access assistants that have the server enabled.</li>\n<li>Check each pilot user's organisation, project, work item and wiki permissions in Azure DevOps.</li>\n</ol>\n<p><strong>Important:</strong> For MCP servers, access profiles control who can add or configure the server on an assistant. They do not necessarily prevent other people from using it through an assistant they can access. Do not use an access profile as the only control for a pilot or restricted rollout.</p>\n<p>Delegated permissions are not app-only access. Consent to the app does not give a user extra project access in Azure DevOps. Defaults, assistant instructions and approval prompts do not replace service-side permissions.</p>\n<p>For more detail, see <a href=\"https://help.thetaassist.ai/article/access-profiles-admin-guide\">Access profiles | Admin guide</a>.</p>\n<h3 id=\"mcetoc_1k7681tjo8f\">Choose an approval policy</h3>\n<ol>\n<li>Set the server's <strong>Approval policy</strong> to <strong>Always require approval</strong> for initial testing.</li>\n<li>Review <strong>Allowed Tools</strong> if you want to limit the exposed tools, including wiki write actions.</li>\n<li>Save your changes.</li>\n</ol>\n<p><strong>Never require approval</strong> lets tools run without approval prompts. Use it only after reviewing the available actions and your organisation's requirements.</p>\n<p>Users can save approval preferences for a tool or the whole server. For a test that needs a fresh approval prompt, open the <strong>wrench icon &gt; Approvals</strong> and remove any saved preference for that tool or server. Ask pilot users not to save blanket approval while you are testing.</p>\n<h2 id=\"assistant\">6. Set up an assistant</h2>\n<ol>\n<li>Open an assistant you own or can edit.</li>\n<li>Open its <strong>Tools</strong> tab and enable the Azure DevOps MCP server.</li>\n<li>Add instructions describing the intended organisation, project and allowed tasks, including whether wiki editing is intended. Treat these as guidance, not enforceable access restrictions.</li>\n<li>Save the assistant and limit its audience to the pilot group.</li>\n<li>Open a conversation and select the <strong>wrench icon</strong> in the message box.</li>\n<li>Select <strong>Authenticate</strong> for Azure DevOps, sign in with the intended account and complete any consent prompts. Allow browser pop-ups if needed.</li>\n</ol>\n<p>A red dot next to the wrench icon indicates authentication is needed. Each user should sign in with their own account.</p>\n<p>See <a href=\"https://help.thetaassist.ai/article/adding-connectors-to-your-assistant\">Adding tools and connectors to your assistant</a> and <a href=\"https://help.thetaassist.ai/article/connectors-mcp-end-user-guide\">Connectors &amp; MCP | End user guide</a>.</p>\n<h2 id=\"test\">7. Run a test task</h2>\n<p>Use a test project and an account with permission to create work items. Replace the example names before sending these prompts.</p>\n<ol>\n<li>Confirm read access with: “In organisation [organisation] and project [project], list a few work items I can access. Do not change anything.”</li>\n<li>Check that the results are from the intended organisation and project.</li>\n<li>Test the configured defaults by asking: “Using the configured default organisation and project, list a few work items. Do not change anything.” If no default project is configured, name the project.</li>\n<li>Request a test task: “Create a Task in organisation [organisation], project [project], titled ‘Theta Assist MCP connection test’. Set the description to ‘Test item created to verify the Azure DevOps connection’. Do not assign it or change any other work items.”</li>\n<li>Review and approve the tool call if prompted.</li>\n<li>Open the returned work item in Azure DevOps and check its project, type, title and description.</li>\n<li>If attachments are enabled, upload a small non-sensitive PDF to the conversation and ask the assistant to attach it to that test work item.</li>\n<li>Ask for the work item's attachment links, then open a returned link and check that the file downloads with your Azure DevOps access.</li>\n</ol>\n<p>If the project does not support the Task work item type, choose an available type with the project owner before testing.</p>\n<h3 id=\"mcetoc_1k7681tjo8g\">After completing the test</h3>\n<ul>\n<li>Confirm authentication, defaults, approvals and attachments behave as expected.</li>\n<li>Check that a user without the required Azure DevOps access cannot perform the restricted action. Do not grant extra access just to make a negative test pass.</li>\n<li>Record the tested organisation, project, account, enabled features and outcome in your rollout record.</li>\n<li>Close or remove the test item in Azure DevOps under your team's normal process.</li>\n<li>Review the pilot results before expanding assistant access.</li>\n</ul>\n<h2 id=\"test-wiki\">8. Test wiki reading, searching and editing</h2>\n<p>Use a non-sensitive test page and an account with the required wiki access. Replace the example names and page path before sending these prompts.</p>\n<ol>\n<li>Test reading: “In organisation [organisation], project [project] and wiki [wiki], read the page [page path] and summarise it. Do not change anything.”</li>\n<li>Test searching: “Search wiki [wiki] in organisation [organisation], project [project], for [a phrase on the test page]. Show the matching pages. Do not change anything.”</li>\n<li>Check that the page and search results match the intended wiki.</li>\n<li>If editing is enabled, request a small change: “In wiki [wiki], update only the test page [page path] by adding the sentence ‘Theta Assist wiki connection test’. Keep all existing content and do not change any other page.”</li>\n<li>Review and approve the edit if prompted.</li>\n<li>Open the page in Azure DevOps and confirm that only the requested change was made.</li>\n<li>Remove the test sentence using your team's normal editing process.</li>\n</ol>\n<p>For a read-only setup, leave the grouped wiki write setting off and confirm that editing is unavailable. Also check that users without wiki access cannot read restricted pages or edit them. Record the test results before wider rollout.</p>\n<h2 id=\"troubleshooting\">Troubleshoot setup</h2>\n<h3 id=\"mcetoc_1k7681tjo8h\">The server is missing from the assistant</h3>\n<p>Check that the server was saved, MCP servers are enabled globally, the author belongs to the assigned access profile, and the server is enabled on the assistant's Tools tab. After changing access profile membership, allow up to 5 minutes for cached access to refresh.</p>\n<h3 id=\"mcetoc_1k7681tjo8i\">Authentication fails or the wrench icon has a red dot</h3>\n<p>Check the selected auth configuration, tenant, client ID, secret, redirect URI and scopes. Confirm that Azure DevOps delegated permissions and consent are in place, allow browser pop-ups, then authenticate again.</p>\n<h3 id=\"mcetoc_1k7681tjo8j\">A call uses the wrong organisation or project</h3>\n<p>Review the defaults and the organisation or project explicitly requested in the conversation. A call can override the defaults. Set Azure DevOps permissions separately if access needs to be restricted.</p>\n<h3 id=\"mcetoc_1k7681tjo8k\">A work item change is refused</h3>\n<p>Check vso.work_write, user access to the project and work item, available work item types, Allowed Tools and whether approval was rejected. Confirm the operation is exposed by the configured server.</p>\n<h3 id=\"mcetoc_1k7681tjo8l\">An attachment fails</h3>\n<p>Check the file size, allowed extensions, upload duration and user's work item permissions. If using a URL, check that public URL sources are enabled and the address is public HTTPS. Try a smaller non-sensitive file.</p>\n<h3 id=\"mcetoc_1k7681tjo8m\">A wiki tool is missing or fails</h3>\n<p>Check the wiki feature settings, Allowed Tools, consent and the user's wiki access. Reading and searching need&nbsp;vso.wiki or vso.wiki_write; editing needs vso.wiki_write and the grouped wiki write setting enabled. Reconnect Azure DevOps after permission changes.</p>\n<p>If needed, enable <strong>MCP Activity logs</strong> to investigate tool calls. See <a href=\"https://help.thetaassist.ai/article/mcp-servers-admin-guide\">MCP servers | Admin guide</a>.</p>\n<p>&nbsp;</p></body></html>","description":"Set up Azure DevOps authentication, permissions, organisation and project defaults, attachments, wiki access, access controls and approvals in Theta Assist. ","isMarkdown":false,"publishedOnUtc":"2026-11-11T22:26:05.3177344","modifiedOnUtc":"2026-11-11T21:24:36.437485"}