@geeveeh/atlassian-tools 0.2.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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/dist/cli/confluence.d.ts +3 -0
  4. package/dist/cli/confluence.d.ts.map +1 -0
  5. package/dist/cli/confluence.js +209 -0
  6. package/dist/cli/confluence.js.map +1 -0
  7. package/dist/cli/helpers.d.ts +3 -0
  8. package/dist/cli/helpers.d.ts.map +1 -0
  9. package/dist/cli/helpers.js +24 -0
  10. package/dist/cli/helpers.js.map +1 -0
  11. package/dist/cli/index.d.ts +3 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +12 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/jira.d.ts +3 -0
  16. package/dist/cli/jira.d.ts.map +1 -0
  17. package/dist/cli/jira.js +264 -0
  18. package/dist/cli/jira.js.map +1 -0
  19. package/dist/confluence/client.d.ts +16 -0
  20. package/dist/confluence/client.d.ts.map +1 -0
  21. package/dist/confluence/client.js +92 -0
  22. package/dist/confluence/client.js.map +1 -0
  23. package/dist/confluence/index.d.ts +3 -0
  24. package/dist/confluence/index.d.ts.map +1 -0
  25. package/dist/confluence/index.js +3 -0
  26. package/dist/confluence/index.js.map +1 -0
  27. package/dist/confluence/types.d.ts +46 -0
  28. package/dist/confluence/types.d.ts.map +1 -0
  29. package/dist/confluence/types.js +2 -0
  30. package/dist/confluence/types.js.map +1 -0
  31. package/dist/core/auth.d.ts +3 -0
  32. package/dist/core/auth.d.ts.map +1 -0
  33. package/dist/core/auth.js +22 -0
  34. package/dist/core/auth.js.map +1 -0
  35. package/dist/core/client.d.ts +9 -0
  36. package/dist/core/client.d.ts.map +1 -0
  37. package/dist/core/client.js +40 -0
  38. package/dist/core/client.js.map +1 -0
  39. package/dist/core/index.d.ts +5 -0
  40. package/dist/core/index.d.ts.map +1 -0
  41. package/dist/core/index.js +5 -0
  42. package/dist/core/index.js.map +1 -0
  43. package/dist/core/markdown.d.ts +15 -0
  44. package/dist/core/markdown.d.ts.map +1 -0
  45. package/dist/core/markdown.js +83 -0
  46. package/dist/core/markdown.js.map +1 -0
  47. package/dist/core/types.d.ts +22 -0
  48. package/dist/core/types.d.ts.map +1 -0
  49. package/dist/core/types.js +12 -0
  50. package/dist/core/types.js.map +1 -0
  51. package/dist/jira/client.d.ts +18 -0
  52. package/dist/jira/client.d.ts.map +1 -0
  53. package/dist/jira/client.js +86 -0
  54. package/dist/jira/client.js.map +1 -0
  55. package/dist/jira/helpers.d.ts +5 -0
  56. package/dist/jira/helpers.d.ts.map +1 -0
  57. package/dist/jira/helpers.js +35 -0
  58. package/dist/jira/helpers.js.map +1 -0
  59. package/dist/jira/index.d.ts +4 -0
  60. package/dist/jira/index.d.ts.map +1 -0
  61. package/dist/jira/index.js +4 -0
  62. package/dist/jira/index.js.map +1 -0
  63. package/dist/jira/types.d.ts +68 -0
  64. package/dist/jira/types.d.ts.map +1 -0
  65. package/dist/jira/types.js +2 -0
  66. package/dist/jira/types.js.map +1 -0
  67. package/dist/mcp/index.d.ts +3 -0
  68. package/dist/mcp/index.d.ts.map +1 -0
  69. package/dist/mcp/index.js +367 -0
  70. package/dist/mcp/index.js.map +1 -0
  71. package/package.json +50 -0
@@ -0,0 +1,367 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ import { loadConfigFromEnv, AtlassianApiError } from "../core/index.js";
6
+ import { resolveBody } from "../core/markdown.js";
7
+ import { ConfluenceClient } from "../confluence/client.js";
8
+ import { JiraClient } from "../jira/client.js";
9
+ // ── Client singletons ─────────────────────────────────────────────
10
+ let _confluenceClient = null;
11
+ let _jiraClient = null;
12
+ function getConfluenceClient() {
13
+ if (!_confluenceClient) {
14
+ _confluenceClient = new ConfluenceClient(loadConfigFromEnv());
15
+ }
16
+ return _confluenceClient;
17
+ }
18
+ function getJiraClient() {
19
+ if (!_jiraClient) {
20
+ _jiraClient = new JiraClient(loadConfigFromEnv());
21
+ }
22
+ return _jiraClient;
23
+ }
24
+ function formatError(err) {
25
+ if (err instanceof AtlassianApiError) {
26
+ return `Atlassian API error ${err.statusCode}: ${err.message}${err.data ? "\n" + JSON.stringify(err.data, null, 2) : ""}`;
27
+ }
28
+ if (err instanceof Error)
29
+ return err.message;
30
+ return String(err);
31
+ }
32
+ // ── Server setup ───────────────────────────────────────────────────
33
+ const server = new McpServer({
34
+ name: "atlassian",
35
+ version: "0.2.0",
36
+ });
37
+ // ── Confluence tools ───────────────────────────────────────────────
38
+ server.tool("confluence_auth", "Verify the Confluence connection and list accessible spaces", {}, async () => {
39
+ try {
40
+ const spaces = await getConfluenceClient().verifyConnection();
41
+ const text = [
42
+ "Connected successfully.",
43
+ `Found ${spaces.length} space(s):`,
44
+ ...spaces.map((s) => `• ${s.name} [${s.key}] (id: ${s.id})`),
45
+ ].join("\n");
46
+ return { content: [{ type: "text", text }] };
47
+ }
48
+ catch (err) {
49
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
50
+ }
51
+ });
52
+ server.tool("confluence_list_spaces", "List available Confluence spaces", { limit: z.number().optional().describe("Max number of spaces to return (default 25)") }, async ({ limit }) => {
53
+ try {
54
+ const spaces = await getConfluenceClient().listSpaces(limit ?? 25);
55
+ const text = spaces
56
+ .map((s) => `${s.name} [${s.key}] (id: ${s.id}, ${s.status})`)
57
+ .join("\n");
58
+ return { content: [{ type: "text", text: text || "No spaces found." }] };
59
+ }
60
+ catch (err) {
61
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
62
+ }
63
+ });
64
+ server.tool("confluence_read_page", "Read a Confluence page by its ID, returning title, metadata, and body content", { pageId: z.string().describe("The Confluence page ID") }, async ({ pageId }) => {
65
+ try {
66
+ const page = await getConfluenceClient().getPage(pageId);
67
+ const text = [
68
+ `Title: ${page.title}`,
69
+ `ID: ${page.id}`,
70
+ `Status: ${page.status}`,
71
+ `Version: ${page.version.number}`,
72
+ `Space ID: ${page.spaceId}`,
73
+ "",
74
+ "--- Body (storage format) ---",
75
+ page.body?.storage?.value ?? "(empty)",
76
+ ].join("\n");
77
+ return { content: [{ type: "text", text }] };
78
+ }
79
+ catch (err) {
80
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
81
+ }
82
+ });
83
+ server.tool("confluence_search_pages", "Search for pages in a Confluence space by title", {
84
+ spaceKey: z.string().describe("The space key (e.g. 'DEV', 'HR')"),
85
+ title: z.string().optional().describe("Filter by page title (partial match)"),
86
+ limit: z.number().optional().describe("Max results (default 25)"),
87
+ }, async ({ spaceKey, title, limit }) => {
88
+ try {
89
+ const pages = await getConfluenceClient().searchPages({ spaceKey, title, limit });
90
+ if (pages.length === 0) {
91
+ return { content: [{ type: "text", text: "No pages found." }] };
92
+ }
93
+ const text = pages
94
+ .map((p) => `${p.title} (id: ${p.id}, v${p.version?.number ?? "?"})`)
95
+ .join("\n");
96
+ return { content: [{ type: "text", text }] };
97
+ }
98
+ catch (err) {
99
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
100
+ }
101
+ });
102
+ server.tool("confluence_create_page", "Create a new Confluence page. IMPORTANT: Ask the user for confirmation before calling this tool.", {
103
+ spaceKey: z.string().describe("The space key to create the page in"),
104
+ title: z.string().describe("Page title"),
105
+ body: z.string().describe("Page content in Markdown or Confluence storage format (XHTML)"),
106
+ parentId: z.string().optional().describe("Parent page ID (omit for top-level)"),
107
+ draft: z.boolean().optional().describe("Create as draft instead of published"),
108
+ }, async ({ spaceKey, title, body, parentId, draft }) => {
109
+ try {
110
+ const client = getConfluenceClient();
111
+ const space = await client.getSpaceByKey(spaceKey);
112
+ const resolvedBody = await resolveBody(body);
113
+ const page = await client.createPage({
114
+ spaceId: space.id,
115
+ title,
116
+ body: resolvedBody,
117
+ parentId,
118
+ status: draft ? "draft" : "current",
119
+ });
120
+ const baseUrl = process.env.ATLASSIAN_URL ?? process.env.CONFLUENCE_URL?.replace(/\/wiki\/?$/, "") ?? "";
121
+ const text = [
122
+ `✓ Page created successfully.`,
123
+ ` Title: ${page.title}`,
124
+ ` ID: ${page.id}`,
125
+ ` Space: ${space.name} [${space.key}]`,
126
+ ` Status: ${page.status}`,
127
+ ` URL: ${baseUrl}/wiki/pages/${page.id}`,
128
+ ].join("\n");
129
+ return { content: [{ type: "text", text }] };
130
+ }
131
+ catch (err) {
132
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
133
+ }
134
+ });
135
+ server.tool("confluence_update_page", "Update an existing Confluence page. IMPORTANT: Ask the user for confirmation before calling this tool.", {
136
+ pageId: z.string().describe("The page ID to update"),
137
+ title: z.string().optional().describe("New title (omit to keep current)"),
138
+ body: z.string().optional().describe("New content in Markdown or Confluence storage format"),
139
+ versionMessage: z.string().optional().describe("Version change message"),
140
+ }, async ({ pageId, title, body, versionMessage }) => {
141
+ try {
142
+ const resolvedBody = body ? await resolveBody(body) : undefined;
143
+ const page = await getConfluenceClient().updatePage({
144
+ pageId,
145
+ title,
146
+ body: resolvedBody,
147
+ versionMessage,
148
+ });
149
+ const baseUrl = process.env.ATLASSIAN_URL ?? process.env.CONFLUENCE_URL?.replace(/\/wiki\/?$/, "") ?? "";
150
+ const text = [
151
+ `✓ Page updated successfully.`,
152
+ ` Title: ${page.title}`,
153
+ ` ID: ${page.id}`,
154
+ ` Version: ${page.version.number}`,
155
+ ` URL: ${baseUrl}/wiki/pages/${page.id}`,
156
+ ].join("\n");
157
+ return { content: [{ type: "text", text }] };
158
+ }
159
+ catch (err) {
160
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
161
+ }
162
+ });
163
+ server.tool("confluence_delete_page", "Delete a Confluence page. IMPORTANT: Ask the user for confirmation before calling this tool.", { pageId: z.string().describe("The page ID to delete") }, async ({ pageId }) => {
164
+ try {
165
+ const client = getConfluenceClient();
166
+ const page = await client.getPage(pageId);
167
+ await client.deletePage(pageId);
168
+ return {
169
+ content: [
170
+ { type: "text", text: `✓ Deleted page "${page.title}" (id: ${pageId})` },
171
+ ],
172
+ };
173
+ }
174
+ catch (err) {
175
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
176
+ }
177
+ });
178
+ // ── Jira tools ─────────────────────────────────────────────────────
179
+ server.tool("jira_auth", "Verify the Jira connection and list accessible projects", {}, async () => {
180
+ try {
181
+ const projects = await getJiraClient().verifyConnection();
182
+ const text = [
183
+ "Connected successfully.",
184
+ `Found ${projects.length} project(s):`,
185
+ ...projects.map((p) => `• ${p.name} [${p.key}] (id: ${p.id})`),
186
+ ].join("\n");
187
+ return { content: [{ type: "text", text }] };
188
+ }
189
+ catch (err) {
190
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
191
+ }
192
+ });
193
+ server.tool("jira_list_projects", "List available Jira projects", { limit: z.number().optional().describe("Max number of projects to return (default 25)") }, async ({ limit }) => {
194
+ try {
195
+ const projects = await getJiraClient().listProjects(limit ?? 25);
196
+ const text = projects
197
+ .map((p) => `${p.name} [${p.key}] (id: ${p.id})`)
198
+ .join("\n");
199
+ return { content: [{ type: "text", text: text || "No projects found." }] };
200
+ }
201
+ catch (err) {
202
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
203
+ }
204
+ });
205
+ server.tool("jira_get_issue", "Get a Jira issue by key, returning summary, status, assignee, and description", { issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
206
+ try {
207
+ const client = getJiraClient();
208
+ const issue = await client.getIssue(issueKey);
209
+ const desc = client.descriptionToText(issue);
210
+ const baseUrl = process.env.ATLASSIAN_URL ?? process.env.CONFLUENCE_URL?.replace(/\/wiki\/?$/, "") ?? "";
211
+ const text = [
212
+ `Key: ${issue.key}`,
213
+ `Summary: ${issue.fields.summary}`,
214
+ `Type: ${issue.fields.issuetype.name}`,
215
+ `Status: ${issue.fields.status.name}`,
216
+ `Priority: ${issue.fields.priority?.name ?? "—"}`,
217
+ `Assignee: ${issue.fields.assignee?.displayName ?? "Unassigned"}`,
218
+ `Reporter: ${issue.fields.reporter?.displayName ?? "—"}`,
219
+ `Labels: ${issue.fields.labels?.join(", ") || "—"}`,
220
+ `Created: ${issue.fields.created}`,
221
+ `Updated: ${issue.fields.updated}`,
222
+ `URL: ${baseUrl}/browse/${issue.key}`,
223
+ "",
224
+ "--- Description ---",
225
+ desc || "(empty)",
226
+ ].join("\n");
227
+ return { content: [{ type: "text", text }] };
228
+ }
229
+ catch (err) {
230
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
231
+ }
232
+ });
233
+ server.tool("jira_search_issues", "Search for Jira issues using JQL or filters", {
234
+ jql: z.string().optional().describe("Raw JQL query (overrides other filters)"),
235
+ project: z.string().optional().describe("Filter by project key"),
236
+ status: z.string().optional().describe("Filter by status name"),
237
+ assignee: z.string().optional().describe("Filter by assignee name"),
238
+ type: z.string().optional().describe("Filter by issue type (Bug, Task, Story, etc.)"),
239
+ limit: z.number().optional().describe("Max results (default 25)"),
240
+ }, async ({ jql, project, status, assignee, type, limit }) => {
241
+ try {
242
+ const issues = await getJiraClient().searchIssues({
243
+ jql, project, status, assignee, type, limit,
244
+ });
245
+ if (issues.length === 0) {
246
+ return { content: [{ type: "text", text: "No issues found." }] };
247
+ }
248
+ const text = issues
249
+ .map((i) => `${i.key} — ${i.fields.summary} [${i.fields.status.name}] (${i.fields.issuetype.name}, ${i.fields.assignee?.displayName ?? "Unassigned"})`)
250
+ .join("\n");
251
+ return { content: [{ type: "text", text }] };
252
+ }
253
+ catch (err) {
254
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
255
+ }
256
+ });
257
+ server.tool("jira_create_issue", "Create a new Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
258
+ projectKey: z.string().describe("The project key (e.g. 'PROJ')"),
259
+ issueType: z.string().describe("Issue type (Bug, Task, Story, Epic, etc.)"),
260
+ summary: z.string().describe("Issue summary/title"),
261
+ description: z.string().optional().describe("Issue description (plain text)"),
262
+ priority: z.string().optional().describe("Priority (Highest, High, Medium, Low, Lowest)"),
263
+ labels: z.array(z.string()).optional().describe("Labels to apply"),
264
+ }, async ({ projectKey, issueType, summary, description, priority, labels }) => {
265
+ try {
266
+ const client = getJiraClient();
267
+ const issue = await client.createIssue({
268
+ projectKey, issueType, summary, description, priority, labels,
269
+ });
270
+ const baseUrl = process.env.ATLASSIAN_URL ?? process.env.CONFLUENCE_URL?.replace(/\/wiki\/?$/, "") ?? "";
271
+ const text = [
272
+ `✓ Issue created successfully.`,
273
+ ` Key: ${issue.key}`,
274
+ ` Summary: ${issue.fields.summary}`,
275
+ ` Type: ${issue.fields.issuetype.name}`,
276
+ ` Status: ${issue.fields.status.name}`,
277
+ ` URL: ${baseUrl}/browse/${issue.key}`,
278
+ ].join("\n");
279
+ return { content: [{ type: "text", text }] };
280
+ }
281
+ catch (err) {
282
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
283
+ }
284
+ });
285
+ server.tool("jira_update_issue", "Update an existing Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
286
+ issueKey: z.string().describe("The issue key to update (e.g. 'PROJ-123')"),
287
+ summary: z.string().optional().describe("New summary/title"),
288
+ description: z.string().optional().describe("New description (plain text)"),
289
+ priority: z.string().optional().describe("New priority"),
290
+ labels: z.array(z.string()).optional().describe("New labels (replaces existing)"),
291
+ }, async ({ issueKey, summary, description, priority, labels }) => {
292
+ try {
293
+ const client = getJiraClient();
294
+ const issue = await client.updateIssue({
295
+ issueKey, summary, description, priority, labels,
296
+ });
297
+ const baseUrl = process.env.ATLASSIAN_URL ?? process.env.CONFLUENCE_URL?.replace(/\/wiki\/?$/, "") ?? "";
298
+ const text = [
299
+ `✓ Issue updated successfully.`,
300
+ ` Key: ${issue.key}`,
301
+ ` Summary: ${issue.fields.summary}`,
302
+ ` Status: ${issue.fields.status.name}`,
303
+ ` URL: ${baseUrl}/browse/${issue.key}`,
304
+ ].join("\n");
305
+ return { content: [{ type: "text", text }] };
306
+ }
307
+ catch (err) {
308
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
309
+ }
310
+ });
311
+ server.tool("jira_transition_issue", "Transition a Jira issue to a new status. IMPORTANT: Ask the user for confirmation before calling this tool.", {
312
+ issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')"),
313
+ transitionName: z.string().optional().describe("Target transition name (omit to list available transitions)"),
314
+ }, async ({ issueKey, transitionName }) => {
315
+ try {
316
+ const client = getJiraClient();
317
+ const transitions = await client.getTransitions(issueKey);
318
+ if (!transitionName) {
319
+ const text = [
320
+ `Available transitions for ${issueKey}:`,
321
+ ...transitions.map((t) => `• ${t.name} → ${t.to.name} (id: ${t.id})`),
322
+ ].join("\n");
323
+ return { content: [{ type: "text", text }] };
324
+ }
325
+ const match = transitions.find((t) => t.name.toLowerCase() === transitionName.toLowerCase());
326
+ if (!match) {
327
+ const available = transitions.map((t) => `${t.name} → ${t.to.name}`).join(", ");
328
+ return {
329
+ content: [{ type: "text", text: `No transition named "${transitionName}". Available: ${available}` }],
330
+ isError: true,
331
+ };
332
+ }
333
+ await client.transitionIssue(issueKey, match.id);
334
+ return {
335
+ content: [{ type: "text", text: `✓ Transitioned ${issueKey} → ${match.to.name}` }],
336
+ };
337
+ }
338
+ catch (err) {
339
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
340
+ }
341
+ });
342
+ server.tool("jira_delete_issue", "Delete a Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", { issueKey: z.string().describe("The issue key to delete (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
343
+ try {
344
+ const client = getJiraClient();
345
+ const issue = await client.getIssue(issueKey);
346
+ await client.deleteIssue(issueKey);
347
+ return {
348
+ content: [
349
+ { type: "text", text: `✓ Deleted issue ${issueKey} "${issue.fields.summary}"` },
350
+ ],
351
+ };
352
+ }
353
+ catch (err) {
354
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
355
+ }
356
+ });
357
+ // ── Start ──────────────────────────────────────────────────────────
358
+ async function main() {
359
+ const transport = new StdioServerTransport();
360
+ await server.connect(transport);
361
+ console.error("Atlassian MCP server running on stdio");
362
+ }
363
+ main().catch((err) => {
364
+ console.error("Fatal:", err);
365
+ process.exit(1);
366
+ });
367
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@geeveeh/atlassian-tools",
3
+ "version": "0.2.0",
4
+ "description": "CLI and MCP server for Atlassian Cloud (Confluence, Jira) — manage pages and issues from your terminal or AI agent.",
5
+ "author": "GeeveeH Software",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "bin": {
9
+ "atlassian": "./dist/cli/index.js",
10
+ "atlassian-mcp": "./dist/mcp/index.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "README.md",
15
+ "LICENSE"
16
+ ],
17
+ "exports": {
18
+ ".": "./dist/core/index.js",
19
+ "./confluence": "./dist/confluence/index.js",
20
+ "./jira": "./dist/jira/index.js",
21
+ "./mcp": "./dist/mcp/index.js"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "dev:cli": "tsx src/cli/index.ts",
26
+ "dev:mcp": "tsx src/mcp/index.ts",
27
+ "lint": "eslint src/",
28
+ "test": "vitest run",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "dependencies": {
32
+ "commander": "^13.1.0",
33
+ "chalk": "^5.4.1",
34
+ "@modelcontextprotocol/sdk": "^1.12.1",
35
+ "zod": "^3.24.4"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^22.15.0",
39
+ "tsx": "^4.19.0",
40
+ "typescript": "^5.8.0",
41
+ "vitest": "^3.1.0",
42
+ "eslint": "^9.20.0"
43
+ },
44
+ "engines": {
45
+ "node": ">=20"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ }
50
+ }