dspot-trello-gantt 0.3.1 → 0.3.2
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/README.md +3 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +85 -41
- package/dist/mcp.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -137,6 +137,9 @@ Setting `GANTT_BOARD_ID` is recommended — without it the agent will ask for th
|
|
|
137
137
|
| Tool | Description |
|
|
138
138
|
|---|---|
|
|
139
139
|
| `generate_gantt` | Fetches a Trello board and generates a standalone Gantt HTML file |
|
|
140
|
+
| `publish_gantt` | Generates the Gantt HTML and publishes it to Google Apps Script |
|
|
141
|
+
|
|
142
|
+
`publish_gantt` requires `GAPPS_SCRIPT_ID` and `GAPPS_DEPLOYMENT_ID` in the environment.
|
|
140
143
|
|
|
141
144
|
## Programmatic usage
|
|
142
145
|
|
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,iEAAiE;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAiMjE,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
package/dist/mcp.js
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/** MCP server that generates Gantt charts from Trello boards. */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
3
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
7
|
exports.runMcpServer = runMcpServer;
|
|
5
8
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
6
9
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
7
10
|
const zod_1 = require("zod");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
8
12
|
const mapper_js_1 = require("./mapper.js");
|
|
9
13
|
const mermaid_js_1 = require("./mermaid.js");
|
|
10
14
|
const renderer_js_1 = require("./renderer.js");
|
|
11
15
|
const trello_js_1 = require("./trello.js");
|
|
12
16
|
const validator_js_1 = require("./validator.js");
|
|
13
17
|
const models_js_1 = require("./models.js");
|
|
18
|
+
const publisher_js_1 = require("./publisher.js");
|
|
14
19
|
function parseCsv(value) {
|
|
15
20
|
if (!value)
|
|
16
21
|
return [];
|
|
17
22
|
return value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
18
23
|
}
|
|
19
|
-
const
|
|
20
|
-
name: 'trello-gantt',
|
|
21
|
-
version: '0.3.0',
|
|
22
|
-
});
|
|
23
|
-
server.tool('generate_gantt', 'Generate a Mermaid Gantt chart HTML file from a Trello board.', {
|
|
24
|
+
const BOARD_PARAMS = {
|
|
24
25
|
board_id: zod_1.z
|
|
25
26
|
.string()
|
|
26
27
|
.optional()
|
|
@@ -38,49 +39,38 @@ server.tool('generate_gantt', 'Generate a Mermaid Gantt chart HTML file from a T
|
|
|
38
39
|
.string()
|
|
39
40
|
.optional()
|
|
40
41
|
.describe('Comma-separated list names to render as milestones.'),
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
.default('gantt.html')
|
|
45
|
-
.describe('Output HTML file path.'),
|
|
46
|
-
}, async ({ board_id, lists, title, milestone_list, output }) => {
|
|
47
|
-
const rawBoardId = board_id ?? process.env.GANTT_BOARD_ID;
|
|
42
|
+
};
|
|
43
|
+
async function buildHtml(params) {
|
|
44
|
+
const rawBoardId = params.board_id ?? process.env.GANTT_BOARD_ID;
|
|
48
45
|
if (!rawBoardId) {
|
|
49
|
-
return {
|
|
46
|
+
return { ok: false, error: 'board_id is required. Provide it as an argument or set GANTT_BOARD_ID in the environment.' };
|
|
50
47
|
}
|
|
51
48
|
let boardId;
|
|
52
49
|
try {
|
|
53
50
|
boardId = (0, trello_js_1.parseBoardId)(rawBoardId);
|
|
54
51
|
}
|
|
55
52
|
catch (err) {
|
|
56
|
-
return {
|
|
53
|
+
return { ok: false, error: `Error parsing board ID: ${err}` };
|
|
57
54
|
}
|
|
58
55
|
let fetchResult;
|
|
59
56
|
try {
|
|
60
|
-
fetchResult = await (0, trello_js_1.getCardsForLists)(boardId, parseCsv(lists));
|
|
57
|
+
fetchResult = await (0, trello_js_1.getCardsForLists)(boardId, parseCsv(params.lists));
|
|
61
58
|
}
|
|
62
59
|
catch (err) {
|
|
63
|
-
if (err instanceof trello_js_1.TrelloAuthError)
|
|
64
|
-
return {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return { content: [{ type: 'text', text: `Trello error: ${err.message}` }] };
|
|
71
|
-
}
|
|
72
|
-
return { content: [{ type: 'text', text: `Unexpected error: ${String(err)}` }] };
|
|
60
|
+
if (err instanceof trello_js_1.TrelloAuthError)
|
|
61
|
+
return { ok: false, error: `Authentication error: ${err.message}. Check TRELLO_API_KEY and TRELLO_API_TOKEN.` };
|
|
62
|
+
if (err instanceof trello_js_1.TrelloBoardNotFoundError)
|
|
63
|
+
return { ok: false, error: `Board not found: ${err.message}` };
|
|
64
|
+
if (err instanceof trello_js_1.TrelloDataError)
|
|
65
|
+
return { ok: false, error: `Trello error: ${err.message}` };
|
|
66
|
+
return { ok: false, error: `Unexpected error: ${String(err)}` };
|
|
73
67
|
}
|
|
74
|
-
const
|
|
68
|
+
const title = params.title ?? 'Project Gantt Chart';
|
|
69
|
+
const { tasks, warnings, stats, assigneeLegend } = (0, mapper_js_1.mapCardsToGanttTasks)(fetchResult.cardsByList, { milestoneLists: parseCsv(params.milestone_list) });
|
|
75
70
|
const allWarnings = [...fetchResult.warnings, ...warnings];
|
|
76
71
|
const report = (0, validator_js_1.validateTasks)(tasks, allWarnings, stats);
|
|
77
72
|
if ((0, models_js_1.hasErrors)(report)) {
|
|
78
|
-
return {
|
|
79
|
-
content: [{
|
|
80
|
-
type: 'text',
|
|
81
|
-
text: `Validation failed. HTML was not generated.\n\n${(0, validator_js_1.formatValidationReport)(report)}`,
|
|
82
|
-
}],
|
|
83
|
-
};
|
|
73
|
+
return { ok: false, error: `Validation failed.\n\n${(0, validator_js_1.formatValidationReport)(report)}` };
|
|
84
74
|
}
|
|
85
75
|
let boardName = boardId;
|
|
86
76
|
try {
|
|
@@ -88,7 +78,7 @@ server.tool('generate_gantt', 'Generate a Mermaid Gantt chart HTML file from a T
|
|
|
88
78
|
}
|
|
89
79
|
catch { /* fallback */ }
|
|
90
80
|
const mermaidSyntax = (0, mermaid_js_1.generateMermaidGantt)(tasks, title);
|
|
91
|
-
const
|
|
81
|
+
const html = (0, renderer_js_1.renderHtml)(mermaidSyntax, report, {
|
|
92
82
|
title,
|
|
93
83
|
boardId,
|
|
94
84
|
boardName,
|
|
@@ -96,20 +86,74 @@ server.tool('generate_gantt', 'Generate a Mermaid Gantt chart HTML file from a T
|
|
|
96
86
|
generatedAt: new Date().toISOString().replace(/\.\d{3}Z$/, ''),
|
|
97
87
|
assigneeLegend,
|
|
98
88
|
ganttTotalDays: (0, mermaid_js_1.ganttDateSpanDays)(tasks),
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
}, tasks);
|
|
90
|
+
return { ok: true, html, boardName, stats, warningCount: report.warnings.length, errorCount: report.errors.length };
|
|
91
|
+
}
|
|
92
|
+
// --- Server ---
|
|
93
|
+
const server = new mcp_js_1.McpServer({
|
|
94
|
+
name: 'trello-gantt',
|
|
95
|
+
version: '0.3.2',
|
|
96
|
+
});
|
|
97
|
+
// Tool: generate_gantt
|
|
98
|
+
server.tool('generate_gantt', 'Generate a Mermaid Gantt chart HTML file from a Trello board.', {
|
|
99
|
+
...BOARD_PARAMS,
|
|
100
|
+
output: zod_1.z
|
|
101
|
+
.string()
|
|
102
|
+
.optional()
|
|
103
|
+
.default('gantt.html')
|
|
104
|
+
.describe('Output HTML file path.'),
|
|
105
|
+
}, async ({ board_id, lists, title, milestone_list, output }) => {
|
|
106
|
+
const result = await buildHtml({ board_id, lists, title, milestone_list });
|
|
107
|
+
if (!result.ok)
|
|
108
|
+
return { content: [{ type: 'text', text: `Error: ${result.error}` }] };
|
|
109
|
+
const outputPath = (0, renderer_js_1.saveHtml)(result.html, output ?? 'gantt.html');
|
|
102
110
|
return {
|
|
103
111
|
content: [{
|
|
104
112
|
type: 'text',
|
|
105
113
|
text: [
|
|
106
114
|
'Gantt chart generated successfully.',
|
|
107
115
|
`Output: ${outputPath}`,
|
|
108
|
-
`Board: ${boardName}`,
|
|
109
|
-
`Cards processed: ${stats.totalCards}`,
|
|
110
|
-
`Tasks generated: ${stats.mappedTasks}`,
|
|
111
|
-
`Warnings: ${
|
|
112
|
-
|
|
116
|
+
`Board: ${result.boardName}`,
|
|
117
|
+
`Cards processed: ${result.stats.totalCards}`,
|
|
118
|
+
`Tasks generated: ${result.stats.mappedTasks}`,
|
|
119
|
+
`Warnings: ${result.warningCount}`,
|
|
120
|
+
].join('\n'),
|
|
121
|
+
}],
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
// Tool: publish_gantt
|
|
125
|
+
server.tool('publish_gantt', 'Generate a Gantt chart and publish it to Google Apps Script. Credentials are read from environment variables.', BOARD_PARAMS, async ({ board_id, lists, title, milestone_list }) => {
|
|
126
|
+
const scriptId = process.env.GAPPS_SCRIPT_ID ?? '';
|
|
127
|
+
const deploymentId = process.env.GAPPS_DEPLOYMENT_ID ?? '';
|
|
128
|
+
const allowedEmails = parseCsv(process.env.GAPPS_ALLOWED_EMAILS);
|
|
129
|
+
if (!scriptId)
|
|
130
|
+
return { content: [{ type: 'text', text: 'Error: GAPPS_SCRIPT_ID is not set in the environment.' }] };
|
|
131
|
+
if (!deploymentId)
|
|
132
|
+
return { content: [{ type: 'text', text: 'Error: GAPPS_DEPLOYMENT_ID is not set in the environment.' }] };
|
|
133
|
+
const result = await buildHtml({ board_id, lists, title, milestone_list });
|
|
134
|
+
if (!result.ok)
|
|
135
|
+
return { content: [{ type: 'text', text: `Error: ${result.error}` }] };
|
|
136
|
+
try {
|
|
137
|
+
await (0, publisher_js_1.publishToAppsScript)(result.html, {
|
|
138
|
+
scriptId,
|
|
139
|
+
deploymentId,
|
|
140
|
+
allowedEmails,
|
|
141
|
+
credentialsPath: path_1.default.join(process.cwd(), 'credentials', 'google_oauth_client.json'),
|
|
142
|
+
tokenPath: path_1.default.join(process.cwd(), 'credentials', 'token.json'),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
return { content: [{ type: 'text', text: `Publish error: ${err instanceof Error ? err.message : String(err)}` }] };
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
content: [{
|
|
150
|
+
type: 'text',
|
|
151
|
+
text: [
|
|
152
|
+
'Gantt chart published successfully.',
|
|
153
|
+
`Board: ${result.boardName}`,
|
|
154
|
+
`Cards processed: ${result.stats.totalCards}`,
|
|
155
|
+
`Tasks generated: ${result.stats.mappedTasks}`,
|
|
156
|
+
`URL: https://script.google.com/macros/s/${deploymentId}/exec`,
|
|
113
157
|
].join('\n'),
|
|
114
158
|
}],
|
|
115
159
|
};
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AAAA,iEAAiE
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|