@atlassian-dc-mcp/confluence 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.
Files changed (36) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +41 -2
  3. package/build/__tests__/config.test.d.ts +2 -0
  4. package/build/__tests__/config.test.d.ts.map +1 -0
  5. package/build/__tests__/config.test.js +49 -0
  6. package/build/__tests__/config.test.js.map +1 -0
  7. package/build/__tests__/confluence-response-mapper.test.d.ts +2 -0
  8. package/build/__tests__/confluence-response-mapper.test.d.ts.map +1 -0
  9. package/build/__tests__/confluence-response-mapper.test.js +24 -0
  10. package/build/__tests__/confluence-response-mapper.test.js.map +1 -0
  11. package/build/__tests__/confluence-service.test.js +125 -5
  12. package/build/__tests__/confluence-service.test.js.map +1 -1
  13. package/build/config.d.ts +4 -0
  14. package/build/config.d.ts.map +1 -0
  15. package/build/config.js +11 -0
  16. package/build/config.js.map +1 -0
  17. package/build/confluence-response-mapper.d.ts +13 -0
  18. package/build/confluence-response-mapper.d.ts.map +1 -0
  19. package/build/confluence-response-mapper.js +87 -0
  20. package/build/confluence-response-mapper.js.map +1 -0
  21. package/build/confluence-service.d.ts +18 -4
  22. package/build/confluence-service.d.ts.map +1 -1
  23. package/build/confluence-service.js +42 -22
  24. package/build/confluence-service.js.map +1 -1
  25. package/build/index.js +27 -14
  26. package/build/index.js.map +1 -1
  27. package/package.json +3 -3
  28. package/server.json +12 -5
  29. package/src/__tests__/config.test.ts +64 -0
  30. package/src/__tests__/confluence-response-mapper.test.ts +26 -0
  31. package/src/__tests__/confluence-service.test.ts +161 -5
  32. package/src/config.ts +13 -0
  33. package/src/confluence-response-mapper.ts +104 -0
  34. package/src/confluence-service.ts +69 -26
  35. package/src/index.ts +31 -16
  36. 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/confluence
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
+ * **confluence:** add token-optimized content shaping ([0a23201](https://github.com/b1ff/atlassian-dc-mcp/commit/0a232014c8de1d8f1c0d10d3e1d9377949ca90ad))
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
  **Note:** Version bump only for package @atlassian-dc-mcp/confluence
package/README.md CHANGED
@@ -16,7 +16,7 @@ This package provides a Machine Comprehension Protocol (MCP) server for interact
16
16
  npm install
17
17
  ```
18
18
 
19
- 2. Create a `.env` file in the packages/confluence directory with the following variables:
19
+ 2. Create a `.env` file in the packages/confluence directory, or put the same values in a shared dotenv file and set `ATLASSIAN_DC_MCP_CONFIG_FILE` to its absolute path:
20
20
  ```
21
21
  # Either CONFLUENCE_HOST or CONFLUENCE_API_BASE_PATH must be set
22
22
  CONFLUENCE_HOST=your-confluence-instance.atlassian.net
@@ -28,8 +28,29 @@ This package provides a Machine Comprehension Protocol (MCP) server for interact
28
28
 
29
29
  # 2. Or continue using CONFLUENCE_HOST with the default API path (/rest):
30
30
  # CONFLUENCE_HOST=your-confluence-instance.atlassian.net
31
+
32
+ # Optional: default page size for paginated search tools (fallback: 25)
33
+ CONFLUENCE_DEFAULT_PAGE_SIZE=25
31
34
  ```
32
35
 
36
+ Shared file example:
37
+ ```
38
+ CONFLUENCE_HOST=your-confluence-instance.atlassian.net
39
+ CONFLUENCE_API_TOKEN=your-personal-access-token
40
+ CONFLUENCE_DEFAULT_PAGE_SIZE=25
41
+ ```
42
+
43
+ Start the server with:
44
+ ```
45
+ ATLASSIAN_DC_MCP_CONFIG_FILE=/absolute/path/to/atlassian-dc-mcp.env npm run dev
46
+ ```
47
+
48
+ Windows example:
49
+ ```
50
+ set ATLASSIAN_DC_MCP_CONFIG_FILE=C:\Users\your-user\AppData\Roaming\atlassian-dc-mcp.env
51
+ npm run dev
52
+ ```
53
+
33
54
  Note: You have two options for configuring the API URL:
34
55
 
35
56
  1. Set `CONFLUENCE_API_BASE_PATH` to the full API URL (e.g., "https://host.com/rest/api" or "https://host.com/wiki/rest/api").
@@ -39,6 +60,8 @@ This package provides a Machine Comprehension Protocol (MCP) server for interact
39
60
 
40
61
  3. Confluence uses `/rest` as a path part always, so it will be added automatically, no need to add it manually.
41
62
 
63
+ Direct environment variables override values loaded from `ATLASSIAN_DC_MCP_CONFIG_FILE`.
64
+
42
65
  To create a personal access token:
43
66
  - In Confluence, select your profile picture at the top right
44
67
  - Select **Settings** > **Personal Access Tokens**
@@ -83,6 +106,8 @@ Get Confluence Data Center content by ID.
83
106
  Parameters:
84
107
  - `contentId` (string, required): The ID of the content to retrieve
85
108
  - `expand` (string, optional): Comma-separated list of properties to expand (e.g., "body.storage,version")
109
+ - `bodyMode` (`storage` | `text` | `none`, optional): Response shape for the content body. Defaults to `storage` for backward compatibility.
110
+ - `maxBodyChars` (number, optional): Maximum number of characters to keep when `bodyMode=text`
86
111
 
87
112
  #### 2. confluence_searchContent
88
113
 
@@ -90,9 +115,10 @@ Search for content in Confluence Data Center using CQL.
90
115
 
91
116
  Parameters:
92
117
  - `cql` (string, required): Confluence Query Language search string
93
- - `limit` (number, optional): Maximum number of results to return
118
+ - `limit` (number, optional): Maximum number of results to return. Defaults to `CONFLUENCE_DEFAULT_PAGE_SIZE` or `25`.
94
119
  - `start` (number, optional): Start index for pagination
95
120
  - `expand` (string, optional): Comma-separated list of properties to expand
121
+ - `excerpt` (`none` | `highlight`, optional): Excerpt mode for search results. Defaults to `none`.
96
122
 
97
123
  #### 3. confluence_createContent
98
124
 
@@ -104,6 +130,7 @@ Parameters:
104
130
  - `type` (string, default: "page"): Content type (page, blogpost, etc)
105
131
  - `content` (string, required): Content body in Confluence Data Center's storage format (XML-based storage format)
106
132
  - `parentId` (string, optional): ID of the parent page (if creating a child page)
133
+ - `output` (`ack` | `full`, optional): Return a compact acknowledgement or the full API response. Defaults to `ack`.
107
134
 
108
135
  #### 4. confluence_updateContent
109
136
 
@@ -115,3 +142,15 @@ Parameters:
115
142
  - `content` (string, optional): New content body in Confluence Data Center's storage format (XML-based)
116
143
  - `version` (number, required): New version number (must be incremented from current version)
117
144
  - `versionComment` (string, optional): Comment for this version
145
+ - `output` (`ack` | `full`, optional): Return a compact acknowledgement or the full API response. Defaults to `ack`.
146
+
147
+ #### 5. confluence_searchSpace
148
+
149
+ Search for Confluence spaces by name text.
150
+
151
+ Parameters:
152
+ - `searchText` (string, required): Text to search for in space names or descriptions
153
+ - `limit` (number, optional): Maximum number of results to return. Defaults to `CONFLUENCE_DEFAULT_PAGE_SIZE` or `25`.
154
+ - `start` (number, optional): Start index for pagination
155
+ - `expand` (string, optional): Comma-separated list of properties to expand
156
+ - `excerpt` (`none` | `highlight`, optional): Excerpt mode for search results. Defaults to `none`.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -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('Confluence 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(), 'confluence-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.CONFLUENCE_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.CONFLUENCE_DEFAULT_PAGE_SIZE = '0';
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, 'CONFLUENCE_HOST=file-host\nCONFLUENCE_API_TOKEN=file-token\nCONFLUENCE_DEFAULT_PAGE_SIZE=35\n');
35
+ process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
36
+ const { getConfluenceRuntimeConfig, getDefaultPageSize } = await import('../config.js');
37
+ expect(getDefaultPageSize()).toBe(35);
38
+ expect(getConfluenceRuntimeConfig().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, 'CONFLUENCE_HOST=file-host\nCONFLUENCE_API_TOKEN=file-token\nCONFLUENCE_DEFAULT_PAGE_SIZE=35\n');
43
+ process.env.ATLASSIAN_DC_MCP_CONFIG_FILE = sharedConfigPath;
44
+ process.env.CONFLUENCE_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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=confluence-response-mapper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluence-response-mapper.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/confluence-response-mapper.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { shapeConfluenceMutationAck } from '../confluence-response-mapper.js';
2
+ describe('shapeConfluenceMutationAck', () => {
3
+ it('returns a compact acknowledgement with a resolved content URL', () => {
4
+ expect(shapeConfluenceMutationAck({
5
+ id: '123',
6
+ type: 'page',
7
+ title: 'Test page',
8
+ space: { key: 'DOCS' },
9
+ version: { number: 7 },
10
+ _links: {
11
+ base: 'https://confluence.example.com',
12
+ webui: '/pages/viewpage.action?pageId=123',
13
+ },
14
+ })).toEqual({
15
+ id: '123',
16
+ type: 'page',
17
+ title: 'Test page',
18
+ spaceKey: 'DOCS',
19
+ version: 7,
20
+ url: 'https://confluence.example.com/pages/viewpage.action?pageId=123',
21
+ });
22
+ });
23
+ });
24
+ //# sourceMappingURL=confluence-response-mapper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluence-response-mapper.test.js","sourceRoot":"","sources":["../../src/__tests__/confluence-response-mapper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAE9E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CACJ,0BAA0B,CAAC;YACzB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;YACtB,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACtB,MAAM,EAAE;gBACN,IAAI,EAAE,gCAAgC;gBACtC,KAAK,EAAE,mCAAmC;aAC3C;SACF,CAAC,CACH,CAAC,OAAO,CAAC;YACR,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,iEAAiE;SACvE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,11 @@
1
1
  import { ConfluenceService, escapeSearchTextForCql } from '../confluence-service.js';
2
- import { SearchService } from '../confluence-client/index.js';
2
+ import { ContentResourceService, SearchService } from '../confluence-client/index.js';
3
3
  jest.mock('../confluence-client/index.js', () => ({
4
- ContentResourceService: {},
4
+ ContentResourceService: {
5
+ getContentById: jest.fn(),
6
+ createContent: jest.fn(),
7
+ update2: jest.fn(),
8
+ },
5
9
  SearchService: {
6
10
  search1: jest.fn(),
7
11
  },
@@ -55,17 +59,17 @@ describe('ConfluenceService.searchSpaces', () => {
55
59
  it('builds CQL with escaped searchText and calls SearchService', async () => {
56
60
  SearchService.search1.mockResolvedValue({ results: [] });
57
61
  await service.searchSpaces('my space', 10, 0);
58
- expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '10', '0', undefined, 'type=space AND title ~ "my space"');
62
+ expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '10', '0', 'none', 'type=space AND title ~ "my space"');
59
63
  });
60
64
  it('escapes quotes in searchText in the CQL passed to the API', async () => {
61
65
  SearchService.search1.mockResolvedValue({ results: [] });
62
66
  await service.searchSpaces('say "hello"', 5);
63
- expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined, undefined, 'type=space AND title ~ "say \\"hello\\""');
67
+ expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined, 'none', 'type=space AND title ~ "say \\"hello\\""');
64
68
  });
65
69
  it('escapes backslashes in searchText in the CQL passed to the API', async () => {
66
70
  SearchService.search1.mockResolvedValue({ results: [] });
67
71
  await service.searchSpaces('path\\to\\space', 5);
68
- expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined, undefined, 'type=space AND title ~ "path\\\\to\\\\space"');
72
+ expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '5', undefined, 'none', 'type=space AND title ~ "path\\\\to\\\\space"');
69
73
  });
70
74
  it('forwards API errors via handleApiOperation', async () => {
71
75
  const err = new Error('API error');
@@ -75,4 +79,120 @@ describe('ConfluenceService.searchSpaces', () => {
75
79
  expect(result.error).toBeDefined();
76
80
  });
77
81
  });
82
+ describe('ConfluenceService token optimization paths', () => {
83
+ let service;
84
+ beforeEach(() => {
85
+ service = new ConfluenceService('test-host', 'test-token');
86
+ jest.clearAllMocks();
87
+ });
88
+ it('keeps storage mode as the default body shape', async () => {
89
+ const mockContent = {
90
+ id: '123',
91
+ type: 'page',
92
+ title: 'Test page',
93
+ body: {
94
+ storage: {
95
+ value: '<p>Hello</p>',
96
+ representation: 'storage',
97
+ },
98
+ },
99
+ };
100
+ ContentResourceService.getContentById.mockResolvedValue(mockContent);
101
+ const result = await service.getContent('123');
102
+ expect(result.success).toBe(true);
103
+ expect(result.data).toBe(mockContent);
104
+ expect(ContentResourceService.getContentById).toHaveBeenCalledWith('123', 'body.storage');
105
+ });
106
+ it('converts storage XML to text when bodyMode is text', async () => {
107
+ ContentResourceService.getContentById.mockResolvedValue({
108
+ id: '123',
109
+ type: 'page',
110
+ title: 'Test page',
111
+ body: {
112
+ storage: {
113
+ value: '<p>Hello &amp; <strong>world</strong></p><ul><li>One</li><li>Two</li></ul>',
114
+ representation: 'storage',
115
+ },
116
+ },
117
+ version: { number: 3 },
118
+ });
119
+ const result = await service.getContent('123', 'version', 'text');
120
+ expect(result.success).toBe(true);
121
+ expect(ContentResourceService.getContentById).toHaveBeenCalledWith('123', 'version,body.storage');
122
+ expect(result.data).toMatchObject({
123
+ id: '123',
124
+ type: 'page',
125
+ title: 'Test page',
126
+ version: { number: 3 },
127
+ body: {
128
+ text: {
129
+ representation: 'text',
130
+ },
131
+ },
132
+ });
133
+ expect(result.data.body.text.value).toContain('Hello & world');
134
+ expect(result.data.body.text.value).toContain('- One');
135
+ expect(result.data.body.text.value).toContain('- Two');
136
+ });
137
+ it('truncates text bodies when maxBodyChars is provided', async () => {
138
+ ContentResourceService.getContentById.mockResolvedValue({
139
+ id: '123',
140
+ type: 'page',
141
+ title: 'Test page',
142
+ body: {
143
+ storage: {
144
+ value: '<p>Hello world</p>',
145
+ representation: 'storage',
146
+ },
147
+ },
148
+ });
149
+ const result = await service.getContent('123', undefined, 'text', 5);
150
+ expect(result.success).toBe(true);
151
+ expect(result.data).toEqual({
152
+ id: '123',
153
+ type: 'page',
154
+ title: 'Test page',
155
+ body: {
156
+ text: {
157
+ value: 'Hello',
158
+ representation: 'text',
159
+ truncated: true,
160
+ originalLength: 11,
161
+ },
162
+ },
163
+ });
164
+ });
165
+ it('omits the body when bodyMode is none', async () => {
166
+ ContentResourceService.getContentById.mockResolvedValue({
167
+ id: '123',
168
+ type: 'page',
169
+ title: 'Test page',
170
+ body: {
171
+ storage: {
172
+ value: '<p>Hello</p>',
173
+ representation: 'storage',
174
+ },
175
+ },
176
+ version: { number: 1 },
177
+ });
178
+ const result = await service.getContent('123', undefined, 'none');
179
+ expect(result.success).toBe(true);
180
+ expect(result.data).toEqual({
181
+ id: '123',
182
+ type: 'page',
183
+ title: 'Test page',
184
+ version: { number: 1 },
185
+ });
186
+ });
187
+ it('uses the package default limit and no excerpt for content search', async () => {
188
+ SearchService.search1.mockResolvedValue({ results: [] });
189
+ await service.searchContent('type=page');
190
+ expect(SearchService.search1).toHaveBeenCalledWith(undefined, undefined, undefined, '25', undefined, 'none', 'type=page');
191
+ });
192
+ it('forwards explicit excerpt for space search', async () => {
193
+ SearchService.search1.mockResolvedValue({ results: [] });
194
+ await service.searchSpaces('docs', 5, 10, 'space.icon', 'highlight');
195
+ expect(SearchService.search1).toHaveBeenCalledWith(undefined, 'space.icon', undefined, '5', '10', 'highlight', 'type=space AND title ~ "docs"');
196
+ });
197
+ });
78
198
  //# sourceMappingURL=confluence-service.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confluence-service.test.js","sourceRoot":"","sources":["../../src/__tests__/confluence-service.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confluence-service.test.js","sourceRoot":"","sources":["../../src/__tests__/confluence-service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getConfluenceRuntimeConfig(): import("@atlassian-dc-mcp/common").ProductRuntimeConfig;
2
+ export declare function getDefaultPageSize(): number;
3
+ export declare function getMissingConfig(): string[];
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,wBAAgB,0BAA0B,4DAEzC;AAED,wBAAgB,kBAAkB,WAEjC;AAED,wBAAgB,gBAAgB,aAE/B"}
@@ -0,0 +1,11 @@
1
+ import { getProductRuntimeConfig, validateProductRuntimeConfig } from '@atlassian-dc-mcp/common';
2
+ export function getConfluenceRuntimeConfig() {
3
+ return getProductRuntimeConfig('confluence');
4
+ }
5
+ export function getDefaultPageSize() {
6
+ return getConfluenceRuntimeConfig().defaultPageSize;
7
+ }
8
+ export function getMissingConfig() {
9
+ return validateProductRuntimeConfig('confluence');
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,0BAA0B;IACxC,OAAO,uBAAuB,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,0BAA0B,EAAE,CAAC,eAAe,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,4BAA4B,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type ConfluenceBodyMode = 'storage' | 'text' | 'none';
2
+ export type ConfluenceMutationOutputMode = 'ack' | 'full';
3
+ export declare function confluenceStorageToText(storageValue: string): string;
4
+ export declare function shapeConfluenceContent(content: any, bodyMode?: ConfluenceBodyMode, maxBodyChars?: number): any;
5
+ export declare function shapeConfluenceMutationAck(content: any): {
6
+ url?: string | undefined;
7
+ version?: any;
8
+ spaceKey?: any;
9
+ title?: any;
10
+ type?: any;
11
+ id?: any;
12
+ };
13
+ //# sourceMappingURL=confluence-response-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluence-response-mapper.d.ts","sourceRoot":"","sources":["../src/confluence-response-mapper.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,4BAA4B,GAAG,KAAK,GAAG,MAAM,CAAC;AAgC1D,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAapE;AAiBD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAE,kBAA8B,EAAE,YAAY,CAAC,EAAE,MAAM,OA2BnH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,GAAG;;;;;;;EAWtD"}
@@ -0,0 +1,87 @@
1
+ const ENTITY_MAP = {
2
+ '&nbsp;': ' ',
3
+ '&amp;': '&',
4
+ '&lt;': '<',
5
+ '&gt;': '>',
6
+ '&quot;': '"',
7
+ '&#39;': "'",
8
+ };
9
+ function decodeHtmlEntities(value) {
10
+ return value
11
+ .replace(/&(nbsp|amp|lt|gt|quot);|&#39;/g, match => ENTITY_MAP[match] ?? match)
12
+ .replace(/&#(\d+);/g, (_, code) => {
13
+ const parsed = Number.parseInt(code, 10);
14
+ return Number.isNaN(parsed) ? '' : String.fromCodePoint(parsed);
15
+ });
16
+ }
17
+ function truncateText(value, maxBodyChars) {
18
+ if (maxBodyChars === undefined || maxBodyChars < 1 || value.length <= maxBodyChars) {
19
+ return { value };
20
+ }
21
+ return {
22
+ value: value.slice(0, maxBodyChars).trimEnd(),
23
+ truncated: true,
24
+ originalLength: value.length,
25
+ };
26
+ }
27
+ export function confluenceStorageToText(storageValue) {
28
+ const withLineBreaks = storageValue
29
+ .replace(/<br\s*\/?>/gi, '\n')
30
+ .replace(/<li\b[^>]*>/gi, '\n- ')
31
+ .replace(/<\/(?:p|div|h[1-6]|li|tr|td|th|blockquote|pre|ul|ol|table|section|article)\s*>/gi, '\n')
32
+ .replace(/<[^>]+>/g, ' ');
33
+ return decodeHtmlEntities(withLineBreaks)
34
+ .replace(/\r\n/g, '\n')
35
+ .replace(/[ \t]+\n/g, '\n')
36
+ .replace(/\n{3,}/g, '\n\n')
37
+ .replace(/[ \t]{2,}/g, ' ')
38
+ .trim();
39
+ }
40
+ function getContentUrl(content) {
41
+ const self = content?._links?.self;
42
+ if (typeof self === 'string') {
43
+ return self;
44
+ }
45
+ const base = content?._links?.base;
46
+ const webui = content?._links?.webui;
47
+ if (typeof base === 'string' && typeof webui === 'string') {
48
+ return `${base}${webui}`;
49
+ }
50
+ return undefined;
51
+ }
52
+ export function shapeConfluenceContent(content, bodyMode = 'storage', maxBodyChars) {
53
+ if (!content || typeof content !== 'object' || bodyMode === 'storage') {
54
+ return content;
55
+ }
56
+ const { body, ...rest } = content;
57
+ if (bodyMode === 'none') {
58
+ return rest;
59
+ }
60
+ const storageValue = typeof body?.storage?.value === 'string' ? body.storage.value : undefined;
61
+ if (storageValue === undefined) {
62
+ return rest;
63
+ }
64
+ const textBody = truncateText(confluenceStorageToText(storageValue), maxBodyChars);
65
+ return {
66
+ ...rest,
67
+ body: {
68
+ text: {
69
+ value: textBody.value,
70
+ representation: 'text',
71
+ ...(textBody.truncated ? { truncated: true, originalLength: textBody.originalLength } : {}),
72
+ },
73
+ },
74
+ };
75
+ }
76
+ export function shapeConfluenceMutationAck(content) {
77
+ const url = getContentUrl(content);
78
+ return {
79
+ ...(content?.id !== undefined ? { id: content.id } : {}),
80
+ ...(typeof content?.type === 'string' ? { type: content.type } : {}),
81
+ ...(typeof content?.title === 'string' ? { title: content.title } : {}),
82
+ ...(typeof content?.space?.key === 'string' ? { spaceKey: content.space.key } : {}),
83
+ ...(content?.version?.number !== undefined ? { version: content.version.number } : {}),
84
+ ...(url ? { url } : {}),
85
+ };
86
+ }
87
+ //# sourceMappingURL=confluence-response-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluence-response-mapper.js","sourceRoot":"","sources":["../src/confluence-response-mapper.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { ConfluenceBodyMode } from './confluence-response-mapper.js';
2
3
  /**
3
4
  * Escapes user input for safe use inside a CQL quoted string.
4
5
  * Escapes backslash first, then double quote, so that neither can break out of the phrase.
@@ -27,19 +28,26 @@ export interface ConfluenceContent {
27
28
  }>;
28
29
  }
29
30
  export declare class ConfluenceService {
31
+ private readonly getPageSize;
30
32
  /**
31
33
  * Creates a new ConfluenceService instance
32
34
  * @param host The hostname of the Confluence server (e.g., "host.com")
33
35
  * @param token The API token for authentication
34
36
  * @param fullApiUrl Optional full API URL (e.g., "https://host.com/wiki/"). If provided, host and apiBasePath are ignored.
35
37
  */
36
- constructor(host: string | undefined, token: string, fullApiUrl?: string);
38
+ constructor(host: string | undefined, token: string | (() => string | undefined), fullApiUrl?: string, getPageSize?: () => number);
37
39
  /**
38
40
  * Get a Confluence page by ID
39
41
  * @param contentId The ID of the page to retrieve
40
42
  * @param expand Optional comma-separated list of properties to expand
41
43
  */
42
- getContent(contentId: string, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./confluence-client/index.js").Content>>;
44
+ getContentRaw(contentId: string, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./confluence-client/index.js").Content>>;
45
+ getContent(contentId: string, expand?: string, bodyMode?: ConfluenceBodyMode, maxBodyChars?: number): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<import("./confluence-client/index.js").Content> | {
46
+ data: any;
47
+ success: boolean;
48
+ error?: string;
49
+ details?: any;
50
+ }>;
43
51
  /**
44
52
  * Search for content in Confluence using CQL
45
53
  * @param cql Confluence Query Language string
@@ -47,7 +55,7 @@ export declare class ConfluenceService {
47
55
  * @param start Start index for pagination
48
56
  * @param expand Optional comma-separated list of properties to expand
49
57
  */
50
- searchContent(cql: string, limit?: number, start?: number, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
58
+ searchContent(cql: string, limit?: number, start?: number, expand?: string, excerpt?: 'none' | 'highlight'): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
51
59
  results?: Array<import("./confluence-client/index.js").SearchResult>;
52
60
  totalCount?: number;
53
61
  start?: number;
@@ -79,7 +87,7 @@ export declare class ConfluenceService {
79
87
  * @param start Start index for pagination
80
88
  * @param expand Optional comma-separated list of properties to expand
81
89
  */
82
- searchSpaces(searchText: string, limit?: number, start?: number, expand?: string): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
90
+ searchSpaces(searchText: string, limit?: number, start?: number, expand?: string, excerpt?: 'none' | 'highlight'): Promise<import("@atlassian-dc-mcp/common").ApiErrorResponse<{
83
91
  results?: Array<import("./confluence-client/index.js").SearchResult>;
84
92
  totalCount?: number;
85
93
  start?: number;
@@ -99,12 +107,15 @@ export declare const confluenceToolSchemas: {
99
107
  getContent: {
100
108
  contentId: z.ZodString;
101
109
  expand: z.ZodOptional<z.ZodString>;
110
+ bodyMode: z.ZodOptional<z.ZodEnum<["storage", "text", "none"]>>;
111
+ maxBodyChars: z.ZodOptional<z.ZodNumber>;
102
112
  };
103
113
  searchContent: {
104
114
  cql: z.ZodString;
105
115
  limit: z.ZodOptional<z.ZodNumber>;
106
116
  start: z.ZodOptional<z.ZodNumber>;
107
117
  expand: z.ZodOptional<z.ZodString>;
118
+ excerpt: z.ZodOptional<z.ZodEnum<["none", "highlight"]>>;
108
119
  };
109
120
  createContent: {
110
121
  title: z.ZodString;
@@ -112,6 +123,7 @@ export declare const confluenceToolSchemas: {
112
123
  type: z.ZodDefault<z.ZodString>;
113
124
  content: z.ZodString;
114
125
  parentId: z.ZodOptional<z.ZodString>;
126
+ output: z.ZodOptional<z.ZodEnum<["ack", "full"]>>;
115
127
  };
116
128
  updateContent: {
117
129
  contentId: z.ZodString;
@@ -119,12 +131,14 @@ export declare const confluenceToolSchemas: {
119
131
  content: z.ZodOptional<z.ZodString>;
120
132
  version: z.ZodNumber;
121
133
  versionComment: z.ZodOptional<z.ZodString>;
134
+ output: z.ZodOptional<z.ZodEnum<["ack", "full"]>>;
122
135
  };
123
136
  searchSpaces: {
124
137
  searchText: z.ZodString;
125
138
  limit: z.ZodOptional<z.ZodNumber>;
126
139
  start: z.ZodOptional<z.ZodNumber>;
127
140
  expand: z.ZodOptional<z.ZodString>;
141
+ excerpt: z.ZodOptional<z.ZodEnum<["none", "highlight"]>>;
128
142
  };
129
143
  };
130
144
  //# sourceMappingURL=confluence-service.d.ts.map