release_get_releases
Retrieve and filter Azure DevOps project releases by ID, status, environment, creation time, and more using customizable query parameters for precise results.
Instructions
Retrieves a list of releases for a given project.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| artifactTypeId | No | Filter releases by artifact type ID | |
| artifactVersionId | No | Filter releases by artifact version ID | |
| continuationToken | No | Continuation token for pagination | |
| createdBy | No | User ID or name who created the release | |
| definitionEnvironmentId | No | ID of the definition environment to filter releases | |
| definitionId | No | ID of the release definition to filter releases | |
| environmentStatusFilter | No | Environment status to filter releases | |
| expand | No | Expand options for releases | None |
| isDeleted | No | Whether to include deleted releases (default: false) | |
| maxCreatedTime | No | Maximum created time for releases (default: now) | 2025-08-19T07:02:49.644Z |
| minCreatedTime | No | Minimum created time for releases (default: 7 days ago) | 2025-08-12T07:02:49.644Z |
| path | No | Path to filter releases | |
| project | No | Project ID or name to get releases for | |
| propertyFilters | No | Filter releases by properties | |
| queryOrder | No | Order in which to return releases (default: Ascending) | Ascending |
| releaseIdFilter | No | Filter by specific release IDs | |
| searchText | No | Search text to filter releases | |
| sourceBranchFilter | No | Filter releases by source branch | |
| sourceId | No | Filter releases by artifact source ID | |
| statusFilter | No | Status of the releases to filter (default: Active) | Active |
| tagFilter | No | Filter releases by tags | |
| top | No | Number of releases to return |
Implementation Reference
- src/tools/releases.ts:137-191 (handler)Handler function that executes the tool logic by calling the Azure DevOps Release API to retrieve releases based on provided filters and returns JSON stringified result.async ({ project, definitionId, definitionEnvironmentId, searchText, createdBy, statusFilter, environmentStatusFilter, minCreatedTime, maxCreatedTime, queryOrder, top, continuationToken, expand, artifactTypeId, sourceId, artifactVersionId, sourceBranchFilter, isDeleted, tagFilter, propertyFilters, releaseIdFilter, path, }) => { const connection = await connectionProvider(); const releaseApi = await connection.getReleaseApi(); const releases = await releaseApi.getReleases( project, definitionId, definitionEnvironmentId, searchText, createdBy, safeEnumConvert(ReleaseStatus, statusFilter), environmentStatusFilter, minCreatedTime, maxCreatedTime, safeEnumConvert(ReleaseQueryOrder, queryOrder), top, continuationToken, safeEnumConvert(ReleaseExpands, expand), artifactTypeId, sourceId, artifactVersionId, sourceBranchFilter, isDeleted, tagFilter, propertyFilters, releaseIdFilter, path ); return { content: [{ type: "text", text: JSON.stringify(releases, null, 2) }], }; }
- src/tools/releases.ts:89-136 (schema)Zod input schema defining parameters for filtering and paginating releases.{ project: z.string().optional().describe("Project ID or name to get releases for"), definitionId: z.number().optional().describe("ID of the release definition to filter releases"), definitionEnvironmentId: z.number().optional().describe("ID of the definition environment to filter releases"), searchText: z.string().optional().describe("Search text to filter releases"), createdBy: z.string().optional().describe("User ID or name who created the release"), statusFilter: z .enum(getEnumKeys(ReleaseStatus) as [string, ...string[]]) .optional() .default("Active") .describe("Status of the releases to filter (default: Active)"), environmentStatusFilter: z.number().optional().describe("Environment status to filter releases"), minCreatedTime: z.coerce .date() .optional() .default(() => { const sevenDaysAgo = new Date(); sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); return sevenDaysAgo; }) .describe("Minimum created time for releases (default: 7 days ago)"), maxCreatedTime: z.coerce .date() .optional() .default(() => new Date()) .describe("Maximum created time for releases (default: now)"), queryOrder: z .enum(getEnumKeys(ReleaseQueryOrder) as [string, ...string[]]) .optional() .default("Ascending") .describe("Order in which to return releases (default: Ascending)"), top: z.number().optional().describe("Number of releases to return"), continuationToken: z.number().optional().describe("Continuation token for pagination"), expand: z .enum(getEnumKeys(ReleaseExpands) as [string, ...string[]]) .optional() .default("None") .describe("Expand options for releases"), artifactTypeId: z.string().optional().describe("Filter releases by artifact type ID"), sourceId: z.string().optional().describe("Filter releases by artifact source ID"), artifactVersionId: z.string().optional().describe("Filter releases by artifact version ID"), sourceBranchFilter: z.string().optional().describe("Filter releases by source branch"), isDeleted: z.boolean().optional().default(false).describe("Whether to include deleted releases (default: false)"), tagFilter: z.array(z.string()).optional().describe("Filter releases by tags"), propertyFilters: z.array(z.string()).optional().describe("Filter releases by properties"), releaseIdFilter: z.array(z.number()).optional().describe("Filter by specific release IDs"), path: z.string().optional().describe("Path to filter releases"), },
- src/tools/releases.ts:86-192 (registration)MCP server tool registration call that associates the tool name, description, schema, and handler.server.tool( RELEASE_TOOLS.get_releases, "Retrieves a list of releases for a given project.", { project: z.string().optional().describe("Project ID or name to get releases for"), definitionId: z.number().optional().describe("ID of the release definition to filter releases"), definitionEnvironmentId: z.number().optional().describe("ID of the definition environment to filter releases"), searchText: z.string().optional().describe("Search text to filter releases"), createdBy: z.string().optional().describe("User ID or name who created the release"), statusFilter: z .enum(getEnumKeys(ReleaseStatus) as [string, ...string[]]) .optional() .default("Active") .describe("Status of the releases to filter (default: Active)"), environmentStatusFilter: z.number().optional().describe("Environment status to filter releases"), minCreatedTime: z.coerce .date() .optional() .default(() => { const sevenDaysAgo = new Date(); sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); return sevenDaysAgo; }) .describe("Minimum created time for releases (default: 7 days ago)"), maxCreatedTime: z.coerce .date() .optional() .default(() => new Date()) .describe("Maximum created time for releases (default: now)"), queryOrder: z .enum(getEnumKeys(ReleaseQueryOrder) as [string, ...string[]]) .optional() .default("Ascending") .describe("Order in which to return releases (default: Ascending)"), top: z.number().optional().describe("Number of releases to return"), continuationToken: z.number().optional().describe("Continuation token for pagination"), expand: z .enum(getEnumKeys(ReleaseExpands) as [string, ...string[]]) .optional() .default("None") .describe("Expand options for releases"), artifactTypeId: z.string().optional().describe("Filter releases by artifact type ID"), sourceId: z.string().optional().describe("Filter releases by artifact source ID"), artifactVersionId: z.string().optional().describe("Filter releases by artifact version ID"), sourceBranchFilter: z.string().optional().describe("Filter releases by source branch"), isDeleted: z.boolean().optional().default(false).describe("Whether to include deleted releases (default: false)"), tagFilter: z.array(z.string()).optional().describe("Filter releases by tags"), propertyFilters: z.array(z.string()).optional().describe("Filter releases by properties"), releaseIdFilter: z.array(z.number()).optional().describe("Filter by specific release IDs"), path: z.string().optional().describe("Path to filter releases"), }, async ({ project, definitionId, definitionEnvironmentId, searchText, createdBy, statusFilter, environmentStatusFilter, minCreatedTime, maxCreatedTime, queryOrder, top, continuationToken, expand, artifactTypeId, sourceId, artifactVersionId, sourceBranchFilter, isDeleted, tagFilter, propertyFilters, releaseIdFilter, path, }) => { const connection = await connectionProvider(); const releaseApi = await connection.getReleaseApi(); const releases = await releaseApi.getReleases( project, definitionId, definitionEnvironmentId, searchText, createdBy, safeEnumConvert(ReleaseStatus, statusFilter), environmentStatusFilter, minCreatedTime, maxCreatedTime, safeEnumConvert(ReleaseQueryOrder, queryOrder), top, continuationToken, safeEnumConvert(ReleaseExpands, expand), artifactTypeId, sourceId, artifactVersionId, sourceBranchFilter, isDeleted, tagFilter, propertyFilters, releaseIdFilter, path ); return { content: [{ type: "text", text: JSON.stringify(releases, null, 2) }], }; } );
- src/tools/releases.ts:11-14 (helper)Constant mapping internal function names to MCP tool names.const RELEASE_TOOLS = { get_release_definitions: "release_get_definitions", get_releases: "release_get_releases", };
- src/tools.ts:25-25 (registration)Call to configureReleaseTools within the main tool configuration function, integrating the release tools into the MCP server.configureReleaseTools(server, tokenProvider, connectionProvider);