@atlassian-dc-mcp/jira 0.12.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +46 -5
- package/build/__tests__/config.test.d.ts +2 -0
- package/build/__tests__/config.test.d.ts.map +1 -0
- package/build/__tests__/config.test.js +49 -0
- package/build/__tests__/config.test.js.map +1 -0
- package/build/__tests__/jira-runtime-config.test.d.ts +2 -0
- package/build/__tests__/jira-runtime-config.test.d.ts.map +1 -0
- package/build/__tests__/jira-runtime-config.test.js +42 -0
- package/build/__tests__/jira-runtime-config.test.js.map +1 -0
- package/build/__tests__/jira-service.test.js +85 -2
- package/build/__tests__/jira-service.test.js.map +1 -1
- package/build/config.d.ts +4 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +11 -0
- package/build/config.js.map +1 -0
- package/build/index.js +11 -9
- package/build/index.js.map +1 -1
- package/build/jira-service.d.ts +9 -4
- package/build/jira-service.d.ts.map +1 -1
- package/build/jira-service.js +44 -18
- package/build/jira-service.js.map +1 -1
- package/package.json +3 -3
- package/server.json +12 -5
- package/src/__tests__/config.test.ts +64 -0
- package/src/__tests__/jira-runtime-config.test.ts +55 -0
- package/src/__tests__/jira-service.test.ts +106 -2
- package/src/config.ts +13 -0
- package/src/index.ts +15 -11
- package/src/jira-service.ts +59 -19
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.14.0](https://github.com/b1ff/atlassian-dc-mcp/compare/v0.13.0...v0.14.0) (2026-03-23)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @atlassian-dc-mcp/jira
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [0.13.0](https://github.com/b1ff/atlassian-dc-mcp/compare/v0.12.2...v0.13.0) (2026-03-21)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* add ability to specify external config file to MCP, to provide configuration to MCP without specifying credentials in the file ([c97d380](https://github.com/b1ff/atlassian-dc-mcp/commit/c97d38004ebc7e233ea276a36c2e233536d2d0ca))
|
|
20
|
+
* **jira:** add configurable issue field projections ([06c50a9](https://github.com/b1ff/atlassian-dc-mcp/commit/06c50a978f8d2e7b0f8c9e8a6e7f7706dcc879ab))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
## [0.12.2](https://github.com/b1ff/atlassian-dc-mcp/compare/v0.12.1...v0.12.2) (2026-03-21)
|
|
7
27
|
|
|
8
28
|
|
package/README.md
CHANGED
|
@@ -31,6 +31,38 @@ Windows:
|
|
|
31
31
|
}
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
To reuse one shared dotenv file across multiple tools or MCP hosts, point the server at an absolute file path:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
"atlassian-jira-dc": {
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "@atlassian-dc-mcp/jira"],
|
|
42
|
+
"env": {
|
|
43
|
+
"ATLASSIAN_DC_MCP_CONFIG_FILE": "/Users/your-user/.config/atlassian-dc-mcp.env"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Windows example:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"atlassian-jira-dc": {
|
|
56
|
+
"command": "npx",
|
|
57
|
+
"args": ["-y", "@atlassian-dc-mcp/jira"],
|
|
58
|
+
"env": {
|
|
59
|
+
"ATLASSIAN_DC_MCP_CONFIG_FILE": "C:\\\\Users\\\\your-user\\\\AppData\\\\Roaming\\\\atlassian-dc-mcp.env"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
34
66
|
Note: Set `JIRA_HOST` variable only to domain + port without a protocol (e.g., `your-instance.atlassian.net`). The https protocol is assumed.
|
|
35
67
|
|
|
36
68
|
Alternatively, you can use `JIRA_API_BASE_PATH` instead of `JIRA_HOST` to specify the complete API base URL including protocol (e.g., `https://your-instance.atlassian.net/rest`). Note that the `/api/2/search/` part is static and added automatically in the code, so you don't need to include it in the `JIRA_API_BASE_PATH` value.
|
|
@@ -50,15 +82,20 @@ Alternatively, you can use `JIRA_API_BASE_PATH` instead of `JIRA_HOST` to specif
|
|
|
50
82
|
npm install
|
|
51
83
|
```
|
|
52
84
|
|
|
53
|
-
2. Create a `.env` file in the packages/jira directory
|
|
85
|
+
2. Create a `.env` file in the packages/jira directory, or put the same values in a shared dotenv file and set `ATLASSIAN_DC_MCP_CONFIG_FILE` to its absolute path:
|
|
54
86
|
```
|
|
55
87
|
JIRA_HOST=your-jira-instance.atlassian.net
|
|
56
88
|
# OR alternatively use
|
|
57
89
|
# JIRA_API_BASE_PATH=https://your-jira-instance.atlassian.net/rest
|
|
58
90
|
# Note: /api/latest/ is added automatically, do not include it
|
|
59
91
|
JIRA_API_TOKEN=your-personal-access-token
|
|
92
|
+
|
|
93
|
+
# Optional: default page size for paginated read tools (fallback: 25)
|
|
94
|
+
JIRA_DEFAULT_PAGE_SIZE=25
|
|
60
95
|
```
|
|
61
96
|
|
|
97
|
+
Direct environment variables override values loaded from `ATLASSIAN_DC_MCP_CONFIG_FILE`.
|
|
98
|
+
|
|
62
99
|
To create a personal access token:
|
|
63
100
|
- In Jira, select your profile picture at the top right
|
|
64
101
|
- Select **Personal Access Tokens**
|
|
@@ -87,9 +124,10 @@ Search for JIRA issues using JQL in the JIRA Data Center edition instance.
|
|
|
87
124
|
|
|
88
125
|
Parameters:
|
|
89
126
|
- `jql` (string, required): JIRA Query Language search string
|
|
90
|
-
- `expand` (array, optional):
|
|
127
|
+
- `expand` (array, optional): Additional response sections to expand, such as `renderedFields`, `names`, or `schema`
|
|
91
128
|
- `startAt` (number, optional): Starting index for pagination
|
|
92
|
-
- `maxResults` (number, optional): Maximum number of results to return
|
|
129
|
+
- `maxResults` (number, optional): Maximum number of results to return. Defaults to `JIRA_DEFAULT_PAGE_SIZE` or `25`.
|
|
130
|
+
- `fields` (array, optional): Issue field names to return. When omitted, the tool uses a moderate-detail default field set.
|
|
93
131
|
|
|
94
132
|
#### 2. jira_getIssue
|
|
95
133
|
|
|
@@ -97,7 +135,8 @@ Get details of a JIRA issue by its key from the JIRA Data Center edition instanc
|
|
|
97
135
|
|
|
98
136
|
Parameters:
|
|
99
137
|
- `issueKey` (string, required): The issue key (e.g., "PROJECT-123")
|
|
100
|
-
- `expand` (string, optional): Comma-separated
|
|
138
|
+
- `expand` (string, optional): Comma-separated response sections to expand, such as `renderedFields`, `changelog`, or `transitions`
|
|
139
|
+
- `fields` (array, optional): Issue field names to return. When omitted, the tool uses the search default field set plus `parent` and `subtasks`.
|
|
101
140
|
|
|
102
141
|
#### 3. jira_getIssueComments
|
|
103
142
|
|
|
@@ -105,7 +144,9 @@ Get comments for a JIRA issue from the JIRA Data Center edition instance.
|
|
|
105
144
|
|
|
106
145
|
Parameters:
|
|
107
146
|
- `issueKey` (string, required): The issue key (e.g., "PROJECT-123")
|
|
108
|
-
- `expand` (string, optional): Comma-separated
|
|
147
|
+
- `expand` (string, optional): Comma-separated comment expansions, such as `renderedBody`
|
|
148
|
+
- `maxResults` (number, optional): Maximum number of comments to return. Defaults to `JIRA_DEFAULT_PAGE_SIZE` or `25`.
|
|
149
|
+
- `startAt` (number, optional): Starting comment offset for pagination
|
|
109
150
|
|
|
110
151
|
#### 4. jira_createIssue
|
|
111
152
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
describe('Jira config', () => {
|
|
5
|
+
const originalEnv = process.env;
|
|
6
|
+
const originalCwd = process.cwd();
|
|
7
|
+
let tempDir;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
jest.resetModules();
|
|
10
|
+
process.env = { ...originalEnv };
|
|
11
|
+
delete process.env.ATLASSIAN_DC_MCP_CONFIG_FILE;
|
|
12
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'jira-config-'));
|
|
13
|
+
process.chdir(tempDir);
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
17
|
+
process.chdir(originalCwd);
|
|
18
|
+
});
|
|
19
|
+
afterAll(() => {
|
|
20
|
+
process.env = originalEnv;
|
|
21
|
+
});
|
|
22
|
+
it('uses the configured page size when the env var is a positive integer', async () => {
|
|
23
|
+
process.env.JIRA_DEFAULT_PAGE_SIZE = '40';
|
|
24
|
+
const { getDefaultPageSize } = await import('../config.js');
|
|
25
|
+
expect(getDefaultPageSize()).toBe(40);
|
|
26
|
+
});
|
|
27
|
+
it('falls back to 25 when the env var is invalid', async () => {
|
|
28
|
+
process.env.JIRA_DEFAULT_PAGE_SIZE = 'invalid';
|
|
29
|
+
const { getDefaultPageSize } = await import('../config.js');
|
|
30
|
+
expect(getDefaultPageSize()).toBe(25);
|
|
31
|
+
});
|
|
32
|
+
it('reads the page size from the shared config file', async () => {
|
|
33
|
+
const sharedConfigPath = path.join(tempDir, 'shared.env');
|
|
34
|
+
fs.writeFileSync(sharedConfigPath, 'JIRA_HOST=file-host\nJIRA_API_TOKEN=file-token\nJIRA_DEFAULT_PAGE_SIZE=35\n');
|
|
35
|
+
process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
|
|
36
|
+
const { getDefaultPageSize, getJiraRuntimeConfig } = await import('../config.js');
|
|
37
|
+
expect(getDefaultPageSize()).toBe(35);
|
|
38
|
+
expect(getJiraRuntimeConfig().token).toBe('file-token');
|
|
39
|
+
});
|
|
40
|
+
it('keeps env values higher priority than the shared config file', async () => {
|
|
41
|
+
const sharedConfigPath = path.join(tempDir, 'shared.env');
|
|
42
|
+
fs.writeFileSync(sharedConfigPath, 'JIRA_HOST=file-host\nJIRA_API_TOKEN=file-token\nJIRA_DEFAULT_PAGE_SIZE=35\n');
|
|
43
|
+
process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
|
|
44
|
+
process.env.JIRA_DEFAULT_PAGE_SIZE = '45';
|
|
45
|
+
const { getDefaultPageSize } = await import('../config.js');
|
|
46
|
+
expect(getDefaultPageSize()).toBe(45);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-runtime-config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/jira-runtime-config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { initializeRuntimeConfig } from '@atlassian-dc-mcp/common';
|
|
5
|
+
import { getJiraRuntimeConfig } from '../config.js';
|
|
6
|
+
import { JiraService } from '../jira-service.js';
|
|
7
|
+
import { OpenAPI } from '../jira-client/core/OpenAPI.js';
|
|
8
|
+
import { getHeaders } from '../jira-client/core/request.js';
|
|
9
|
+
describe('Jira runtime config integration', () => {
|
|
10
|
+
const originalEnv = process.env;
|
|
11
|
+
let tempDir;
|
|
12
|
+
let sharedConfigPath;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
process.env = { ...originalEnv };
|
|
15
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'jira-runtime-config-'));
|
|
16
|
+
sharedConfigPath = path.join(tempDir, 'shared.env');
|
|
17
|
+
process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
21
|
+
});
|
|
22
|
+
afterAll(() => {
|
|
23
|
+
process.env = originalEnv;
|
|
24
|
+
});
|
|
25
|
+
it('refreshes the bearer token from the shared config file without recreating the service', async () => {
|
|
26
|
+
fs.writeFileSync(sharedConfigPath, 'JIRA_HOST=file-host\nJIRA_API_TOKEN=token-a\nJIRA_DEFAULT_PAGE_SIZE=30\n');
|
|
27
|
+
const initialTime = new Date('2026-01-01T00:00:00.000Z');
|
|
28
|
+
fs.utimesSync(sharedConfigPath, initialTime, initialTime);
|
|
29
|
+
initializeRuntimeConfig({ cwd: tempDir });
|
|
30
|
+
const startupConfig = getJiraRuntimeConfig();
|
|
31
|
+
new JiraService(startupConfig.host, () => getJiraRuntimeConfig().token, startupConfig.apiBasePath, () => getJiraRuntimeConfig().defaultPageSize);
|
|
32
|
+
const firstHeaders = await getHeaders(OpenAPI, { method: 'GET', url: '/issue' });
|
|
33
|
+
expect(firstHeaders.get('Authorization')).toBe('Bearer token-a');
|
|
34
|
+
fs.writeFileSync(sharedConfigPath, 'JIRA_HOST=file-host\nJIRA_API_TOKEN=token-b\nJIRA_DEFAULT_PAGE_SIZE=45\n');
|
|
35
|
+
const updatedTime = new Date('2026-01-01T00:00:01.000Z');
|
|
36
|
+
fs.utimesSync(sharedConfigPath, updatedTime, updatedTime);
|
|
37
|
+
const secondHeaders = await getHeaders(OpenAPI, { method: 'GET', url: '/issue' });
|
|
38
|
+
expect(secondHeaders.get('Authorization')).toBe('Bearer token-b');
|
|
39
|
+
expect(getJiraRuntimeConfig().defaultPageSize).toBe(45);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=jira-runtime-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-runtime-config.test.js","sourceRoot":"","sources":["../../src/__tests__/jira-runtime-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { initializeRuntimeConfig } from '@atlassian-dc-mcp/common';
|
|
1
5
|
import { JiraService } from '../jira-service.js';
|
|
2
|
-
import { IssueService } from '../jira-client/index.js';
|
|
6
|
+
import { IssueService, SearchService } from '../jira-client/index.js';
|
|
3
7
|
jest.mock('../jira-client/index.js', () => ({
|
|
4
8
|
IssueService: {
|
|
5
9
|
getTransitions: jest.fn(),
|
|
@@ -81,6 +85,72 @@ describe('JiraService', () => {
|
|
|
81
85
|
expect(result.error).toBe('Insufficient permissions to view transitions');
|
|
82
86
|
});
|
|
83
87
|
});
|
|
88
|
+
describe('token optimization paths', () => {
|
|
89
|
+
it('uses the default field profile and page size for search', async () => {
|
|
90
|
+
const mockSearchResults = { issues: [] };
|
|
91
|
+
SearchService.searchUsingSearchRequest.mockResolvedValue(mockSearchResults);
|
|
92
|
+
const result = await jiraService.searchIssues('project = TEST');
|
|
93
|
+
expect(result.success).toBe(true);
|
|
94
|
+
expect(result.data).toBe(mockSearchResults);
|
|
95
|
+
expect(SearchService.searchUsingSearchRequest).toHaveBeenCalledWith({
|
|
96
|
+
jql: 'project = TEST',
|
|
97
|
+
maxResults: 25,
|
|
98
|
+
fields: ['summary', 'description', 'status', 'assignee', 'reporter', 'priority', 'issuetype', 'labels', 'updated'],
|
|
99
|
+
expand: undefined,
|
|
100
|
+
startAt: undefined,
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
it('honors explicit search fields and maxResults', async () => {
|
|
104
|
+
const mockSearchResults = { issues: [] };
|
|
105
|
+
SearchService.searchUsingSearchRequest.mockResolvedValue(mockSearchResults);
|
|
106
|
+
await jiraService.searchIssues('project = TEST', 20, ['changelog'], 5, ['summary', 'status']);
|
|
107
|
+
expect(SearchService.searchUsingSearchRequest).toHaveBeenCalledWith({
|
|
108
|
+
jql: 'project = TEST',
|
|
109
|
+
maxResults: 5,
|
|
110
|
+
fields: ['summary', 'status'],
|
|
111
|
+
expand: ['changelog'],
|
|
112
|
+
startAt: 20,
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
it('uses the richer default field profile for single issue reads', async () => {
|
|
116
|
+
const mockIssue = { key: mockIssueKey };
|
|
117
|
+
IssueService.getIssue.mockResolvedValue(mockIssue);
|
|
118
|
+
const result = await jiraService.getIssue(mockIssueKey);
|
|
119
|
+
expect(result.success).toBe(true);
|
|
120
|
+
expect(result.data).toBe(mockIssue);
|
|
121
|
+
expect(IssueService.getIssue).toHaveBeenCalledWith(mockIssueKey, undefined, [
|
|
122
|
+
'summary',
|
|
123
|
+
'description',
|
|
124
|
+
'status',
|
|
125
|
+
'assignee',
|
|
126
|
+
'reporter',
|
|
127
|
+
'priority',
|
|
128
|
+
'issuetype',
|
|
129
|
+
'labels',
|
|
130
|
+
'updated',
|
|
131
|
+
'parent',
|
|
132
|
+
'subtasks',
|
|
133
|
+
]);
|
|
134
|
+
});
|
|
135
|
+
it('honors explicit issue fields', async () => {
|
|
136
|
+
IssueService.getIssue.mockResolvedValue({ key: mockIssueKey });
|
|
137
|
+
await jiraService.getIssue(mockIssueKey, 'renderedFields', ['summary', 'status']);
|
|
138
|
+
expect(IssueService.getIssue).toHaveBeenCalledWith(mockIssueKey, 'renderedFields', ['summary', 'status']);
|
|
139
|
+
});
|
|
140
|
+
it('uses the package default page size for issue comments', async () => {
|
|
141
|
+
const mockComments = { comments: [] };
|
|
142
|
+
IssueService.getComments.mockResolvedValue(mockComments);
|
|
143
|
+
const result = await jiraService.getIssueComments(mockIssueKey);
|
|
144
|
+
expect(result.success).toBe(true);
|
|
145
|
+
expect(result.data).toBe(mockComments);
|
|
146
|
+
expect(IssueService.getComments).toHaveBeenCalledWith(mockIssueKey, undefined, '25', undefined, undefined);
|
|
147
|
+
});
|
|
148
|
+
it('forwards explicit issue comment pagination', async () => {
|
|
149
|
+
IssueService.getComments.mockResolvedValue({ comments: [] });
|
|
150
|
+
await jiraService.getIssueComments(mockIssueKey, 'renderedBody', 10, 20);
|
|
151
|
+
expect(IssueService.getComments).toHaveBeenCalledWith(mockIssueKey, 'renderedBody', '10', undefined, '20');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
84
154
|
describe('transitionIssue', () => {
|
|
85
155
|
it('should successfully transition an issue to a new status', async () => {
|
|
86
156
|
IssueService.doTransition.mockResolvedValue(undefined);
|
|
@@ -155,9 +225,15 @@ describe('JiraService', () => {
|
|
|
155
225
|
});
|
|
156
226
|
describe('validateConfig', () => {
|
|
157
227
|
const originalEnv = process.env;
|
|
228
|
+
let tempDir;
|
|
158
229
|
beforeEach(() => {
|
|
159
|
-
jest.resetModules();
|
|
160
230
|
process.env = { ...originalEnv };
|
|
231
|
+
delete process.env.ATLASSIAN_DC_MCP_CONFIG_FILE;
|
|
232
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'jira-validate-config-'));
|
|
233
|
+
initializeRuntimeConfig({ cwd: tempDir });
|
|
234
|
+
});
|
|
235
|
+
afterEach(() => {
|
|
236
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
161
237
|
});
|
|
162
238
|
afterAll(() => {
|
|
163
239
|
process.env = originalEnv;
|
|
@@ -188,6 +264,13 @@ describe('JiraService', () => {
|
|
|
188
264
|
const missingVars = JiraService.validateConfig();
|
|
189
265
|
expect(missingVars).toEqual([]);
|
|
190
266
|
});
|
|
267
|
+
it('should accept required config from the shared config file', () => {
|
|
268
|
+
const sharedConfigPath = path.join(tempDir, 'shared.env');
|
|
269
|
+
fs.writeFileSync(sharedConfigPath, 'JIRA_HOST=file-host\nJIRA_API_TOKEN=file-token\n');
|
|
270
|
+
process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
|
|
271
|
+
const missingVars = JiraService.validateConfig();
|
|
272
|
+
expect(missingVars).toEqual([]);
|
|
273
|
+
});
|
|
191
274
|
});
|
|
192
275
|
});
|
|
193
276
|
//# sourceMappingURL=jira-service.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira-service.test.js","sourceRoot":"","sources":["../../src/__tests__/jira-service.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jira-service.test.js","sourceRoot":"","sources":["../../src/__tests__/jira-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,4DAEnC;AAED,wBAAgB,kBAAkB,WAEjC;AAED,wBAAgB,gBAAgB,aAE/B"}
|
package/build/config.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getProductRuntimeConfig, validateProductRuntimeConfig } from '@atlassian-dc-mcp/common';
|
|
2
|
+
export function getJiraRuntimeConfig() {
|
|
3
|
+
return getProductRuntimeConfig('jira');
|
|
4
|
+
}
|
|
5
|
+
export function getDefaultPageSize() {
|
|
6
|
+
return getJiraRuntimeConfig().defaultPageSize;
|
|
7
|
+
}
|
|
8
|
+
export function getMissingConfig() {
|
|
9
|
+
return validateProductRuntimeConfig('jira');
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAEjG,MAAM,UAAU,oBAAoB;IAClC,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,oBAAoB,EAAE,CAAC,eAAe,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import { connectServer, createMcpServer, formatToolResponse } from '@atlassian-dc-mcp/common';
|
|
1
|
+
import { connectServer, createMcpServer, formatToolResponse, initializeRuntimeConfig } from '@atlassian-dc-mcp/common';
|
|
2
2
|
import { JiraService, jiraToolSchemas } from './jira-service.js';
|
|
3
|
-
import
|
|
3
|
+
import { getDefaultPageSize, getJiraRuntimeConfig } from './config.js';
|
|
4
|
+
initializeRuntimeConfig();
|
|
4
5
|
const missingEnvVars = JiraService.validateConfig();
|
|
5
6
|
if (missingEnvVars.length > 0) {
|
|
6
7
|
throw new Error(`Missing required environment variables: ${missingEnvVars.join(', ')}`);
|
|
7
8
|
}
|
|
8
|
-
const
|
|
9
|
+
const jiraConfig = getJiraRuntimeConfig();
|
|
10
|
+
const jiraService = new JiraService(jiraConfig.host, () => getJiraRuntimeConfig().token, jiraConfig.apiBasePath, getDefaultPageSize);
|
|
9
11
|
const server = createMcpServer({
|
|
10
12
|
name: "atlassian-jira-mcp",
|
|
11
13
|
version: "0.1.0"
|
|
12
14
|
});
|
|
13
15
|
const jiraInstanceType = "JIRA Data Center edition instance";
|
|
14
|
-
server.tool("jira_searchIssues", `Search for JIRA issues using JQL in the ${jiraInstanceType}`, jiraToolSchemas.searchIssues, async ({ jql, expand, startAt, maxResults
|
|
15
|
-
const result = await jiraService.searchIssues(jql, startAt, expand, maxResults);
|
|
16
|
+
server.tool("jira_searchIssues", `Search for JIRA issues using JQL in the ${jiraInstanceType}`, jiraToolSchemas.searchIssues, async ({ jql, expand, startAt, maxResults, fields }) => {
|
|
17
|
+
const result = await jiraService.searchIssues(jql, startAt, expand, maxResults, fields);
|
|
16
18
|
return formatToolResponse(result);
|
|
17
19
|
});
|
|
18
|
-
server.tool("jira_getIssue", `Get details of a JIRA issue by its key from the ${jiraInstanceType}`, jiraToolSchemas.getIssue, async ({ issueKey, expand }) => {
|
|
19
|
-
const result = await jiraService.getIssue(issueKey, expand);
|
|
20
|
+
server.tool("jira_getIssue", `Get details of a JIRA issue by its key from the ${jiraInstanceType}`, jiraToolSchemas.getIssue, async ({ issueKey, expand, fields }) => {
|
|
21
|
+
const result = await jiraService.getIssue(issueKey, expand, fields);
|
|
20
22
|
return formatToolResponse(result);
|
|
21
23
|
});
|
|
22
|
-
server.tool('jira_getIssueComments', `Get comments of a JIRA issue by its key from the ${jiraInstanceType}`, jiraToolSchemas.getIssueComments, async ({ issueKey, expand }) => {
|
|
23
|
-
const result = await jiraService.getIssueComments(issueKey, expand);
|
|
24
|
+
server.tool('jira_getIssueComments', `Get comments of a JIRA issue by its key from the ${jiraInstanceType}`, jiraToolSchemas.getIssueComments, async ({ issueKey, expand, maxResults, startAt }) => {
|
|
25
|
+
const result = await jiraService.getIssueComments(issueKey, expand, maxResults, startAt);
|
|
24
26
|
return formatToolResponse(result);
|
|
25
27
|
});
|
|
26
28
|
server.tool("jira_createIssue", `Create a new JIRA issue in the ${jiraInstanceType}`, jiraToolSchemas.createIssue, async (params) => {
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/jira-service.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare class JiraService {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
private readonly getPageSize;
|
|
4
|
+
constructor(host: string | undefined, token: string | (() => string | undefined), fullBaseUrl?: string, getPageSize?: () => number);
|
|
5
|
+
searchIssues(jql: string, startAt?: number, expand?: string[], maxResults?: number, fields?: string[]): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./jira-client/index.js").SearchResultsBean>>;
|
|
6
|
+
getIssue(issueKey: string, expand?: string, fields?: string[]): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./jira-client/index.js").IssueBean>>;
|
|
7
|
+
getIssueComments(issueKey: string, expand?: string, maxResults?: number, startAt?: number): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./jira-client/index.js").CommentsWithPaginationJsonBean>>;
|
|
7
8
|
postIssueComment(issueKey: string, comment: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./jira-client/index.js").CommentJsonBean>>;
|
|
8
9
|
createIssue(params: {
|
|
9
10
|
projectId: string;
|
|
@@ -33,14 +34,18 @@ export declare const jiraToolSchemas: {
|
|
|
33
34
|
maxResults: z.ZodOptional<z.ZodNumber>;
|
|
34
35
|
startAt: z.ZodOptional<z.ZodNumber>;
|
|
35
36
|
expand: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
37
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
36
38
|
};
|
|
37
39
|
getIssue: {
|
|
38
40
|
issueKey: z.ZodString;
|
|
39
41
|
expand: z.ZodOptional<z.ZodString>;
|
|
42
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
40
43
|
};
|
|
41
44
|
getIssueComments: {
|
|
42
45
|
issueKey: z.ZodString;
|
|
43
46
|
expand: z.ZodOptional<z.ZodString>;
|
|
47
|
+
maxResults: z.ZodOptional<z.ZodNumber>;
|
|
48
|
+
startAt: z.ZodOptional<z.ZodNumber>;
|
|
44
49
|
};
|
|
45
50
|
postIssueComment: {
|
|
46
51
|
issueKey: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira-service.d.ts","sourceRoot":"","sources":["../src/jira-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"jira-service.d.ts","sourceRoot":"","sources":["../src/jira-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;gBAGzC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,EAC1C,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,GAAE,MAAM,MAA2B;IAe1C,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;IAYrG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;IAO7D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAOzF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIlD,WAAW,CAAC,MAAM,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACpC;IAiBK,WAAW,CAAC,MAAM,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACpC;IAqBK,cAAc,CAAC,QAAQ,EAAE,MAAM;IAO/B,eAAe,CAAC,MAAM,EAAE;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B;IAYD,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;CAGlC;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C3B,CAAC"}
|