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":"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"}
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,0DAA0D;AAE1D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,2BAA2B;CACrC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;AAClE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;AAE5D,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAClE,kBAAkB,EAAE,kBAAkB;IACtC,cAAc,EAAE;QACd,YAAY,EAAE,UAAU;KACzB;CACF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC;IAClE,kBAAkB,EAAE,kBAAkB;IACtC,cAAc,EAAE;QACd,YAAY,EAAE,UAAU;KACzB;CACF,CAAC,CAAC;AAEH,IAAI,eAAe,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,IAAI,eAAe,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9D,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9D,IAAI,UAAU,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnE,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzD,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzD,IAAI,cAAc,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxD,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5D,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/D,2EAA2E;AAE3E,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAcjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY;IACtD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAsC;gBAG1D,MAAM,EAAE,YAAY,CAAC,kBAAkB,EACvC,cAAc,EAAE,YAAY,CAAC,sBAAsB;IAOrD,QAAQ,CAAC,MAAM,EAAE,SAAS;CAyF3B"}
1
+ {"version":3,"file":"createRichMenu.d.ts","sourceRoot":"","sources":["../../src/tools/createRichMenu.ts"],"names":[],"mappings":""}
@@ -1,278 +1,315 @@
1
- import { createErrorResponse, createSuccessResponse, } from "../common/response.js";
2
- import { AbstractTool } from "./AbstractTool.js";
3
- import { z } from "zod";
4
- import { Marp } from "@marp-team/marp-core";
5
- import puppeteer from "puppeteer";
6
- import fs from "fs";
7
- import path from "path";
8
- import os from "os";
9
- import { fileURLToPath } from "url";
10
- import { actionSchema } from "../common/schema/actionSchema.js";
11
- import { promises as fsp } from "fs";
12
- const RICHMENU_HEIGHT = 910;
13
- const RICHMENU_WIDTH = 1600;
14
- export default class CreateRichMenu extends AbstractTool {
15
- client;
16
- lineBlobClient;
17
- constructor(client, lineBlobClient) {
18
- super();
19
- this.client = client;
20
- this.lineBlobClient = lineBlobClient;
21
- }
22
- register(server) {
23
- server.tool("create_rich_menu", "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.", {
24
- chatBarText: z
25
- .string()
26
- .describe("Text displayed in the chat bar and this is also used as name of the rich menu to create"),
27
- actions: z
28
- .array(actionSchema)
29
- .min(1)
30
- .max(6)
31
- .describe("The actions of the rich menu."),
32
- }, async ({ chatBarText, actions }) => {
33
- // Flow:
34
- // 1. Validate the rich menu image
35
- // 2. Create a rich menu
36
- // 3. Generate a rich menu image
37
- // 4. Upload the rich menu image
38
- // 5. Set the rich menu as the default rich menu
39
- let createRichMenuResponse = null;
40
- let setImageResponse = null;
41
- let setDefaultResponse = null;
42
- const lineActions = actions;
43
- try {
44
- // 1. Validate the rich menu image
45
- if (lineActions.length < 1 || lineActions.length > 6) {
46
- return createErrorResponse("Invalid actions length");
47
- }
48
- // 2. Create a rich menu
49
- const areas = richmenuAreas(lineActions);
50
- const createRichMenuParams = {
51
- name: chatBarText,
52
- chatBarText,
53
- selected: true,
54
- size: {
55
- width: RICHMENU_WIDTH,
56
- height: RICHMENU_HEIGHT,
57
- },
58
- areas,
59
- };
60
- createRichMenuResponse =
61
- await this.client.createRichMenu(createRichMenuParams);
62
- const richMenuId = createRichMenuResponse.richMenuId;
63
- // 3. Generate a rich menu image
64
- const richMenuImagePath = await generateRichMenuImage(lineActions);
65
- // 4. Upload the rich menu image
66
- const imageBuffer = fs.readFileSync(richMenuImagePath);
67
- const imageType = "image/png";
68
- const imageBlob = new Blob([imageBuffer], { type: imageType });
69
- setImageResponse = await this.lineBlobClient.setRichMenuImage(richMenuId, imageBlob);
70
- // 5. Set the rich menu as the default rich menu
71
- setDefaultResponse = await this.client.setDefaultRichMenu(richMenuId);
72
- return createSuccessResponse({
73
- message: "Rich menu created successfully and set as default.",
74
- richMenuId,
75
- createRichMenuParams,
76
- createRichMenuResponse,
77
- setImageResponse,
78
- setDefaultResponse,
79
- richMenuImagePath,
80
- });
81
- }
82
- catch (error) {
83
- console.error("Rich menu creation error:", error);
84
- return createErrorResponse(JSON.stringify({
85
- error: error instanceof Error ? error.message : String(error),
86
- stack: error instanceof Error ? error.stack : undefined,
87
- createRichMenuResponse,
88
- setImageResponse,
89
- setDefaultResponse,
90
- }));
91
- }
92
- });
93
- }
94
- }
95
- const __filename = fileURLToPath(import.meta.url);
96
- const __dirname = path.dirname(__filename);
97
- // Function to generate a rich menu image from a Markdown template
98
- async function generateRichMenuImage(actions) {
99
- const templateNo = actions.length;
100
- // Flow:
101
- // 1. Read the Markdown template
102
- // 2. Convert Markdown to HTML using Marp
103
- // 3. Save the HTML as a temporary file
104
- // 4. Use puppeteer to convert HTML to PNG
105
- // 5. Delete the temporary HTML file
106
- const richMenuImagePath = path.join(os.tmpdir(), `template-0${templateNo}-${Date.now()}.png`);
107
- const serverPath = process.env.SERVER_PATH || path.resolve(__dirname, "..", "..");
108
- // 1. Read the Markdown template
109
- const srcPath = path.join(serverPath, `richmenu-template/template-0${templateNo}.md`);
110
- let content = await fsp.readFile(srcPath, "utf8");
111
- for (let index = 0; index < actions.length; index++) {
112
- const pattern = new RegExp(`<h3>item0${index + 1}</h3>`, "g");
113
- content = content.replace(pattern, `<h3>${actions[index].label}</h3>`);
114
- }
115
- // 2. Convert Markdown to HTML using Marp
116
- const marp = new Marp();
117
- const { html, css } = marp.render(content);
118
- // 3. Save the HTML as a temporary file with Japanese font support
119
- const htmlContent = `
120
- <!doctype html>
121
- <html lang="ja">
122
- <head>
123
- <meta charset="UTF-8">
124
- <style>
125
- ${css}
126
- * {
127
- font-family: 'Noto Sans JP', 'IPAexGothic', 'IPAexMincho', 'Noto Sans CJK JP', sans-serif !important;
128
- box-sizing: border-box;
129
- }
130
- html, body {
131
- margin: 0;
132
- padding: 0;
133
- height: ${RICHMENU_HEIGHT}px;
134
- overflow: hidden;
135
- }
136
- h3 {
137
- font-weight: 500;
138
- line-height: 1.4;
139
- margin: 0;
140
- padding: 0.4em 0;
141
- }
142
- </style>
143
- </head>
144
- <body>${html}</body>
145
- </html>
146
- `;
147
- const tempHtmlPath = path.join(os.tmpdir(), `temp_marp_slide_${Date.now()}.html`);
148
- await fsp.writeFile(tempHtmlPath, htmlContent, "utf8");
149
- // 4. Use puppeteer to convert HTML to PNG with Docker-compatible settings
150
- const browser = await puppeteer.launch({
151
- headless: true,
152
- executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined,
153
- args: [
154
- "--no-sandbox",
155
- "--disable-setuid-sandbox",
156
- "--disable-dev-shm-usage",
157
- "--disable-gpu",
158
- "--disable-web-security",
159
- "--disable-features=VizDisplayCompositor",
160
- "--no-first-run",
161
- "--no-default-browser-check",
162
- "--disable-default-apps",
163
- "--disable-extensions",
164
- ],
165
- });
166
- const page = await browser.newPage();
167
- await page.setViewport({ width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT });
168
- await page.goto(`file://${tempHtmlPath}`, {
169
- waitUntil: "networkidle0",
170
- });
171
- // Wait for fonts to load
172
- await page.evaluate(() => document.fonts.ready);
173
- await new Promise(resolve => setTimeout(resolve, 2000));
174
- await page.screenshot({
175
- path: richMenuImagePath,
176
- clip: { x: 0, y: 0, width: RICHMENU_WIDTH, height: RICHMENU_HEIGHT },
177
- });
178
- await browser.close();
179
- // Save image to output directory
180
- const outputPath = path.join("/tmp", path.basename(richMenuImagePath));
181
- try {
182
- await fsp.copyFile(richMenuImagePath, outputPath);
183
- }
184
- catch (error) {
185
- console.warn(`Failed to save image to output directory: ${error}`);
186
- }
187
- finally {
188
- // 5. Delete the temporary HTML file
189
- await fsp.unlink(tempHtmlPath);
190
- }
191
- return richMenuImagePath;
192
- }
193
- const richmenuAreas = (actions) => {
194
- const bounds = richmenuBounds(actions.length);
195
- return actions.map((action, index) => {
196
- return {
197
- bounds: bounds[index],
198
- action: action,
199
- };
200
- });
201
- };
202
- const richmenuBounds = (actionCount) => {
203
- const boundsMap = [
204
- [],
205
- // template-01
206
- [
207
- {
208
- x: 0,
209
- y: 0,
210
- width: RICHMENU_WIDTH,
211
- height: RICHMENU_HEIGHT,
212
- },
213
- ],
214
- // template-02
215
- [0, 1].map(i => ({
216
- x: (RICHMENU_WIDTH / 2) * i,
217
- y: 0,
218
- width: RICHMENU_WIDTH / 2,
219
- height: RICHMENU_HEIGHT,
220
- })),
221
- // template-03
222
- [
223
- {
224
- x: 0,
225
- y: 0,
226
- width: (RICHMENU_WIDTH / 3) * 2,
227
- height: RICHMENU_HEIGHT,
228
- },
229
- ...[0, 1].map(i => ({
230
- x: (RICHMENU_WIDTH / 3) * 2,
231
- y: (RICHMENU_HEIGHT / 3) * i,
232
- width: RICHMENU_WIDTH / 3,
233
- height: RICHMENU_HEIGHT / 2,
234
- })),
235
- ],
236
- // template-04
237
- [0, 1]
238
- .map(i => [0, 1].map(j => ({
239
- x: (RICHMENU_WIDTH / 2) * i,
240
- y: (RICHMENU_HEIGHT / 2) * j,
241
- width: RICHMENU_WIDTH / 2,
242
- height: RICHMENU_HEIGHT / 2,
243
- })))
244
- .flat(),
245
- // template-05
246
- [
247
- {
248
- x: 0,
249
- y: 0,
250
- width: (RICHMENU_WIDTH / 3) * 2,
251
- height: RICHMENU_HEIGHT / 2,
252
- },
253
- {
254
- x: (RICHMENU_WIDTH / 3) * 2,
255
- y: 0,
256
- width: RICHMENU_WIDTH / 3,
257
- height: RICHMENU_HEIGHT / 2,
258
- },
259
- ...[0, 1, 2].map(i => ({
260
- x: (RICHMENU_WIDTH / 3) * i,
261
- y: RICHMENU_HEIGHT / 2,
262
- width: RICHMENU_WIDTH / 3,
263
- height: RICHMENU_HEIGHT / 2,
264
- })),
265
- ],
266
- // template-06
267
- [0, 1]
268
- .map(i => [0, 1, 2].map(j => ({
269
- x: (RICHMENU_WIDTH / 3) * j,
270
- y: (RICHMENU_HEIGHT / 2) * i,
271
- width: RICHMENU_WIDTH / 3,
272
- height: RICHMENU_HEIGHT / 2,
273
- })))
274
- .flat(),
275
- ];
276
- return boundsMap[actionCount];
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":"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"}
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.10",
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": {