tuandad-mcp-test 1.0.3 → 1.0.5
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/build/index.js +104 -106
- package/package.json +1 -1
- package/src/index.ts +111 -106
package/build/index.js
CHANGED
|
@@ -2,127 +2,125 @@
|
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
/*
|
|
5
|
+
/* =====================================================
|
|
6
6
|
INIT MCP SERVER
|
|
7
|
-
|
|
7
|
+
===================================================== */
|
|
8
8
|
const server = new McpServer({
|
|
9
9
|
name: "eservice",
|
|
10
10
|
version: "1.0.0",
|
|
11
11
|
});
|
|
12
|
-
/*
|
|
12
|
+
/* =====================================================
|
|
13
13
|
TOOL: search_eservice
|
|
14
|
-
|
|
15
|
-
server.tool("search_eservice", {
|
|
16
|
-
text: z
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
});
|
|
27
|
-
/*
|
|
14
|
+
===================================================== */
|
|
15
|
+
server.tool("search_eservice", "Tìm kiếm và định tuyến câu hỏi eService khi chưa xác định rõ lĩnh vực (hóa đơn điện tử, chứng từ điện tử, chữ ký số, TVAN…).", {
|
|
16
|
+
text: z
|
|
17
|
+
.string()
|
|
18
|
+
.describe("Câu hỏi tổng quát của người dùng về hệ thống eService"),
|
|
19
|
+
}, async ({ text }) => ({
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: "text",
|
|
23
|
+
text: `[SEARCH_ESERVICE]\n${text}`,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
}));
|
|
27
|
+
/* =====================================================
|
|
28
28
|
TOOL: answer_ehoadon
|
|
29
|
-
|
|
30
|
-
server.tool("answer_ehoadon", {
|
|
31
|
-
text: z
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
42
|
-
/*
|
|
43
|
-
TOOL: answer_cks
|
|
44
|
-
========================================= */
|
|
45
|
-
server.tool("answer_cks", {
|
|
46
|
-
text: z.string().describe("Câu hỏi liên quan đến chữ ký số"),
|
|
47
|
-
}, async ({ text }) => {
|
|
48
|
-
return {
|
|
49
|
-
content: [
|
|
50
|
-
{
|
|
51
|
-
type: "text",
|
|
52
|
-
text: `[TOOL: answer_cks]\nCâu hỏi: ${text}`,
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
};
|
|
56
|
-
});
|
|
57
|
-
/* =========================================
|
|
58
|
-
TOOL: answer_ivan
|
|
59
|
-
========================================= */
|
|
60
|
-
server.tool("answer_ivan", {
|
|
61
|
-
text: z.string().describe("Câu hỏi liên quan đến chứng thư số"),
|
|
62
|
-
}, async ({ text }) => {
|
|
63
|
-
return {
|
|
64
|
-
content: [
|
|
65
|
-
{
|
|
66
|
-
type: "text",
|
|
67
|
-
text: `[TOOL: answer_ivan]\nCâu hỏi: ${text}`,
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
/* =========================================
|
|
29
|
+
===================================================== */
|
|
30
|
+
server.tool("answer_ehoadon", "Trả lời các câu hỏi liên quan đến HÓA ĐƠN ĐIỆN TỬ: phát hành, tra cứu, điều chỉnh, thay thế, hủy hóa đơn theo quy định thuế Việt Nam.", {
|
|
31
|
+
text: z
|
|
32
|
+
.string()
|
|
33
|
+
.describe("Câu hỏi cụ thể của người dùng về hóa đơn điện tử"),
|
|
34
|
+
}, async ({ text }) => ({
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: "text",
|
|
38
|
+
text: `[ANSWER_EHOADON]\n${text}`,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
}));
|
|
42
|
+
/* =====================================================
|
|
73
43
|
TOOL: answer_eqlhd
|
|
74
|
-
|
|
75
|
-
server.tool("answer_eqlhd", {
|
|
76
|
-
text: z
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
/*
|
|
44
|
+
===================================================== */
|
|
45
|
+
server.tool("answer_eqlhd", "Trả lời câu hỏi về QUẢN LÝ HÓA ĐƠN ĐIỆN TỬ: danh sách hóa đơn, trạng thái, báo cáo, phân quyền và xử lý sai sót.", {
|
|
46
|
+
text: z
|
|
47
|
+
.string()
|
|
48
|
+
.describe("Câu hỏi của người dùng về quản lý hóa đơn điện tử"),
|
|
49
|
+
}, async ({ text }) => ({
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: `[ANSWER_EQLHD]\n${text}`,
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
}));
|
|
57
|
+
/* =====================================================
|
|
88
58
|
TOOL: answer_echungtu
|
|
89
|
-
|
|
90
|
-
server.tool("answer_echungtu", {
|
|
91
|
-
text: z
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
});
|
|
102
|
-
/*
|
|
59
|
+
===================================================== */
|
|
60
|
+
server.tool("answer_echungtu", "Trả lời các câu hỏi về CHỨNG TỪ ĐIỆN TỬ: chứng từ khấu trừ thuế TNCN, chứng từ thuế theo Nghị định 123 và Thông tư 78.", {
|
|
61
|
+
text: z
|
|
62
|
+
.string()
|
|
63
|
+
.describe("Câu hỏi chi tiết của người dùng về chứng từ điện tử"),
|
|
64
|
+
}, async ({ text }) => ({
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: "text",
|
|
68
|
+
text: `[ANSWER_ECHUNGTU]\n${text}`,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
}));
|
|
72
|
+
/* =====================================================
|
|
73
|
+
TOOL: answer_cks
|
|
74
|
+
===================================================== */
|
|
75
|
+
server.tool("answer_cks", "Trả lời câu hỏi liên quan đến CHỮ KÝ SỐ: đăng ký, gia hạn, cài đặt và sử dụng trong hóa đơn điện tử và thuế điện tử.", {
|
|
76
|
+
text: z.string().describe("Câu hỏi của người dùng về chữ ký số"),
|
|
77
|
+
}, async ({ text }) => ({
|
|
78
|
+
content: [
|
|
79
|
+
{
|
|
80
|
+
type: "text",
|
|
81
|
+
text: `[ANSWER_CKS]\n${text}`,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
}));
|
|
85
|
+
/* =====================================================
|
|
86
|
+
TOOL: answer_ivan
|
|
87
|
+
===================================================== */
|
|
88
|
+
server.tool("answer_ivan", "Trả lời câu hỏi về dịch vụ IVAN – trung gian truyền nhận dữ liệu hóa đơn điện tử với cơ quan thuế.", {
|
|
89
|
+
text: z
|
|
90
|
+
.string()
|
|
91
|
+
.describe("Câu hỏi của người dùng về dịch vụ IVAN hoặc chứng thư số"),
|
|
92
|
+
}, async ({ text }) => ({
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: "text",
|
|
96
|
+
text: `[ANSWER_IVAN]\n${text}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
}));
|
|
100
|
+
/* =====================================================
|
|
103
101
|
TOOL: answer_tvan
|
|
104
|
-
|
|
105
|
-
server.tool("answer_tvan", {
|
|
106
|
-
text: z
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
});
|
|
117
|
-
/*
|
|
102
|
+
===================================================== */
|
|
103
|
+
server.tool("answer_tvan", "Trả lời các câu hỏi về TVAN và THUẾ ĐIỆN TỬ: kê khai, nộp thuế, tra cứu tờ khai và nghĩa vụ thuế.", {
|
|
104
|
+
text: z
|
|
105
|
+
.string()
|
|
106
|
+
.describe("Câu hỏi của người dùng về thuế điện tử hoặc TVAN"),
|
|
107
|
+
}, async ({ text }) => ({
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: "text",
|
|
111
|
+
text: `[ANSWER_TVAN]\n${text}`,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
}));
|
|
115
|
+
/* =====================================================
|
|
118
116
|
START MCP SERVER
|
|
119
|
-
|
|
117
|
+
===================================================== */
|
|
120
118
|
async function main() {
|
|
121
|
-
console.log("✅ MCP
|
|
119
|
+
console.log("✅ MCP eService server started");
|
|
122
120
|
const transport = new StdioServerTransport();
|
|
123
121
|
await server.connect(transport);
|
|
124
122
|
}
|
|
125
123
|
main().catch((err) => {
|
|
126
|
-
console.error("❌ Error starting server:", err);
|
|
124
|
+
console.error("❌ Error starting MCP server:", err);
|
|
127
125
|
process.exit(1);
|
|
128
126
|
});
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -4,164 +4,169 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
|
|
7
|
-
/*
|
|
7
|
+
/* =====================================================
|
|
8
8
|
INIT MCP SERVER
|
|
9
|
-
|
|
9
|
+
===================================================== */
|
|
10
10
|
const server = new McpServer({
|
|
11
11
|
name: "eservice",
|
|
12
12
|
version: "1.0.0",
|
|
13
13
|
});
|
|
14
14
|
|
|
15
|
-
/*
|
|
15
|
+
/* =====================================================
|
|
16
16
|
TOOL: search_eservice
|
|
17
|
-
|
|
17
|
+
===================================================== */
|
|
18
18
|
server.tool(
|
|
19
19
|
"search_eservice",
|
|
20
|
+
"Tìm kiếm và định tuyến câu hỏi eService khi chưa xác định rõ lĩnh vực (hóa đơn điện tử, chứng từ điện tử, chữ ký số, TVAN…).",
|
|
20
21
|
{
|
|
21
|
-
text: z
|
|
22
|
+
text: z
|
|
23
|
+
.string()
|
|
24
|
+
.describe("Câu hỏi tổng quát của người dùng về hệ thống eService"),
|
|
22
25
|
},
|
|
23
|
-
async ({ text }) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
}
|
|
26
|
+
async ({ text }) => ({
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: "text",
|
|
30
|
+
text: `[SEARCH_ESERVICE]\n${text}`,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
})
|
|
33
34
|
);
|
|
34
35
|
|
|
35
|
-
/*
|
|
36
|
+
/* =====================================================
|
|
36
37
|
TOOL: answer_ehoadon
|
|
37
|
-
|
|
38
|
+
===================================================== */
|
|
38
39
|
server.tool(
|
|
39
40
|
"answer_ehoadon",
|
|
41
|
+
"Trả lời các câu hỏi liên quan đến HÓA ĐƠN ĐIỆN TỬ: phát hành, tra cứu, điều chỉnh, thay thế, hủy hóa đơn theo quy định thuế Việt Nam.",
|
|
40
42
|
{
|
|
41
|
-
text: z
|
|
43
|
+
text: z
|
|
44
|
+
.string()
|
|
45
|
+
.describe("Câu hỏi cụ thể của người dùng về hóa đơn điện tử"),
|
|
42
46
|
},
|
|
43
|
-
async ({ text }) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
};
|
|
52
|
-
}
|
|
47
|
+
async ({ text }) => ({
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: "text",
|
|
51
|
+
text: `[ANSWER_EHOADON]\n${text}`,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
})
|
|
53
55
|
);
|
|
54
56
|
|
|
55
|
-
/*
|
|
56
|
-
TOOL:
|
|
57
|
-
|
|
57
|
+
/* =====================================================
|
|
58
|
+
TOOL: answer_eqlhd
|
|
59
|
+
===================================================== */
|
|
58
60
|
server.tool(
|
|
59
|
-
"
|
|
61
|
+
"answer_eqlhd",
|
|
62
|
+
"Trả lời câu hỏi về QUẢN LÝ HÓA ĐƠN ĐIỆN TỬ: danh sách hóa đơn, trạng thái, báo cáo, phân quyền và xử lý sai sót.",
|
|
60
63
|
{
|
|
61
|
-
text: z
|
|
64
|
+
text: z
|
|
65
|
+
.string()
|
|
66
|
+
.describe("Câu hỏi của người dùng về quản lý hóa đơn điện tử"),
|
|
62
67
|
},
|
|
63
|
-
async ({ text }) => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
};
|
|
72
|
-
}
|
|
68
|
+
async ({ text }) => ({
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: "text",
|
|
72
|
+
text: `[ANSWER_EQLHD]\n${text}`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
})
|
|
73
76
|
);
|
|
74
77
|
|
|
75
|
-
/*
|
|
76
|
-
TOOL:
|
|
77
|
-
|
|
78
|
+
/* =====================================================
|
|
79
|
+
TOOL: answer_echungtu
|
|
80
|
+
===================================================== */
|
|
78
81
|
server.tool(
|
|
79
|
-
"
|
|
82
|
+
"answer_echungtu",
|
|
83
|
+
"Trả lời các câu hỏi về CHỨNG TỪ ĐIỆN TỬ: chứng từ khấu trừ thuế TNCN, chứng từ thuế theo Nghị định 123 và Thông tư 78.",
|
|
80
84
|
{
|
|
81
|
-
text: z
|
|
85
|
+
text: z
|
|
86
|
+
.string()
|
|
87
|
+
.describe("Câu hỏi chi tiết của người dùng về chứng từ điện tử"),
|
|
82
88
|
},
|
|
83
|
-
async ({ text }) => {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
};
|
|
92
|
-
}
|
|
89
|
+
async ({ text }) => ({
|
|
90
|
+
content: [
|
|
91
|
+
{
|
|
92
|
+
type: "text",
|
|
93
|
+
text: `[ANSWER_ECHUNGTU]\n${text}`,
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
})
|
|
93
97
|
);
|
|
94
98
|
|
|
95
|
-
/*
|
|
96
|
-
TOOL:
|
|
97
|
-
|
|
99
|
+
/* =====================================================
|
|
100
|
+
TOOL: answer_cks
|
|
101
|
+
===================================================== */
|
|
98
102
|
server.tool(
|
|
99
|
-
"
|
|
103
|
+
"answer_cks",
|
|
104
|
+
"Trả lời câu hỏi liên quan đến CHỮ KÝ SỐ: đăng ký, gia hạn, cài đặt và sử dụng trong hóa đơn điện tử và thuế điện tử.",
|
|
100
105
|
{
|
|
101
|
-
text: z.string().describe("Câu hỏi
|
|
106
|
+
text: z.string().describe("Câu hỏi của người dùng về chữ ký số"),
|
|
102
107
|
},
|
|
103
|
-
async ({ text }) => {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
};
|
|
112
|
-
}
|
|
108
|
+
async ({ text }) => ({
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: `[ANSWER_CKS]\n${text}`,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
})
|
|
113
116
|
);
|
|
114
117
|
|
|
115
|
-
/*
|
|
116
|
-
TOOL:
|
|
117
|
-
|
|
118
|
+
/* =====================================================
|
|
119
|
+
TOOL: answer_ivan
|
|
120
|
+
===================================================== */
|
|
118
121
|
server.tool(
|
|
119
|
-
"
|
|
122
|
+
"answer_ivan",
|
|
123
|
+
"Trả lời câu hỏi về dịch vụ IVAN – trung gian truyền nhận dữ liệu hóa đơn điện tử với cơ quan thuế.",
|
|
120
124
|
{
|
|
121
|
-
text: z
|
|
125
|
+
text: z
|
|
126
|
+
.string()
|
|
127
|
+
.describe("Câu hỏi của người dùng về dịch vụ IVAN hoặc chứng thư số"),
|
|
122
128
|
},
|
|
123
|
-
async ({ text }) => {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
};
|
|
132
|
-
}
|
|
129
|
+
async ({ text }) => ({
|
|
130
|
+
content: [
|
|
131
|
+
{
|
|
132
|
+
type: "text",
|
|
133
|
+
text: `[ANSWER_IVAN]\n${text}`,
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
})
|
|
133
137
|
);
|
|
134
138
|
|
|
135
|
-
/*
|
|
139
|
+
/* =====================================================
|
|
136
140
|
TOOL: answer_tvan
|
|
137
|
-
|
|
141
|
+
===================================================== */
|
|
138
142
|
server.tool(
|
|
139
143
|
"answer_tvan",
|
|
144
|
+
"Trả lời các câu hỏi về TVAN và THUẾ ĐIỆN TỬ: kê khai, nộp thuế, tra cứu tờ khai và nghĩa vụ thuế.",
|
|
140
145
|
{
|
|
141
|
-
text: z
|
|
146
|
+
text: z
|
|
147
|
+
.string()
|
|
148
|
+
.describe("Câu hỏi của người dùng về thuế điện tử hoặc TVAN"),
|
|
142
149
|
},
|
|
143
|
-
async ({ text }) => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
};
|
|
152
|
-
}
|
|
150
|
+
async ({ text }) => ({
|
|
151
|
+
content: [
|
|
152
|
+
{
|
|
153
|
+
type: "text",
|
|
154
|
+
text: `[ANSWER_TVAN]\n${text}`,
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
})
|
|
153
158
|
);
|
|
154
159
|
|
|
155
|
-
/*
|
|
160
|
+
/* =====================================================
|
|
156
161
|
START MCP SERVER
|
|
157
|
-
|
|
162
|
+
===================================================== */
|
|
158
163
|
async function main() {
|
|
159
|
-
console.log("✅ MCP
|
|
164
|
+
console.log("✅ MCP eService server started");
|
|
160
165
|
const transport = new StdioServerTransport();
|
|
161
166
|
await server.connect(transport);
|
|
162
167
|
}
|
|
163
168
|
|
|
164
169
|
main().catch((err) => {
|
|
165
|
-
console.error("❌ Error starting server:", err);
|
|
170
|
+
console.error("❌ Error starting MCP server:", err);
|
|
166
171
|
process.exit(1);
|
|
167
|
-
});
|
|
172
|
+
});
|