agenza-line-bot-mcp 0.0.10 → 0.0.11
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/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import GetMessageQuota from "./tools/getMessageQuota.js";
|
|
|
28
28
|
import GetRichMenuList from "./tools/getRichMenuList.js";
|
|
29
29
|
import DeleteRichMenu from "./tools/deleteRichMenu.js";
|
|
30
30
|
import SetRichMenuDefault from "./tools/setRichMenuDefault.js";
|
|
31
|
-
import CreateRichMenu from "./tools/createRichMenu.js";
|
|
31
|
+
// import CreateRichMenu from "./tools/createRichMenu.js";
|
|
32
32
|
const server = new McpServer({
|
|
33
33
|
name: "line-bot",
|
|
34
34
|
version: LINE_BOT_MCP_SERVER_VERSION,
|
|
@@ -57,7 +57,7 @@ new GetRichMenuList(messagingApiClient).register(server);
|
|
|
57
57
|
new DeleteRichMenu(messagingApiClient).register(server);
|
|
58
58
|
new SetRichMenuDefault(messagingApiClient).register(server);
|
|
59
59
|
new CancelRichMenuDefault(messagingApiClient).register(server);
|
|
60
|
-
new CreateRichMenu(messagingApiClient, lineBlobClient).register(server);
|
|
60
|
+
// new CreateRichMenu(messagingApiClient, lineBlobClient).register(server);
|
|
61
61
|
async function main() {
|
|
62
62
|
if (!process.env.CHANNEL_ACCESS_TOKEN) {
|
|
63
63
|
console.error("Please set CHANNEL_ACCESS_TOKEN");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AACrE,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,kBAAkB,MAAM,+BAA+B,CAAC;AAC/D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1 @@
|
|
|
1
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import { messagingApi } from "@line/bot-sdk";
|
|
3
|
-
import { AbstractTool } from "./AbstractTool.js";
|
|
4
|
-
export default class CreateRichMenu extends AbstractTool {
|
|
5
|
-
private client;
|
|
6
|
-
private lineBlobClient;
|
|
7
|
-
constructor(client: messagingApi.MessagingApiClient, lineBlobClient: messagingApi.MessagingApiBlobClient);
|
|
8
|
-
register(server: McpServer): void;
|
|
9
|
-
}
|
|
10
1
|
//# sourceMappingURL=createRichMenu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRichMenu.d.ts","sourceRoot":"","sources":["../../src/tools/createRichMenu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createRichMenu.d.ts","sourceRoot":"","sources":["../../src/tools/createRichMenu.ts"],"names":[],"mappings":""}
|
|
@@ -1,278 +1,315 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
1
|
+
// import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
// import { messagingApi } from "@line/bot-sdk";
|
|
3
|
+
// import {
|
|
4
|
+
// createErrorResponse,
|
|
5
|
+
// createSuccessResponse,
|
|
6
|
+
// } from "../common/response.js";
|
|
7
|
+
// import { AbstractTool } from "./AbstractTool.js";
|
|
8
|
+
// import { z } from "zod";
|
|
9
|
+
// import { Marp } from "@marp-team/marp-core";
|
|
10
|
+
// import puppeteer from "puppeteer";
|
|
11
|
+
// import fs from "fs";
|
|
12
|
+
// import path from "path";
|
|
13
|
+
// import os from "os";
|
|
14
|
+
// import { fileURLToPath } from "url";
|
|
15
|
+
// import { actionSchema } from "../common/schema/actionSchema.js";
|
|
16
|
+
// import { promises as fsp } from "fs";
|
|
17
|
+
// const RICHMENU_HEIGHT = 910;
|
|
18
|
+
// const RICHMENU_WIDTH = 1600;
|
|
19
|
+
// export default class CreateRichMenu extends AbstractTool {
|
|
20
|
+
// private client: messagingApi.MessagingApiClient;
|
|
21
|
+
// private lineBlobClient: messagingApi.MessagingApiBlobClient;
|
|
22
|
+
// constructor(
|
|
23
|
+
// client: messagingApi.MessagingApiClient,
|
|
24
|
+
// lineBlobClient: messagingApi.MessagingApiBlobClient,
|
|
25
|
+
// ) {
|
|
26
|
+
// super();
|
|
27
|
+
// this.client = client;
|
|
28
|
+
// this.lineBlobClient = lineBlobClient;
|
|
29
|
+
// }
|
|
30
|
+
// register(server: McpServer) {
|
|
31
|
+
// server.tool(
|
|
32
|
+
// "create_rich_menu",
|
|
33
|
+
// "Create a rich menu based on the given actions. Generate and upload a rich menu image based on the given action. This rich menu will be registered as the default.",
|
|
34
|
+
// {
|
|
35
|
+
// chatBarText: z
|
|
36
|
+
// .string()
|
|
37
|
+
// .describe(
|
|
38
|
+
// "Text displayed in the chat bar and this is also used as name of the rich menu to create",
|
|
39
|
+
// ),
|
|
40
|
+
// actions: z
|
|
41
|
+
// .array(actionSchema)
|
|
42
|
+
// .min(1)
|
|
43
|
+
// .max(6)
|
|
44
|
+
// .describe("The actions of the rich menu."),
|
|
45
|
+
// },
|
|
46
|
+
// async ({ chatBarText, actions }) => {
|
|
47
|
+
// // Flow:
|
|
48
|
+
// // 1. Validate the rich menu image
|
|
49
|
+
// // 2. Create a rich menu
|
|
50
|
+
// // 3. Generate a rich menu image
|
|
51
|
+
// // 4. Upload the rich menu image
|
|
52
|
+
// // 5. Set the rich menu as the default rich menu
|
|
53
|
+
// let createRichMenuResponse: any = null;
|
|
54
|
+
// let setImageResponse: any = null;
|
|
55
|
+
// let setDefaultResponse: any = null;
|
|
56
|
+
// const lineActions = actions as messagingApi.Action[];
|
|
57
|
+
// try {
|
|
58
|
+
// // 1. Validate the rich menu image
|
|
59
|
+
// if (lineActions.length < 1 || lineActions.length > 6) {
|
|
60
|
+
// return createErrorResponse("Invalid actions length");
|
|
61
|
+
// }
|
|
62
|
+
// // 2. Create a rich menu
|
|
63
|
+
// const areas: Array<messagingApi.RichMenuArea> =
|
|
64
|
+
// richmenuAreas(lineActions);
|
|
65
|
+
// const createRichMenuParams = {
|
|
66
|
+
// name: chatBarText,
|
|
67
|
+
// chatBarText,
|
|
68
|
+
// selected: true,
|
|
69
|
+
// size: {
|
|
70
|
+
// width: RICHMENU_WIDTH,
|
|
71
|
+
// height: RICHMENU_HEIGHT,
|
|
72
|
+
// },
|
|
73
|
+
// areas,
|
|
74
|
+
// };
|
|
75
|
+
// createRichMenuResponse =
|
|
76
|
+
// await this.client.createRichMenu(createRichMenuParams);
|
|
77
|
+
// const richMenuId = createRichMenuResponse.richMenuId;
|
|
78
|
+
// // 3. Generate a rich menu image
|
|
79
|
+
// const richMenuImagePath = await generateRichMenuImage(lineActions);
|
|
80
|
+
// // 4. Upload the rich menu image
|
|
81
|
+
// const imageBuffer = fs.readFileSync(richMenuImagePath);
|
|
82
|
+
// const imageType = "image/png";
|
|
83
|
+
// const imageBlob = new Blob([imageBuffer], { type: imageType });
|
|
84
|
+
// setImageResponse = await this.lineBlobClient.setRichMenuImage(
|
|
85
|
+
// richMenuId,
|
|
86
|
+
// imageBlob,
|
|
87
|
+
// );
|
|
88
|
+
// // 5. Set the rich menu as the default rich menu
|
|
89
|
+
// setDefaultResponse = await this.client.setDefaultRichMenu(richMenuId);
|
|
90
|
+
// return createSuccessResponse({
|
|
91
|
+
// message: "Rich menu created successfully and set as default.",
|
|
92
|
+
// richMenuId,
|
|
93
|
+
// createRichMenuParams,
|
|
94
|
+
// createRichMenuResponse,
|
|
95
|
+
// setImageResponse,
|
|
96
|
+
// setDefaultResponse,
|
|
97
|
+
// richMenuImagePath,
|
|
98
|
+
// });
|
|
99
|
+
// } catch (error) {
|
|
100
|
+
// console.error("Rich menu creation error:", error);
|
|
101
|
+
// return createErrorResponse(
|
|
102
|
+
// JSON.stringify({
|
|
103
|
+
// error: error instanceof Error ? error.message : String(error),
|
|
104
|
+
// stack: error instanceof Error ? error.stack : undefined,
|
|
105
|
+
// createRichMenuResponse,
|
|
106
|
+
// setImageResponse,
|
|
107
|
+
// setDefaultResponse,
|
|
108
|
+
// }),
|
|
109
|
+
// );
|
|
110
|
+
// }
|
|
111
|
+
// },
|
|
112
|
+
// );
|
|
113
|
+
// }
|
|
114
|
+
// }
|
|
115
|
+
// const __filename = fileURLToPath(import.meta.url);
|
|
116
|
+
// const __dirname = path.dirname(__filename);
|
|
117
|
+
// // Function to generate a rich menu image from a Markdown template
|
|
118
|
+
// async function generateRichMenuImage(
|
|
119
|
+
// actions: messagingApi.Action[],
|
|
120
|
+
// ): Promise<string> {
|
|
121
|
+
// const templateNo = actions.length;
|
|
122
|
+
// // Flow:
|
|
123
|
+
// // 1. Read the Markdown template
|
|
124
|
+
// // 2. Convert Markdown to HTML using Marp
|
|
125
|
+
// // 3. Save the HTML as a temporary file
|
|
126
|
+
// // 4. Use puppeteer to convert HTML to PNG
|
|
127
|
+
// // 5. Delete the temporary HTML file
|
|
128
|
+
// const richMenuImagePath = path.join(
|
|
129
|
+
// os.tmpdir(),
|
|
130
|
+
// `template-0${templateNo}-${Date.now()}.png`,
|
|
131
|
+
// );
|
|
132
|
+
// const serverPath =
|
|
133
|
+
// process.env.SERVER_PATH || path.resolve(__dirname, "..", "..");
|
|
134
|
+
// // 1. Read the Markdown template
|
|
135
|
+
// const srcPath = path.join(
|
|
136
|
+
// serverPath,
|
|
137
|
+
// `richmenu-template/template-0${templateNo}.md`,
|
|
138
|
+
// );
|
|
139
|
+
// let content = await fsp.readFile(srcPath, "utf8");
|
|
140
|
+
// for (let index = 0; index < actions.length; index++) {
|
|
141
|
+
// const pattern = new RegExp(`<h3>item0${index + 1}</h3>`, "g");
|
|
142
|
+
// content = content.replace(pattern, `<h3>${actions[index].label}</h3>`);
|
|
143
|
+
// }
|
|
144
|
+
// // 2. Convert Markdown to HTML using Marp
|
|
145
|
+
// const marp = new Marp();
|
|
146
|
+
// const { html, css } = marp.render(content);
|
|
147
|
+
// // 3. Save the HTML as a temporary file with Japanese font support
|
|
148
|
+
// const htmlContent = `
|
|
149
|
+
// <!doctype html>
|
|
150
|
+
// <html lang="ja">
|
|
151
|
+
// <head>
|
|
152
|
+
// <meta charset="UTF-8">
|
|
153
|
+
// <style>
|
|
154
|
+
// ${css}
|
|
155
|
+
// * {
|
|
156
|
+
// font-family: 'Noto Sans JP', 'IPAexGothic', 'IPAexMincho', 'Noto Sans CJK JP', sans-serif !important;
|
|
157
|
+
// box-sizing: border-box;
|
|
158
|
+
// }
|
|
159
|
+
// html, body {
|
|
160
|
+
// margin: 0;
|
|
161
|
+
// padding: 0;
|
|
162
|
+
// height: ${RICHMENU_HEIGHT}px;
|
|
163
|
+
// overflow: hidden;
|
|
164
|
+
// }
|
|
165
|
+
// h3 {
|
|
166
|
+
// font-weight: 500;
|
|
167
|
+
// line-height: 1.4;
|
|
168
|
+
// margin: 0;
|
|
169
|
+
// padding: 0.4em 0;
|
|
170
|
+
// }
|
|
171
|
+
// </style>
|
|
172
|
+
// </head>
|
|
173
|
+
// <body>${html}</body>
|
|
174
|
+
// </html>
|
|
175
|
+
// `;
|
|
176
|
+
// const tempHtmlPath = path.join(
|
|
177
|
+
// os.tmpdir(),
|
|
178
|
+
// `temp_marp_slide_${Date.now()}.html`,
|
|
179
|
+
// );
|
|
180
|
+
// await fsp.writeFile(tempHtmlPath, htmlContent, "utf8");
|
|
181
|
+
// // 4. Use puppeteer to convert HTML to PNG with Docker-compatible settings
|
|
182
|
+
// const browser = await puppeteer.launch({
|
|
183
|
+
// headless: true,
|
|
184
|
+
// executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined,
|
|
185
|
+
// args: [
|
|
186
|
+
// "--no-sandbox",
|
|
187
|
+
// "--disable-setuid-sandbox",
|
|
188
|
+
// "--disable-dev-shm-usage",
|
|
189
|
+
// "--disable-gpu",
|
|
190
|
+
// "--disable-web-security",
|
|
191
|
+
// "--disable-features=VizDisplayCompositor",
|
|
192
|
+
// "--no-first-run",
|
|
193
|
+
// "--no-default-browser-check",
|
|
194
|
+
// "--disable-default-apps",
|
|
195
|
+
// "--disable-extensions",
|
|
196
|
+
// ],
|
|
197
|
+
// });
|
|
198
|
+
// const page = await browser.newPage();
|
|
199
|
+
// await page.setViewport({ width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT });
|
|
200
|
+
// await page.goto(`file://${tempHtmlPath}`, {
|
|
201
|
+
// waitUntil: "networkidle0",
|
|
202
|
+
// });
|
|
203
|
+
// // Wait for fonts to load
|
|
204
|
+
// await page.evaluate(() => document.fonts.ready);
|
|
205
|
+
// await new Promise(resolve => setTimeout(resolve, 2000));
|
|
206
|
+
// await page.screenshot({
|
|
207
|
+
// path: richMenuImagePath as `${string}.png`,
|
|
208
|
+
// clip: { x: 0, y: 0, width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT },
|
|
209
|
+
// });
|
|
210
|
+
// await browser.close();
|
|
211
|
+
// // Save image to output directory
|
|
212
|
+
// const outputPath = path.join("/tmp", path.basename(richMenuImagePath));
|
|
213
|
+
// try {
|
|
214
|
+
// await fsp.copyFile(richMenuImagePath, outputPath);
|
|
215
|
+
// } catch (error) {
|
|
216
|
+
// console.warn(`Failed to save image to output directory: ${error}`);
|
|
217
|
+
// } finally {
|
|
218
|
+
// // 5. Delete the temporary HTML file
|
|
219
|
+
// await fsp.unlink(tempHtmlPath);
|
|
220
|
+
// }
|
|
221
|
+
// return richMenuImagePath;
|
|
222
|
+
// }
|
|
223
|
+
// const richmenuAreas = (
|
|
224
|
+
// actions: messagingApi.Action[],
|
|
225
|
+
// ): messagingApi.RichMenuArea[] => {
|
|
226
|
+
// const bounds = richmenuBounds(actions.length);
|
|
227
|
+
// return actions.map((action, index) => {
|
|
228
|
+
// return {
|
|
229
|
+
// bounds: bounds[index],
|
|
230
|
+
// action: action,
|
|
231
|
+
// };
|
|
232
|
+
// });
|
|
233
|
+
// };
|
|
234
|
+
// const richmenuBounds = (actionCount: number) => {
|
|
235
|
+
// const boundsMap: { x: number; y: number; width: number; height: number }[][] =
|
|
236
|
+
// [
|
|
237
|
+
// [],
|
|
238
|
+
// // template-01
|
|
239
|
+
// [
|
|
240
|
+
// {
|
|
241
|
+
// x: 0,
|
|
242
|
+
// y: 0,
|
|
243
|
+
// width: RICHMENU_WIDTH,
|
|
244
|
+
// height: RICHMENU_HEIGHT,
|
|
245
|
+
// },
|
|
246
|
+
// ],
|
|
247
|
+
// // template-02
|
|
248
|
+
// [0, 1].map(i => ({
|
|
249
|
+
// x: (RICHMENU_WIDTH / 2) * i,
|
|
250
|
+
// y: 0,
|
|
251
|
+
// width: RICHMENU_WIDTH / 2,
|
|
252
|
+
// height: RICHMENU_HEIGHT,
|
|
253
|
+
// })),
|
|
254
|
+
// // template-03
|
|
255
|
+
// [
|
|
256
|
+
// {
|
|
257
|
+
// x: 0,
|
|
258
|
+
// y: 0,
|
|
259
|
+
// width: (RICHMENU_WIDTH / 3) * 2,
|
|
260
|
+
// height: RICHMENU_HEIGHT,
|
|
261
|
+
// },
|
|
262
|
+
// ...[0, 1].map(i => ({
|
|
263
|
+
// x: (RICHMENU_WIDTH / 3) * 2,
|
|
264
|
+
// y: (RICHMENU_HEIGHT / 3) * i,
|
|
265
|
+
// width: RICHMENU_WIDTH / 3,
|
|
266
|
+
// height: RICHMENU_HEIGHT / 2,
|
|
267
|
+
// })),
|
|
268
|
+
// ],
|
|
269
|
+
// // template-04
|
|
270
|
+
// [0, 1]
|
|
271
|
+
// .map(i =>
|
|
272
|
+
// [0, 1].map(j => ({
|
|
273
|
+
// x: (RICHMENU_WIDTH / 2) * i,
|
|
274
|
+
// y: (RICHMENU_HEIGHT / 2) * j,
|
|
275
|
+
// width: RICHMENU_WIDTH / 2,
|
|
276
|
+
// height: RICHMENU_HEIGHT / 2,
|
|
277
|
+
// })),
|
|
278
|
+
// )
|
|
279
|
+
// .flat(),
|
|
280
|
+
// // template-05
|
|
281
|
+
// [
|
|
282
|
+
// {
|
|
283
|
+
// x: 0,
|
|
284
|
+
// y: 0,
|
|
285
|
+
// width: (RICHMENU_WIDTH / 3) * 2,
|
|
286
|
+
// height: RICHMENU_HEIGHT / 2,
|
|
287
|
+
// },
|
|
288
|
+
// {
|
|
289
|
+
// x: (RICHMENU_WIDTH / 3) * 2,
|
|
290
|
+
// y: 0,
|
|
291
|
+
// width: RICHMENU_WIDTH / 3,
|
|
292
|
+
// height: RICHMENU_HEIGHT / 2,
|
|
293
|
+
// },
|
|
294
|
+
// ...[0, 1, 2].map(i => ({
|
|
295
|
+
// x: (RICHMENU_WIDTH / 3) * i,
|
|
296
|
+
// y: RICHMENU_HEIGHT / 2,
|
|
297
|
+
// width: RICHMENU_WIDTH / 3,
|
|
298
|
+
// height: RICHMENU_HEIGHT / 2,
|
|
299
|
+
// })),
|
|
300
|
+
// ],
|
|
301
|
+
// // template-06
|
|
302
|
+
// [0, 1]
|
|
303
|
+
// .map(i =>
|
|
304
|
+
// [0, 1, 2].map(j => ({
|
|
305
|
+
// x: (RICHMENU_WIDTH / 3) * j,
|
|
306
|
+
// y: (RICHMENU_HEIGHT / 2) * i,
|
|
307
|
+
// width: RICHMENU_WIDTH / 3,
|
|
308
|
+
// height: RICHMENU_HEIGHT / 2,
|
|
309
|
+
// })),
|
|
310
|
+
// )
|
|
311
|
+
// .flat(),
|
|
312
|
+
// ];
|
|
313
|
+
// return boundsMap[actionCount];
|
|
314
|
+
// };
|
|
278
315
|
//# sourceMappingURL=createRichMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRichMenu.js","sourceRoot":"","sources":["../../src/tools/createRichMenu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createRichMenu.js","sourceRoot":"","sources":["../../src/tools/createRichMenu.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agenza-line-bot-mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"description": "MCP server for interacting with LINE Official Account (Core features only - optimized for low memory)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": ">=20"
|
|
7
|
+
"node": ">=18 <=20"
|
|
8
8
|
},
|
|
9
9
|
"module": "./dist/index.js",
|
|
10
10
|
"bin": {
|
|
@@ -38,10 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@cfworker/json-schema": "^4.1.1",
|
|
40
40
|
"@line/bot-sdk": "^10.0.0",
|
|
41
|
-
"@marp-team/marp-cli": "^4.2.3",
|
|
42
|
-
"@marp-team/marp-core": "^4.1.0",
|
|
43
41
|
"@modelcontextprotocol/sdk": "^1.8.0",
|
|
44
|
-
"puppeteer": "^24.27.0",
|
|
45
42
|
"zod": "^3.25.76"
|
|
46
43
|
},
|
|
47
44
|
"devDependencies": {
|