Skip to content

Commit 7a67021

Browse files
committed
feat(mcp-cafe24-admin): add label tools
1 parent 8f78ea0 commit 7a67021

File tree

5 files changed

+140
-0
lines changed

5 files changed

+140
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { z } from "zod";
2+
3+
export const LabelsSearchParamsSchema = z
4+
.object({
5+
shop_no: z.number().min(1).default(1).describe("Shop Number"),
6+
limit: z.number().min(1).max(1000).default(100).describe("Limit the number of results"),
7+
offset: z.number().max(15000).default(0).describe("Start location of list"),
8+
})
9+
.strict();
10+
11+
export const LabelsCreateParamsSchema = z
12+
.object({
13+
shop_no: z.number().min(1).default(1).describe("Shop Number"),
14+
requests: z
15+
.array(
16+
z.object({
17+
name: z.string().describe("Order label name"),
18+
order_item_code: z.array(z.string()).describe("Order item code"),
19+
}),
20+
)
21+
.describe("Listing of label requests"),
22+
})
23+
.strict();

packages/mcp-cafe24-admin/src/tools/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { registerTools as registerFulfillmentTools } from "./fulfillment.js";
2121
import { registerTools as registerImageTools } from "./image.js";
2222
import { registerTools as registerInformationTools } from "./information.js";
2323
import { registerTools as registerKakaoTools } from "./kakao.js";
24+
import { registerTools as registerLabelTools } from "./label.js";
2425
import { registerTools as registerMainTools } from "./main.js";
2526
import { registerTools as registerMainProductsTools } from "./mainproducts.js";
2627
import { registerTools as registerMenuTools } from "./menu.js";
@@ -91,6 +92,7 @@ export function registerAllTools(server: McpServer): void {
9192
registerImageTools(server);
9293
registerInformationTools(server);
9394
registerKakaoTools(server);
95+
registerLabelTools(server);
9496
registerMainTools(server);
9597
registerMainProductsTools(server);
9698
registerMenuTools(server);
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import type { z } from "zod";
3+
import type { LabelsCreateResponse, LabelsListResponse } from "@/types/index.js";
4+
import { LabelsCreateParamsSchema, LabelsSearchParamsSchema } from "../schemas/label.js";
5+
import { handleApiError, makeApiRequest } from "../services/api-client.js";
6+
7+
async function cafe24_list_labels(params: z.infer<typeof LabelsSearchParamsSchema>) {
8+
try {
9+
const data = await makeApiRequest<LabelsListResponse>("/admin/labels", "GET", undefined, {
10+
shop_no: params.shop_no,
11+
limit: params.limit,
12+
offset: params.offset,
13+
});
14+
15+
return {
16+
content: [
17+
{
18+
type: "text" as const,
19+
text:
20+
`# Order Labels (Shop: ${data.labels.shop_no})\n\n` +
21+
data.labels.names.map((name) => `- ${name}`).join("\n"),
22+
},
23+
],
24+
structuredContent: {
25+
labels: data.labels,
26+
links: data.links,
27+
},
28+
};
29+
} catch (error) {
30+
return { content: [{ type: "text" as const, text: handleApiError(error) }] };
31+
}
32+
}
33+
34+
async function cafe24_create_labels(params: z.infer<typeof LabelsCreateParamsSchema>) {
35+
try {
36+
const data = await makeApiRequest<LabelsCreateResponse>("/admin/labels", "POST", {
37+
shop_no: params.shop_no,
38+
requests: params.requests,
39+
});
40+
41+
return {
42+
content: [
43+
{
44+
type: "text" as const,
45+
text: `Successfully created ${data.labels.length} label(s).`,
46+
},
47+
],
48+
structuredContent: {
49+
results: data.labels,
50+
},
51+
};
52+
} catch (error) {
53+
return { content: [{ type: "text" as const, text: handleApiError(error) }] };
54+
}
55+
}
56+
57+
export function registerTools(server: McpServer): void {
58+
server.registerTool(
59+
"cafe24_list_labels",
60+
{
61+
title: "List Cafe24 Order Labels",
62+
description: "Retrieve a list of order labels for a specific shop.",
63+
inputSchema: LabelsSearchParamsSchema,
64+
annotations: {
65+
readOnlyHint: true,
66+
destructiveHint: false,
67+
idempotentHint: true,
68+
openWorldHint: false,
69+
},
70+
},
71+
cafe24_list_labels,
72+
);
73+
74+
server.registerTool(
75+
"cafe24_create_labels",
76+
{
77+
title: "Create Cafe24 Order Labels",
78+
description: "Creates multiple labels for order items in a specific shop.",
79+
inputSchema: LabelsCreateParamsSchema,
80+
annotations: {
81+
readOnlyHint: false,
82+
destructiveHint: false,
83+
idempotentHint: false,
84+
openWorldHint: false,
85+
},
86+
},
87+
cafe24_create_labels,
88+
);
89+
}

packages/mcp-cafe24-admin/src/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export * from "./customer.js";
77
export * from "./exchange.js";
88
export * from "./exchange-request.js";
99
export * from "./fulfillment.js";
10+
export * from "./label.js";
1011
export * from "./marketing.js";
1112
export * from "./order.js";
1213
export * from "./order-control.js";
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export interface LabelsListResponse {
2+
labels: {
3+
shop_no: number;
4+
names: string[];
5+
};
6+
links?: Array<{
7+
rel: string;
8+
href: string;
9+
}>;
10+
}
11+
12+
export interface LabelRequest {
13+
name: string;
14+
order_item_code: string[];
15+
}
16+
17+
export interface Label {
18+
shop_no: number;
19+
name: string;
20+
order_item_code: string[];
21+
}
22+
23+
export interface LabelsCreateResponse {
24+
labels: Label[];
25+
}

0 commit comments

Comments
 (0)