agenza-line-bot-mcp 0.0.1-local

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 (85) hide show
  1. package/README.ja.md +199 -0
  2. package/README.md +215 -0
  3. package/dist/common/response.d.ts +14 -0
  4. package/dist/common/response.d.ts.map +1 -0
  5. package/dist/common/response.js +22 -0
  6. package/dist/common/response.js.map +1 -0
  7. package/dist/common/schema/actionSchema.d.ts +139 -0
  8. package/dist/common/schema/actionSchema.d.ts.map +1 -0
  9. package/dist/common/schema/actionSchema.js +85 -0
  10. package/dist/common/schema/actionSchema.js.map +1 -0
  11. package/dist/common/schema/constants.d.ts +2 -0
  12. package/dist/common/schema/constants.d.ts.map +1 -0
  13. package/dist/common/schema/constants.js +2 -0
  14. package/dist/common/schema/constants.js.map +1 -0
  15. package/dist/common/schema/flexMessage.d.ts +1654 -0
  16. package/dist/common/schema/flexMessage.d.ts.map +1 -0
  17. package/dist/common/schema/flexMessage.js +337 -0
  18. package/dist/common/schema/flexMessage.js.map +1 -0
  19. package/dist/common/schema/textMessage.d.ts +12 -0
  20. package/dist/common/schema/textMessage.d.ts.map +1 -0
  21. package/dist/common/schema/textMessage.js +9 -0
  22. package/dist/common/schema/textMessage.js.map +1 -0
  23. package/dist/index.d.ts +18 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +73 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/tools/AbstractTool.d.ts +9 -0
  28. package/dist/tools/AbstractTool.d.ts.map +1 -0
  29. package/dist/tools/AbstractTool.js +3 -0
  30. package/dist/tools/AbstractTool.js.map +1 -0
  31. package/dist/tools/broadcastFlexMessage.d.ts +9 -0
  32. package/dist/tools/broadcastFlexMessage.d.ts.map +1 -0
  33. package/dist/tools/broadcastFlexMessage.js +28 -0
  34. package/dist/tools/broadcastFlexMessage.js.map +1 -0
  35. package/dist/tools/broadcastTextMessage.d.ts +9 -0
  36. package/dist/tools/broadcastTextMessage.d.ts.map +1 -0
  37. package/dist/tools/broadcastTextMessage.js +27 -0
  38. package/dist/tools/broadcastTextMessage.js.map +1 -0
  39. package/dist/tools/cancelRichMenuDefault.d.ts +9 -0
  40. package/dist/tools/cancelRichMenuDefault.d.ts.map +1 -0
  41. package/dist/tools/cancelRichMenuDefault.js +16 -0
  42. package/dist/tools/cancelRichMenuDefault.js.map +1 -0
  43. package/dist/tools/createRichMenu.d.ts +10 -0
  44. package/dist/tools/createRichMenu.d.ts.map +1 -0
  45. package/dist/tools/createRichMenu.js +278 -0
  46. package/dist/tools/createRichMenu.js.map +1 -0
  47. package/dist/tools/deleteRichMenu.d.ts +9 -0
  48. package/dist/tools/deleteRichMenu.d.ts.map +1 -0
  49. package/dist/tools/deleteRichMenu.js +27 -0
  50. package/dist/tools/deleteRichMenu.js.map +1 -0
  51. package/dist/tools/getMessageQuota.d.ts +9 -0
  52. package/dist/tools/getMessageQuota.d.ts.map +1 -0
  53. package/dist/tools/getMessageQuota.js +21 -0
  54. package/dist/tools/getMessageQuota.js.map +1 -0
  55. package/dist/tools/getProfile.d.ts +10 -0
  56. package/dist/tools/getProfile.d.ts.map +1 -0
  57. package/dist/tools/getProfile.js +34 -0
  58. package/dist/tools/getProfile.js.map +1 -0
  59. package/dist/tools/getRichMenuList.d.ts +9 -0
  60. package/dist/tools/getRichMenuList.d.ts.map +1 -0
  61. package/dist/tools/getRichMenuList.js +21 -0
  62. package/dist/tools/getRichMenuList.js.map +1 -0
  63. package/dist/tools/pushFlexMessage.d.ts +10 -0
  64. package/dist/tools/pushFlexMessage.d.ts.map +1 -0
  65. package/dist/tools/pushFlexMessage.js +40 -0
  66. package/dist/tools/pushFlexMessage.js.map +1 -0
  67. package/dist/tools/pushTextMessage.d.ts +10 -0
  68. package/dist/tools/pushTextMessage.d.ts.map +1 -0
  69. package/dist/tools/pushTextMessage.js +39 -0
  70. package/dist/tools/pushTextMessage.js.map +1 -0
  71. package/dist/tools/setRichMenuDefault.d.ts +9 -0
  72. package/dist/tools/setRichMenuDefault.d.ts.map +1 -0
  73. package/dist/tools/setRichMenuDefault.js +22 -0
  74. package/dist/tools/setRichMenuDefault.js.map +1 -0
  75. package/dist/version.d.ts +3 -0
  76. package/dist/version.d.ts.map +1 -0
  77. package/dist/version.js +3 -0
  78. package/dist/version.js.map +1 -0
  79. package/package.json +54 -0
  80. package/richmenu-template/template-01.md +46 -0
  81. package/richmenu-template/template-02.md +49 -0
  82. package/richmenu-template/template-03.md +74 -0
  83. package/richmenu-template/template-04.md +60 -0
  84. package/richmenu-template/template-05.md +67 -0
  85. package/richmenu-template/template-06.md +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancelRichMenuDefault.js","sourceRoot":"","sources":["../../src/tools/cancelRichMenuDefault.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IACrD,MAAM,CAAkC;IAEhD,YAAY,MAAuC;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,+BAA+B,EAC/B,EAAE,EACF,KAAK,IAAI,EAAE;YACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAC3D,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
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
+ //# sourceMappingURL=createRichMenu.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,278 @@
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
+ };
278
+ //# sourceMappingURL=createRichMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRichMenu.js","sourceRoot":"","sources":["../../src/tools/createRichMenu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
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 DeleteRichMenu extends AbstractTool {
5
+ private client;
6
+ constructor(client: messagingApi.MessagingApiClient);
7
+ register(server: McpServer): void;
8
+ }
9
+ //# sourceMappingURL=deleteRichMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteRichMenu.d.ts","sourceRoot":"","sources":["../../src/tools/deleteRichMenu.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;AAGjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY;IACtD,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,YAAY,CAAC,kBAAkB;IAKnD,QAAQ,CAAC,MAAM,EAAE,SAAS;CAyB3B"}
@@ -0,0 +1,27 @@
1
+ import { createErrorResponse, createSuccessResponse, } from "../common/response.js";
2
+ import { AbstractTool } from "./AbstractTool.js";
3
+ import { z } from "zod";
4
+ export default class DeleteRichMenu extends AbstractTool {
5
+ client;
6
+ constructor(client) {
7
+ super();
8
+ this.client = client;
9
+ }
10
+ register(server) {
11
+ const richMenuIdSchema = z
12
+ .string()
13
+ .describe("The ID of the rich menu to delete.");
14
+ server.tool("delete_rich_menu", "Delete a rich menu from your LINE Official Account.", {
15
+ richMenuId: richMenuIdSchema.describe("The ID of the rich menu to delete."),
16
+ }, async ({ richMenuId }) => {
17
+ try {
18
+ const response = await this.client.deleteRichMenu(richMenuId);
19
+ return createSuccessResponse(response);
20
+ }
21
+ catch (error) {
22
+ return createErrorResponse(`Failed to delete rich menu: ${error.message}`);
23
+ }
24
+ });
25
+ }
26
+ }
27
+ //# sourceMappingURL=deleteRichMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteRichMenu.js","sourceRoot":"","sources":["../../src/tools/deleteRichMenu.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY;IAC9C,MAAM,CAAkC;IAEhD,YAAY,MAAuC;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,gBAAgB,GAAG,CAAC;aACvB,MAAM,EAAE;aACR,QAAQ,CAAC,oCAAoC,CAAC,CAAC;QAElD,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,qDAAqD,EACrD;YACE,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CACnC,oCAAoC,CACrC;SACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC9D,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,mBAAmB,CACxB,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,9 @@
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 GetMessageQuota extends AbstractTool {
5
+ private client;
6
+ constructor(client: messagingApi.MessagingApiClient);
7
+ register(server: McpServer): void;
8
+ }
9
+ //# sourceMappingURL=getMessageQuota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMessageQuota.d.ts","sourceRoot":"","sources":["../../src/tools/getMessageQuota.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IACvD,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,YAAY,CAAC,kBAAkB;IAKnD,QAAQ,CAAC,MAAM,EAAE,SAAS;CAiB3B"}
@@ -0,0 +1,21 @@
1
+ import { createSuccessResponse } from "../common/response.js";
2
+ import { AbstractTool } from "./AbstractTool.js";
3
+ export default class GetMessageQuota extends AbstractTool {
4
+ client;
5
+ constructor(client) {
6
+ super();
7
+ this.client = client;
8
+ }
9
+ register(server) {
10
+ server.tool("get_message_quota", "Get the message quota and consumption of the LINE Official Account. This shows the monthly message limit and current usage.", {}, async () => {
11
+ const messageQuotaResponse = await this.client.getMessageQuota();
12
+ const messageQuotaConsumptionResponse = await this.client.getMessageQuotaConsumption();
13
+ const response = {
14
+ limited: messageQuotaResponse.value,
15
+ totalUsage: messageQuotaConsumptionResponse.totalUsage,
16
+ };
17
+ return createSuccessResponse(response);
18
+ });
19
+ }
20
+ }
21
+ //# sourceMappingURL=getMessageQuota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMessageQuota.js","sourceRoot":"","sources":["../../src/tools/getMessageQuota.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IAC/C,MAAM,CAAkC;IAEhD,YAAY,MAAuC;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6HAA6H,EAC7H,EAAE,EACF,KAAK,IAAI,EAAE;YACT,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACjE,MAAM,+BAA+B,GACnC,MAAM,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,oBAAoB,CAAC,KAAK;gBACnC,UAAU,EAAE,+BAA+B,CAAC,UAAU;aACvD,CAAC;YACF,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
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 GetProfile extends AbstractTool {
5
+ private client;
6
+ private destinationId;
7
+ constructor(client: messagingApi.MessagingApiClient, destinationId: string);
8
+ register(server: McpServer): void;
9
+ }
10
+ //# sourceMappingURL=getProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProfile.d.ts","sourceRoot":"","sources":["../../src/tools/getProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,EAAE,YAAY,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM;IAM1E,QAAQ,CAAC,MAAM,EAAE,SAAS;CA4B3B"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { createErrorResponse, createSuccessResponse, } from "../common/response.js";
3
+ import { AbstractTool } from "./AbstractTool.js";
4
+ import { NO_USER_ID_ERROR } from "../common/schema/constants.js";
5
+ export default class GetProfile extends AbstractTool {
6
+ client;
7
+ destinationId;
8
+ constructor(client, destinationId) {
9
+ super();
10
+ this.client = client;
11
+ this.destinationId = destinationId;
12
+ }
13
+ register(server) {
14
+ const userIdSchema = z
15
+ .string()
16
+ .default(this.destinationId)
17
+ .describe("The user ID to get a profile. Defaults to DESTINATION_USER_ID.");
18
+ server.tool("get_profile", "Get detailed profile information of a LINE user including display name, profile picture URL, status message and language.", {
19
+ userId: userIdSchema,
20
+ }, async ({ userId }) => {
21
+ if (!userId) {
22
+ return createErrorResponse(NO_USER_ID_ERROR);
23
+ }
24
+ try {
25
+ const response = await this.client.getProfile(userId);
26
+ return createSuccessResponse(response);
27
+ }
28
+ catch (error) {
29
+ return createErrorResponse(`Failed to get profile: ${error.message}`);
30
+ }
31
+ });
32
+ }
33
+ }
34
+ //# sourceMappingURL=getProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProfile.js","sourceRoot":"","sources":["../../src/tools/getProfile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAC1C,MAAM,CAAkC;IACxC,aAAa,CAAS;IAE9B,YAAY,MAAuC,EAAE,aAAqB;QACxE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,YAAY,GAAG,CAAC;aACnB,MAAM,EAAE;aACR,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;aAC3B,QAAQ,CACP,gEAAgE,CACjE,CAAC;QAEJ,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2HAA2H,EAC3H;YACE,MAAM,EAAE,YAAY;SACrB,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACtD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,mBAAmB,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,9 @@
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 GetRichMenuList extends AbstractTool {
5
+ private client;
6
+ constructor(client: messagingApi.MessagingApiClient);
7
+ register(server: McpServer): void;
8
+ }
9
+ //# sourceMappingURL=getRichMenuList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRichMenuList.d.ts","sourceRoot":"","sources":["../../src/tools/getRichMenuList.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;AAEjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IACvD,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,YAAY,CAAC,kBAAkB;IAKnD,QAAQ,CAAC,MAAM,EAAE,SAAS;CAiB3B"}
@@ -0,0 +1,21 @@
1
+ import { createErrorResponse, createSuccessResponse, } from "../common/response.js";
2
+ import { AbstractTool } from "./AbstractTool.js";
3
+ export default class GetRichMenuList extends AbstractTool {
4
+ client;
5
+ constructor(client) {
6
+ super();
7
+ this.client = client;
8
+ }
9
+ register(server) {
10
+ server.tool("get_rich_menu_list", "Get the list of rich menus associated with your LINE Official Account.", {}, async () => {
11
+ try {
12
+ const response = await this.client.getRichMenuList();
13
+ return createSuccessResponse(response);
14
+ }
15
+ catch (error) {
16
+ return createErrorResponse(`Failed to broadcast message: ${error.message}`);
17
+ }
18
+ });
19
+ }
20
+ }
21
+ //# sourceMappingURL=getRichMenuList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRichMenuList.js","sourceRoot":"","sources":["../../src/tools/getRichMenuList.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IAC/C,MAAM,CAAkC;IAEhD,YAAY,MAAuC;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,wEAAwE,EACxE,EAAE,EACF,KAAK,IAAI,EAAE;YACT,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACrD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,mBAAmB,CACxB,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAChD,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
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 PushFlexMessage extends AbstractTool {
5
+ private client;
6
+ private destinationId;
7
+ constructor(client: messagingApi.MessagingApiClient, destinationId: string);
8
+ register(server: McpServer): void;
9
+ }
10
+ //# sourceMappingURL=pushFlexMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushFlexMessage.d.ts","sourceRoot":"","sources":["../../src/tools/pushFlexMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IACvD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,EAAE,YAAY,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM;IAM1E,QAAQ,CAAC,MAAM,EAAE,SAAS;CAmC3B"}
@@ -0,0 +1,40 @@
1
+ import { z } from "zod";
2
+ import { createErrorResponse, createSuccessResponse, } from "../common/response.js";
3
+ import { AbstractTool } from "./AbstractTool.js";
4
+ import { NO_USER_ID_ERROR } from "../common/schema/constants.js";
5
+ import { flexMessageSchema } from "../common/schema/flexMessage.js";
6
+ export default class PushFlexMessage extends AbstractTool {
7
+ client;
8
+ destinationId;
9
+ constructor(client, destinationId) {
10
+ super();
11
+ this.client = client;
12
+ this.destinationId = destinationId;
13
+ }
14
+ register(server) {
15
+ const userIdSchema = z
16
+ .string()
17
+ .default(this.destinationId)
18
+ .describe("The user ID to receive a message. Defaults to DESTINATION_USER_ID.");
19
+ server.tool("push_flex_message", "Push a highly customizable flex message to a user via LINE. Supports both bubble (single container) and carousel " +
20
+ "(multiple swipeable bubbles) layouts.", {
21
+ userId: userIdSchema,
22
+ message: flexMessageSchema,
23
+ }, async ({ userId, message }) => {
24
+ if (!userId) {
25
+ return createErrorResponse(NO_USER_ID_ERROR);
26
+ }
27
+ try {
28
+ const response = await this.client.pushMessage({
29
+ to: userId,
30
+ messages: [message],
31
+ });
32
+ return createSuccessResponse(response);
33
+ }
34
+ catch (error) {
35
+ return createErrorResponse(`Failed to push flex message: ${error.message}`);
36
+ }
37
+ });
38
+ }
39
+ }
40
+ //# sourceMappingURL=pushFlexMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushFlexMessage.js","sourceRoot":"","sources":["../../src/tools/pushFlexMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IAC/C,MAAM,CAAkC;IACxC,aAAa,CAAS;IAE9B,YAAY,MAAuC,EAAE,aAAqB;QACxE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,YAAY,GAAG,CAAC;aACnB,MAAM,EAAE;aACR,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;aAC3B,QAAQ,CACP,oEAAoE,CACrE,CAAC;QAEJ,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,mHAAmH;YACjH,uCAAuC,EACzC;YACE,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,iBAAiB;SAC3B,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,CAAC,OAA0C,CAAC;iBACvD,CAAC,CAAC;gBACH,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,mBAAmB,CACxB,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAChD,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
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 PushTextMessage extends AbstractTool {
5
+ private client;
6
+ private destinationId;
7
+ constructor(client: messagingApi.MessagingApiClient, destinationId: string);
8
+ register(server: McpServer): void;
9
+ }
10
+ //# sourceMappingURL=pushTextMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushTextMessage.d.ts","sourceRoot":"","sources":["../../src/tools/pushTextMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IACvD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,EAAE,YAAY,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM;IAM1E,QAAQ,CAAC,MAAM,EAAE,SAAS;CAkC3B"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { createErrorResponse, createSuccessResponse, } from "../common/response.js";
3
+ import { AbstractTool } from "./AbstractTool.js";
4
+ import { NO_USER_ID_ERROR } from "../common/schema/constants.js";
5
+ import { textMessageSchema } from "../common/schema/textMessage.js";
6
+ export default class PushTextMessage extends AbstractTool {
7
+ client;
8
+ destinationId;
9
+ constructor(client, destinationId) {
10
+ super();
11
+ this.client = client;
12
+ this.destinationId = destinationId;
13
+ }
14
+ register(server) {
15
+ const userIdSchema = z
16
+ .string()
17
+ .default(this.destinationId)
18
+ .describe("The user ID to receive a message. Defaults to DESTINATION_USER_ID.");
19
+ server.tool("push_text_message", "Push a simple text message to a user via LINE. Use this for sending plain text messages without formatting.", {
20
+ userId: userIdSchema,
21
+ message: textMessageSchema,
22
+ }, async ({ userId, message }) => {
23
+ if (!userId) {
24
+ return createErrorResponse(NO_USER_ID_ERROR);
25
+ }
26
+ try {
27
+ const response = await this.client.pushMessage({
28
+ to: userId,
29
+ messages: [message],
30
+ });
31
+ return createSuccessResponse(response);
32
+ }
33
+ catch (error) {
34
+ return createErrorResponse(`Failed to push message: ${error.message}`);
35
+ }
36
+ });
37
+ }
38
+ }
39
+ //# sourceMappingURL=pushTextMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushTextMessage.js","sourceRoot":"","sources":["../../src/tools/pushTextMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;IAC/C,MAAM,CAAkC;IACxC,aAAa,CAAS;IAE9B,YAAY,MAAuC,EAAE,aAAqB;QACxE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,MAAM,YAAY,GAAG,CAAC;aACnB,MAAM,EAAE;aACR,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;aAC3B,QAAQ,CACP,oEAAoE,CACrE,CAAC;QAEJ,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6GAA6G,EAC7G;YACE,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,iBAAiB;SAC3B,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,CAAC,OAA0C,CAAC;iBACvD,CAAC,CAAC;gBACH,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,mBAAmB,CACxB,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAC3C,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,9 @@
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 SetRichMenuDefault extends AbstractTool {
5
+ private client;
6
+ constructor(client: messagingApi.MessagingApiClient);
7
+ register(server: McpServer): void;
8
+ }
9
+ //# sourceMappingURL=setRichMenuDefault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setRichMenuDefault.d.ts","sourceRoot":"","sources":["../../src/tools/setRichMenuDefault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,YAAY;IAC1D,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,YAAY,CAAC,kBAAkB;IAKnD,QAAQ,CAAC,MAAM,EAAE,SAAS;CAmB3B"}