Skip to content

Commit 31dfccc

Browse files
jottakkaFrancisco Liberaltorresmateo
authored
[Ready] Adding Jira Sprint tools documentation (#412)
* Add ClickUp auth provider documentation - Add comprehensive ClickUp auth provider tutorial at pages/home/auth-providers/clickup.mdx - Follow same structure and style as existing Reddit auth provider documentation - Include step-by-step OAuth app creation instructions for ClickUp - Add both Dashboard GUI and engine.yaml configuration options - Create example files with clickup_ prefix for better organization: - clickup_custom_auth.py: Python OAuth flow example - clickup_custom_auth.js: JavaScript OAuth flow example - clickup_custom_tool.py: Custom tool with real ClickUp API integration - config_provider.engine.yaml: Engine configuration example - Remove scopes from auth examples (ClickUp API doesn't require scopes) - Include real ClickUp API request example using /api/v2/team endpoint - Add proper error handling and response parsing in tool example * Update clickup.mdx * Update clickup.mdx Co-authored-by: Mateo Torres <mateo@arcade.dev> * Adding Jira Sprint tools documentation * removing misplaced clicku files --------- Co-authored-by: Francisco Liberal <francisco@arcade.dev> Co-authored-by: Mateo Torres <mateo@arcade.dev>
1 parent b963346 commit 31dfccc

9 files changed

+342
-4
lines changed

pages/toolkits/productivity/jira.mdx

Lines changed: 106 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import ToolFooter from "@/components/ToolFooter";
1111
author="Arcade"
1212
codeLink="https://github.com/ArcadeAI/arcade-ai/tree/main/toolkits/jira"
1313
authType="OAuth2"
14-
versions={["2.2.0"]}
14+
versions={["2.3.0"]}
1515
/>
1616

1717
<Badges repo="arcadeai/arcade_jira" />
@@ -62,6 +62,9 @@ This toolkit streamlines the process of issue management, making it easier to in
6262
["Jira.RemoveLabelsFromIssue", "Remove labels from an existing Jira issue."],
6363
["Jira.UpdateIssue", "Update an existing Jira issue."],
6464
["Jira.ListSprintsForBoards", "Retrieve sprints from Jira boards with filtering options for planning and tracking purposes."],
65+
["Jira.GetSprintIssues", "Get all issues that are currently assigned to a specific sprint with pagination support."],
66+
["Jira.AddIssuesToSprint", "Add a list of issues to a sprint."],
67+
["Jira.MoveIssuesFromSprintToBacklog", "Move issues from active or future sprints back to the board's backlog."],
6568
["Jira.ListLabels", "Get the existing labels (tags) in the user's Jira instance."],
6669
["Jira.ListUsers", "Browse users in Jira."],
6770
["Jira.GetUserById", "Get user information by their ID."],
@@ -79,6 +82,7 @@ This toolkit streamlines the process of issue management, making it easier to in
7982
["Jira.SearchProjects", "Get the details of all Jira projects."],
8083
["Jira.GetProjectById", "Get the details of a Jira project by its ID or key."],
8184
["Jira.GetBoards", "Get Jira boards, with the option to filter by a list of board names or IDs (accepts a mix of both). Supports 'offset' and 'limit' parameters."],
85+
["Jira.GetBoardBacklogIssues", "Get all issues in a board's backlog. Supports 'offset' and 'limit' parameters."],
8286
["Jira.GetPriorityById", "Get the details of a priority by its ID."],
8387
["Jira.ListPrioritySchemes", "Browse the priority schemes available in Jira."],
8488
["Jira.ListPrioritiesAssociatedWithAPriorityScheme", "Browse the priorities associated with a priority scheme."],
@@ -423,16 +427,89 @@ Retrieve sprints from Jira boards with filtering options for planning and tracki
423427

424428
**Parameters**
425429

426-
- **board_identifiers_list** (`array[string]`, optional) List of board names or numeric IDs (as strings) to retrieve sprints from. Include all mentioned boards in a single list for best performance. Optional, defaults to None.
430+
- **board_identifiers_list** (`array[string]`, optional) List of board names or numeric IDs (as strings) to retrieve sprints from. Include all mentioned boards in a single list for best performance. Maximum 25 boards per operation. Optional, defaults to None.
427431
- **max_sprints_per_board** (`integer`, optional) Maximum sprints per board (1-50). Latest sprints first. Optional, defaults to 50.
428432
- **offset** (`integer`, optional) Number of sprints to skip per board for pagination. Optional, defaults to 0.
429-
- **state** (`Enum` [SprintState](/toolkits/productivity/jira/reference#SprintState), optional) Filter by sprint state using SprintState enum value. Available options: SprintState.FUTURE (future sprints), SprintState.ACTIVE (active sprints), SprintState.CLOSED (closed sprints), SprintState.FUTURE_AND_ACTIVE (future + active), SprintState.FUTURE_AND_CLOSED (future + closed), SprintState.ACTIVE_AND_CLOSED (active + closed), SprintState.ALL (all states). Optional, defaults to None (all states).
433+
- **state** (`Enum` [SprintState](/toolkits/productivity/jira/reference#SprintState), optional) Filter by sprint state. NOTE: Date filters (start_date, end_date, specific_date) have higher priority than state filtering. Use state filtering only when no date criteria is specified. For temporal queries like 'last month' or 'next week', use date parameters instead. Optional, defaults to None (all states).
430434
- **start_date** (`string`, optional) Start date filter in YYYY-MM-DD format. Can combine with end_date. Optional, defaults to None.
431435
- **end_date** (`string`, optional) End date filter in YYYY-MM-DD format. Can combine with start_date. Optional, defaults to None.
432436
- **specific_date** (`string`, optional) Specific date in YYYY-MM-DD to find sprints active on that date. Cannot combine with start_date/end_date. Optional, defaults to None.
433437
- **atlassian_cloud_id** (`string`, optional) Atlassian Cloud ID to use. Optional, defaults to None (uses single authorized cloud).
434438

435439

440+
## Jira.GetSprintIssues
441+
442+
<br />
443+
<TabbedCodeBlock
444+
tabs={[
445+
{
446+
label: "Call the Tool Directly",
447+
content: {
448+
Python: ["/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.py"],
449+
JavaScript: ["/examples/integrations/toolkits/jira/get_sprint_issues_example_call_tool.js"],
450+
},
451+
},
452+
]}
453+
/>
454+
455+
Get all issues that are currently assigned to a specific sprint with pagination support.
456+
457+
**Parameters**
458+
459+
- **sprint_id** (`string`, required) The numeric Jira sprint ID that identifies the sprint in Jira's API.
460+
- **limit** (`integer`, optional) The maximum number of issues to return. Must be between 1 and 100 inclusive. Controls pagination and determines how many issues are fetched and returned. Defaults to 50 for improved performance.
461+
- **offset** (`integer`, optional) The number of issues to skip before starting to return results. Used for pagination when the sprint has many issues. Must be 0 or greater. Defaults to 0.
462+
- **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised.
463+
464+
465+
## Jira.AddIssuesToSprint
466+
467+
<br />
468+
<TabbedCodeBlock
469+
tabs={[
470+
{
471+
label: "Call the Tool Directly",
472+
content: {
473+
Python: ["/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.py"],
474+
JavaScript: ["/examples/integrations/toolkits/jira/add_issues_to_sprint_example_call_tool.js"],
475+
},
476+
},
477+
]}
478+
/>
479+
480+
Add a list of issues to a sprint.
481+
482+
**Parameters**
483+
484+
- **sprint_id** (`string`, required) The numeric Jira sprint ID that identifies the sprint in Jira's API.
485+
- **issue_ids** (`array[string]`, required) List of issue IDs or keys to add to the sprint. Must not be empty and cannot exceed 50 issues.
486+
- **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised.
487+
488+
489+
## Jira.MoveIssuesFromSprintToBacklog
490+
491+
<br />
492+
<TabbedCodeBlock
493+
tabs={[
494+
{
495+
label: "Call the Tool Directly",
496+
content: {
497+
Python: ["/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.py"],
498+
JavaScript: ["/examples/integrations/toolkits/jira/move_issues_from_sprint_to_backlog_example_call_tool.js"],
499+
},
500+
},
501+
]}
502+
/>
503+
504+
Move issues from active or future sprints back to the board's backlog.
505+
506+
**Parameters**
507+
508+
- **sprint_id** (`string`, required) The numeric Jira sprint ID that identifies the sprint in Jira's API.
509+
- **issue_identifiers** (`array[string]`, required) List of issue IDs or keys to move from the sprint to the backlog. Maximum 50 issues per call. Issues will be moved back to the board's backlog.
510+
- **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised.
511+
512+
436513
## Jira.ListLabels
437514

438515
<br />
@@ -550,7 +627,7 @@ Get available Atlassian Clouds.
550627

551628
**Parameters**
552629

553-
630+
This tool does not take any parameters.
554631

555632
## Jira.AttachFileToIssue
556633

@@ -841,6 +918,31 @@ Retrieve Jira boards either by specifying their names or IDs, or get all
841918
- **atlassian_cloud_id** (`string`, optional) Atlassian Cloud ID to use. Defaults to None (uses single authorized cloud).
842919

843920

921+
## Jira.GetBoardBacklogIssues
922+
923+
<br />
924+
<TabbedCodeBlock
925+
tabs={[
926+
{
927+
label: "Call the Tool Directly",
928+
content: {
929+
Python: ["/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.py"],
930+
JavaScript: ["/examples/integrations/toolkits/jira/get_board_backlog_issues_example_call_tool.js"],
931+
},
932+
},
933+
]}
934+
/>
935+
936+
Get all issues in a board's backlog with pagination support.
937+
938+
**Parameters**
939+
940+
- **board_id** (`string`, required) The ID of the board to retrieve backlog issues from. Must be a valid board ID that supports backlogs (typically Scrum or Kanban boards).
941+
- **limit** (`integer`, optional) The maximum number of issues to return. Must be between 1 and 100 inclusive. Controls pagination and determines how many issues are fetched and returned. Defaults to 50 for improved performance.
942+
- **offset** (`integer`, optional) The number of issues to skip before starting to return results. Used for pagination when the backlog has many issues. For example, offset=50 with limit=50 would return issues 51-100. Must be 0 or greater. Defaults to 0.
943+
- **atlassian_cloud_id** (`string`, optional) The ID of the Atlassian Cloud to use (defaults to None). If not provided and the user has a single cloud authorized, the tool will use that. Otherwise, an error will be raised.
944+
945+
844946
## Jira.GetPriorityById
845947

846948
<br />
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Arcade } from "@arcadeai/arcadejs";
2+
3+
const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
4+
5+
const USER_ID = "{arcade_user_id}";
6+
const TOOL_NAME = "Jira.AddIssuesToSprint";
7+
8+
// Start the authorization process
9+
const authResponse = await client.tools.authorize({tool_name: TOOL_NAME});
10+
11+
if (authResponse.status !== "completed") {
12+
console.log(`Click this link to authorize: ${authResponse.url}`);
13+
}
14+
15+
// Wait for the authorization to complete
16+
await client.auth.waitForCompletion(authResponse);
17+
18+
const toolInput = {
19+
"sprint_id": "123",
20+
"issue_ids": [
21+
"ISSUE-1",
22+
"ISSUE-2",
23+
"ISSUE-3"
24+
],
25+
"atlassian_cloud_id": "cloud-456"
26+
};
27+
28+
const response = await client.tools.execute({
29+
tool_name: TOOL_NAME,
30+
input: toolInput,
31+
user_id: USER_ID,
32+
});
33+
34+
console.log(JSON.stringify(response.output.value, null, 2));
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import json
2+
from arcadepy import Arcade
3+
4+
client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
5+
6+
USER_ID = "{arcade_user_id}"
7+
TOOL_NAME = "Jira.AddIssuesToSprint"
8+
9+
auth_response = client.tools.authorize(tool_name=TOOL_NAME)
10+
11+
if auth_response.status != "completed":
12+
print(f"Click this link to authorize: {auth_response.url}")
13+
14+
# Wait for the authorization to complete
15+
client.auth.wait_for_completion(auth_response)
16+
17+
tool_input = {
18+
'sprint_id': '123',
19+
'issue_ids': ['ISSUE-1', 'ISSUE-2', 'ISSUE-3'],
20+
'atlassian_cloud_id': 'cloud-456'
21+
}
22+
23+
response = client.tools.execute(
24+
tool_name=TOOL_NAME,
25+
input=tool_input,
26+
user_id=USER_ID,
27+
)
28+
print(json.dumps(response.output.value, indent=2))
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Arcade } from "@arcadeai/arcadejs";
2+
3+
const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
4+
5+
const USER_ID = "{arcade_user_id}";
6+
const TOOL_NAME = "Jira.GetBoardBacklogIssues";
7+
8+
// Start the authorization process
9+
const authResponse = await client.tools.authorize({tool_name: TOOL_NAME});
10+
11+
if (authResponse.status !== "completed") {
12+
console.log(`Click this link to authorize: ${authResponse.url}`);
13+
}
14+
15+
// Wait for the authorization to complete
16+
await client.auth.waitForCompletion(authResponse);
17+
18+
const toolInput = {
19+
"board_id": "12345",
20+
"limit": 50,
21+
"offset": 0
22+
};
23+
24+
const response = await client.tools.execute({
25+
tool_name: TOOL_NAME,
26+
input: toolInput,
27+
user_id: USER_ID,
28+
});
29+
30+
console.log(JSON.stringify(response.output.value, null, 2));
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import json
2+
from arcadepy import Arcade
3+
4+
client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
5+
6+
USER_ID = "{arcade_user_id}"
7+
TOOL_NAME = "Jira.GetBoardBacklogIssues"
8+
9+
auth_response = client.tools.authorize(tool_name=TOOL_NAME)
10+
11+
if auth_response.status != "completed":
12+
print(f"Click this link to authorize: {auth_response.url}")
13+
14+
# Wait for the authorization to complete
15+
client.auth.wait_for_completion(auth_response)
16+
17+
tool_input = {
18+
'board_id': '12345', 'limit': 50, 'offset': 0
19+
}
20+
21+
response = client.tools.execute(
22+
tool_name=TOOL_NAME,
23+
input=tool_input,
24+
user_id=USER_ID,
25+
)
26+
print(json.dumps(response.output.value, indent=2))
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Arcade } from "@arcadeai/arcadejs";
2+
3+
const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
4+
5+
const USER_ID = "{arcade_user_id}";
6+
const TOOL_NAME = "Jira.GetSprintIssues";
7+
8+
// Start the authorization process
9+
const authResponse = await client.tools.authorize({tool_name: TOOL_NAME});
10+
11+
if (authResponse.status !== "completed") {
12+
console.log(`Click this link to authorize: ${authResponse.url}`);
13+
}
14+
15+
// Wait for the authorization to complete
16+
await client.auth.waitForCompletion(authResponse);
17+
18+
const toolInput = {
19+
"sprint_id": "12345",
20+
"limit": 20,
21+
"offset": 0
22+
};
23+
24+
const response = await client.tools.execute({
25+
tool_name: TOOL_NAME,
26+
input: toolInput,
27+
user_id: USER_ID,
28+
});
29+
30+
console.log(JSON.stringify(response.output.value, null, 2));
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import json
2+
from arcadepy import Arcade
3+
4+
client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
5+
6+
USER_ID = "{arcade_user_id}"
7+
TOOL_NAME = "Jira.GetSprintIssues"
8+
9+
auth_response = client.tools.authorize(tool_name=TOOL_NAME)
10+
11+
if auth_response.status != "completed":
12+
print(f"Click this link to authorize: {auth_response.url}")
13+
14+
# Wait for the authorization to complete
15+
client.auth.wait_for_completion(auth_response)
16+
17+
tool_input = {
18+
'sprint_id': '12345', 'limit': 20, 'offset': 0
19+
}
20+
21+
response = client.tools.execute(
22+
tool_name=TOOL_NAME,
23+
input=tool_input,
24+
user_id=USER_ID,
25+
)
26+
print(json.dumps(response.output.value, indent=2))
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Arcade } from "@arcadeai/arcadejs";
2+
3+
const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
4+
5+
const USER_ID = "{arcade_user_id}";
6+
const TOOL_NAME = "Jira.MoveIssuesFromSprintToBacklog";
7+
8+
// Start the authorization process
9+
const authResponse = await client.tools.authorize({tool_name: TOOL_NAME});
10+
11+
if (authResponse.status !== "completed") {
12+
console.log(`Click this link to authorize: ${authResponse.url}`);
13+
}
14+
15+
// Wait for the authorization to complete
16+
await client.auth.waitForCompletion(authResponse);
17+
18+
const toolInput = {
19+
"sprint_id": "123",
20+
"issue_identifiers": [
21+
"ISSUE-1",
22+
"ISSUE-2",
23+
"ISSUE-3"
24+
],
25+
"atlassian_cloud_id": "cloud-456"
26+
};
27+
28+
const response = await client.tools.execute({
29+
tool_name: TOOL_NAME,
30+
input: toolInput,
31+
user_id: USER_ID,
32+
});
33+
34+
console.log(JSON.stringify(response.output.value, null, 2));

0 commit comments

Comments
 (0)