Implementation:Microsoft Semantic kernel JiraPlugin OpenAPI
| Knowledge Sources | |
|---|---|
| Domains | OpenAPI, Jira_Integration |
| Last Updated | 2026-02-11 00:00 GMT |
Overview
Concrete Swagger 2.0 OpenAPI specification for the Atlassian JIRA REST API, used as a plugin resource in the Semantic Kernel Concepts samples for issue tracking integration.
Description
This file is a Swagger 2.0 JSON specification that describes a subset of the JIRA REST API for software development project and issue management. It uses basic authentication and targets https://{yourhost.yourdomain.com}/rest/api as the base path. The specification defines the following operations:
- GET /issue/{issueKey} -- Retrieves a full issue object by its unique key, returning comprehensive fields including issue type, project, status, priority, assignee, reporter, creator, time tracking, progress, components, description, summary, resolution, and custom fields.
- PUT /issue/{issueKey} -- Updates an existing JIRA issue with modified fields (summary, description, reporter, priority, labels, assignee, parent).
- POST /issue/{issueKey}/comment -- Adds a comment to an existing JIRA issue.
The specification includes extensive model definitions:
- FullIssue -- Complete issue representation with nested objects for issue type, project, status (with status category), priority, assignee, reporter, creator, resolution, progress, aggregate progress, components, and custom fields.
- CreateIssueRequest / CreateIssueResponse -- Issue creation payloads with dynamic value lookups for issue types, reporters, priorities, and assignees.
- UpdateIssueRequest -- Issue update payload.
- Comment / CommentResponse -- Comment creation and response models.
- Project / ProjectArray / ListProjects_ResponseV2 -- Project listing models.
- User / UserList / Creator / Assignee / Reporter -- User-related models.
The specification also includes x-ms-dynamic-values annotations for dynamic dropdown population of issue types, users, and priorities in connector UIs.
Usage
This file is used by the Concepts sample project to demonstrate how Semantic Kernel can integrate with external issue tracking systems via OpenAPI. Developers use it to understand how to build JIRA-connected AI agents and plugins.
Code Reference
Source Location
- Repository: Microsoft_Semantic_kernel
- File: dotnet/samples/Concepts/Resources/Plugins/JiraPlugin/openapi.json
- Lines: 1-1322
Signature
{
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "JIRA",
"description": "JIRA is a software development tool for agile teams to plan,
track, and release world-class software."
},
"host": "yourhost.yourdomain.com",
"basePath": "/rest/api",
"schemes": ["https"],
"produces": ["application/json"],
"paths": {
"/issue/{issueKey}": {
"get": {
"summary": "Get issue by key",
"operationId": "GetIssue",
"parameters": [
{ "name": "issueKey", "in": "path", "required": true, "type": "string" }
]
},
"put": { "summary": "Update issue", "operationId": "UpdateIssue" }
},
"/issue/{issueKey}/comment": {
"post": { "summary": "Add comment", "operationId": "AddComment" }
}
}
}
Import
// Loaded in the Concepts sample as an OpenAPI plugin:
await kernel.ImportPluginFromOpenApiAsync(
"JiraPlugin",
Path.Combine("Resources", "Plugins", "JiraPlugin", "openapi.json"),
new OpenApiFunctionExecutionParameters
{
ServerUrlOverride = new Uri("https://your-jira-instance.atlassian.net/rest/api"),
AuthCallback = async (request, cancellationToken) =>
{
request.Headers.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(
Encoding.UTF8.GetBytes($"{email}:{apiToken}")));
}
});
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| issueKey | string (path) | yes | Unique key of the JIRA issue (e.g., "PROJ-123"). |
| body (UpdateIssue) | UpdateIssueRequest (body) | yes | Fields to update: summary, description, reporter, priority, labels, assignee, parent. |
| body (AddComment) | Comment (body) | yes | Comment body text to add to the issue. |
| body (CreateIssue) | CreateIssueRequest (body) | yes | Issue creation payload with required fields: summary and issuetype.id. |
Outputs
| Name | Type | Description |
|---|---|---|
| FullIssue | object | Complete issue object with id, key, self URL, and nested fields (issue type, project, status, priority, assignee, reporter, creator, time tracking, progress, components, description, summary, resolution, custom fields). |
| CreateIssueResponse | object | Created issue with id and key. |
| CommentResponse | object | Created comment with id, body, and created date-time. |
| string | string | Empty success response for UpdateIssue. |
Usage Examples
Getting an Issue by Key
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(deploymentName, endpoint, apiKey)
.Build();
await kernel.ImportPluginFromOpenApiAsync("JiraPlugin",
Path.Combine("Resources", "Plugins", "JiraPlugin", "openapi.json"));
// Retrieve an issue
var issue = await kernel.InvokeAsync("JiraPlugin", "GetIssue",
new KernelArguments { ["issueKey"] = "SK-1234" });
Adding a Comment to an Issue
var result = await kernel.InvokeAsync("JiraPlugin", "AddComment",
new KernelArguments
{
["issueKey"] = "SK-1234",
["body"] = JsonSerializer.Serialize(new { body = "Analysis complete." })
});