{"openapi":"3.1.0","info":{"title":"Azure DevOps (BYOK) API","version":"0.1.0","description":"Azure DevOps (BYOK) lets an AI assistant read your own Azure DevOps data through the Azure DevOps API with a key you supply (personal access token). Read-only: 9 tools (list_projects, list_repositories, list_pull_requests, list_commits, list_refs, list_builds, list_build_definitions, query_work_items, get_work_items). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-azuredevops.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-azuredevops/docs"},"termsOfService":"https://connectorbay.com/byok-azuredevops/terms"},"servers":[{"url":"https://byok-azuredevops.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-azuredevops/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_projects":{"post":{"operationId":"list_projects","summary":"List the projects of an organization with name, id, description, visibility, state and last update. Use for \"What Azure ","description":"List the projects of an organization with name, id, description, visibility, state and last update. Use for \"What Azure DevOps projects are in the fabrikam organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"state_filter":{"anyOf":[{"enum":["wellFormed","all","deleting","new","createPending","deleted"],"type":"string"},{"type":"null"}],"default":null,"description":"Which projects: wellFormed (default), all, deleting, new, createPending or deleted.","title":"State Filter"},"top":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many projects to return (1 to 1000, default 100).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Skip"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization"],"title":"list_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_repositories":{"post":{"operationId":"list_repositories","summary":"List the Git repositories of a project with name, id, default branch, size, disabled and fork flags and web link. Use fo","description":"List the Git repositories of a project with name, id, default branch, size, disabled and fork flags and web link. Use for \"What Git repositories are in the Azure DevOps project SampleProject\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project"],"title":"list_repositoriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_pull_requests":{"post":{"operationId":"list_pull_requests","summary":"List pull requests of a repository (active by default) with title, status, creator name, branches, draft flag and merge ","description":"List pull requests of a repository (active by default) with title, status, creator name, branches, draft flag and merge status. Use for \"Which pull requests are active in Azure DevOps repository SampleRepository\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"repository_id":{"description":"Repository name or id (see list_repositories).","maxLength":200,"title":"Repository Id","type":"string"},"status":{"anyOf":[{"enum":["active","abandoned","completed","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Pull request status: active (default), abandoned, completed or all.","title":"Status"},"target_branch":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only pull requests into this branch, written as a full ref such as refs/heads/main.","title":"Target Branch"},"source_branch":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only pull requests from this branch, written as a full ref such as refs/heads/feature.","title":"Source Branch"},"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many pull requests to return (1 to 200, default 50).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Skip"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project","repository_id"],"title":"list_pull_requestsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_commits":{"post":{"operationId":"list_commits","summary":"List commits of a repository (newest first) with commit id, message, author name and date; filter by branch, path, autho","description":"List commits of a repository (newest first) with commit id, message, author name and date; filter by branch, path, author or dates. Use for \"What were the latest commits in Azure DevOps repository SampleRepository\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"repository_id":{"description":"Repository name or id (see list_repositories).","maxLength":200,"title":"Repository Id","type":"string"},"branch":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Branch name to list history from; default is the default branch.","title":"Branch"},"item_path":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits that changed this path, for example '/src/app.py'.","title":"Item Path"},"author":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits by this author (alias or display name).","title":"Author"},"from_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits after this date.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only commits before this date.","title":"To Date"},"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many commits to return (1 to 200, default 50).","title":"Top"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Skip"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project","repository_id"],"title":"list_commitsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_refs":{"post":{"operationId":"list_refs","summary":"List branches and tags of a repository with full ref name and the commit id they point to; use filter 'heads/' for branc","description":"List branches and tags of a repository with full ref name and the commit id they point to; use filter 'heads/' for branches or 'tags/' for tags. Use for \"What branches does Azure DevOps repository SampleRepository have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"repository_id":{"description":"Repository name or id (see list_repositories).","maxLength":200,"title":"Repository Id","type":"string"},"filter":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only refs starting with this text, for example 'heads/' (branches) or 'tags/'.","title":"Filter"},"filter_contains":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only refs whose name contains this text.","title":"Filter Contains"},"top":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many refs to return (1 to 1000, default 100).","title":"Top"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project","repository_id"],"title":"list_refsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_builds":{"post":{"operationId":"list_builds","summary":"List pipeline builds with number, status, result, branch, definition name, times and who requested it; filter by definit","description":"List pipeline builds with number, status, result, branch, definition name, times and who requested it; filter by definition, branch, status or result. Use for \"Did the latest Azure DevOps builds in SampleProject succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"definitions":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of these pipeline definition ids (comma-separated numbers).","title":"Definitions"},"branch_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of this branch, for example refs/heads/main.","title":"Branch Name"},"status_filter":{"anyOf":[{"enum":["inProgress","completed","cancelling","postponed","notStarted","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Only builds with this status.","title":"Status Filter"},"result_filter":{"anyOf":[{"enum":["succeeded","partiallySucceeded","failed","canceled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only builds with this result.","title":"Result Filter"},"query_order":{"anyOf":[{"enum":["finishTimeAscending","finishTimeDescending","queueTimeAscending","queueTimeDescending","startTimeAscending","startTimeDescending"],"type":"string"},{"type":"null"}],"default":"queueTimeDescending","description":"Order of builds.","title":"Query Order"},"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many builds to return (1 to 200, default 25).","title":"Top"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project"],"title":"list_buildsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_build_definitions":{"post":{"operationId":"list_build_definitions","summary":"List pipeline (build definition) names, ids, folder paths and queue status of a project. Use for \"What pipelines exist i","description":"List pipeline (build definition) names, ids, folder paths and queue status of a project. Use for \"What pipelines exist in Azure DevOps project SampleProject\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only definitions whose name matches this text (a trailing * works as a wildcard).","title":"Name"},"query_order":{"anyOf":[{"enum":["lastModifiedAscending","lastModifiedDescending","definitionNameAscending","definitionNameDescending"],"type":"string"},{"type":"null"}],"default":"definitionNameAscending","description":"Order of definitions.","title":"Query Order"},"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many definitions to return (1 to 200, default 50).","title":"Top"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project"],"title":"list_build_definitionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/query_work_items":{"post":{"operationId":"query_work_items","summary":"Run a WIQL query and return the matching work item ids and links (use get_work_items for their details), for example \"SE","description":"Run a WIQL query and return the matching work item ids and links (use get_work_items for their details), for example \"SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active'\". Use for \"Which work items in SampleProject are still active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"project":{"description":"Project name or id, for example 'SampleProject'.","maxLength":200,"title":"Project","type":"string"},"query":{"description":"WIQL query text. A SELECT over WorkItems, for example \"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = 'SampleProject' AND [System.State] <> 'Closed' ORDER BY [System.ChangedDate] DESC\".","maxLength":2000,"title":"Query","type":"string"},"top":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum number of work items to return (1 to 200).","title":"Top"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","project","query"],"title":"query_work_itemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_work_items":{"post":{"operationId":"get_work_items","summary":"Get up to 200 work items by id with the chosen fields (title, type, state, iteration, dates by default). Use for \"Show m","description":"Get up to 200 work items by id with the chosen fields (title, type, state, iteration, dates by default). Use for \"Show me the title and state of Azure DevOps work items 297 and 299\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"description":"Azure DevOps organization name: the part after dev.azure.com/ in your URLs, for example 'fabrikam'.","maxLength":200,"title":"Organization","type":"string"},"ids":{"description":"Comma-separated work item ids (at most 200), for example '297,299,300'.","maxLength":1500,"title":"Ids","type":"string"},"fields":{"anyOf":[{"maxLength":600,"type":"string"},{"type":"null"}],"default":"System.Id,System.Title,System.WorkItemType,System.State,System.IterationPath,System.AreaPath,System.Tags,System.ChangedDate","description":"Comma-separated field reference names to return. Default gives the common non-personal fields; person fields such as System.AssignedTo include identity details.","title":"Fields"},"api_version":{"anyOf":[{"const":"7.1","type":"string"},{"type":"null"}],"default":"7.1","description":"Azure DevOps REST API version. Leave the default.","title":"Api Version"}},"required":["organization","ids"],"title":"get_work_itemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}