a-calc 3.0.0-beta.20250123 → 3.0.0-beta.20250123.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/browser/index.js +1 -1
- package/cjs/index.js +1 -1
- package/es/index.js +1 -1
- package/mcp-server/README.md +27 -9
- package/mcp-server/src/index.js +364 -65
- package/package.json +127 -125
package/mcp-server/src/index.js
CHANGED
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
ListToolsRequestSchema,
|
|
8
8
|
ListResourcesRequestSchema,
|
|
9
9
|
ReadResourceRequestSchema,
|
|
10
|
+
ListPromptsRequestSchema,
|
|
11
|
+
GetPromptRequestSchema,
|
|
10
12
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
11
13
|
|
|
12
14
|
import {
|
|
@@ -39,27 +41,59 @@ import {
|
|
|
39
41
|
const TOOLS = [
|
|
40
42
|
{
|
|
41
43
|
name: "calc",
|
|
42
|
-
description:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
44
|
+
description: `🔢 a-calc 高精度计算工具 - 解决 JavaScript 浮点数精度问题
|
|
45
|
+
|
|
46
|
+
⚠️ 重要:当用户需要进行任何数值计算时,优先使用此工具而不是直接计算!
|
|
47
|
+
|
|
48
|
+
🚨 编码规范(必读!):
|
|
49
|
+
|
|
50
|
+
1. 变量注入方式:
|
|
51
|
+
❌ 错误:calc(\`\${a} + \${b}\`) // 不要用模板字符串拼接
|
|
52
|
+
✅ 正确:calc("a + b", {a, b}) // 使用第二参数注入变量
|
|
53
|
+
|
|
54
|
+
2. 批量计算方式:
|
|
55
|
+
❌ 错误:let total = '0'; items.forEach(item => total = calc(\`\${total} + \${item.price}\`))
|
|
56
|
+
✅ 正确:const total = calc_sum("price * qty", items) // 使用 calc_sum
|
|
57
|
+
|
|
58
|
+
3. 购物车等场景:
|
|
59
|
+
❌ 错误:cart.forEach(item => total = calc(\`\${total} + \${item.price} * \${item.quantity}\`))
|
|
60
|
+
✅ 正确:calc_sum("price * quantity | =2", cart)
|
|
61
|
+
|
|
62
|
+
4. 对象字段传递:
|
|
63
|
+
❌ 错误:calc("price * qty", {price: item.price, qty: item.qty}) // 冗余
|
|
64
|
+
✅ 正确:calc("price * qty", item) // 简洁优雅
|
|
65
|
+
|
|
66
|
+
核心优势:
|
|
67
|
+
- ✅ 解决 0.1 + 0.2 = 0.30000000000000004 的精度问题
|
|
68
|
+
- ✅ 金融计算、价格计算、统计分析等场景必用
|
|
69
|
+
- ✅ 支持复杂表达式、变量替换、条件判断
|
|
70
|
+
- ✅ 内置格式化:千分位、小数位、百分比、科学计数法
|
|
71
|
+
|
|
72
|
+
适用场景(必须使用):
|
|
73
|
+
1. 任何涉及小数的加减乘除运算
|
|
74
|
+
2. 金融计算、价格计算、折扣计算
|
|
75
|
+
3. 百分比计算、比率计算
|
|
76
|
+
4. 需要格式化输出的数值(千分位、保留小数等)
|
|
77
|
+
5. 带单位的计算(如 "100元 + 50元")
|
|
78
|
+
6. 条件判断和比较运算
|
|
79
|
+
|
|
80
|
+
快速示例:
|
|
81
|
+
- calc("0.1 + 0.2") → "0.3" (精确!)
|
|
82
|
+
- calc("price * qty | =2", {price: 99.9, qty: 3}) → "299.70"
|
|
83
|
+
- calc("1234567 | ,") → "1,234,567" (千分位)
|
|
61
84
|
- calc("score >= 60 ? '及格' : '不及格'", {score: 75}) → "及格"
|
|
62
|
-
|
|
85
|
+
|
|
86
|
+
变量注入最佳实践:
|
|
87
|
+
- 如果对象已有所需字段,直接传入:calc("price * qty", item)
|
|
88
|
+
- 如果需要多个独立变量,使用简写:calc("a + b", {a, b})
|
|
89
|
+
- 避免冗余:❌ calc("price * qty", {price: item.price, qty: item.qty})
|
|
90
|
+
|
|
91
|
+
支持的运算:
|
|
92
|
+
- 基础运算: + - * / % ** // (加减乘除、取模、幂、整除)
|
|
93
|
+
- 比较运算: > < >= <= == !=
|
|
94
|
+
- 逻辑运算: && || !
|
|
95
|
+
- 数学函数: sqrt, sin, cos, tan, pow, max, min, abs, floor, ceil 等
|
|
96
|
+
- 格式化: =N(小数位), ,(千分位), %(百分比), !e(科学计数), !v(交易量)`,
|
|
63
97
|
inputSchema: {
|
|
64
98
|
type: "object",
|
|
65
99
|
properties: {
|
|
@@ -101,20 +135,29 @@ const TOOLS = [
|
|
|
101
135
|
},
|
|
102
136
|
{
|
|
103
137
|
name: "fmt",
|
|
104
|
-
description:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
138
|
+
description: `📊 a-calc 数值格式化工具 - 专业的数字格式化,性能最优
|
|
139
|
+
|
|
140
|
+
⚠️ 使用场景:当需要格式化数字(千分位、小数位、百分比等)但不需要计算时使用
|
|
141
|
+
|
|
142
|
+
性能优势:
|
|
143
|
+
- 跳过表达式解析,比 calc 更快
|
|
144
|
+
- 适合纯格式化场景
|
|
145
|
+
|
|
146
|
+
常用格式化规则:
|
|
147
|
+
- =N: 精确N位小数 (如 =2 → "100.00")
|
|
148
|
+
- <=N: 最多N位小数 (如 <=2 → "3.14")
|
|
149
|
+
- >=N: 至少N位小数 (如 >=3 → "3.100")
|
|
150
|
+
- ~5: 四舍五入 (如 ~5=2 → "1.13")
|
|
151
|
+
- ~6: 银行家舍入
|
|
152
|
+
- ,: 千分位分隔 (如 , → "1,234,567")
|
|
153
|
+
- %: 百分比 (如 %=2 → "12.34%")
|
|
154
|
+
- !e: 科学计数法 (如 !e=2 → "1.23e+8")
|
|
155
|
+
- +: 显示正号 (如 + → "+100")
|
|
156
|
+
- !n: 返回数字类型
|
|
157
|
+
- !v: 交易量缩写 (如 !v → "1.23M")
|
|
158
|
+
- !t:us/eu/indian/cn4: 千分位预设
|
|
159
|
+
|
|
160
|
+
快速示例:
|
|
118
161
|
- fmt(100, "=2") → "100.00"
|
|
119
162
|
- fmt(1234567, ",") → "1,234,567"
|
|
120
163
|
- fmt(0.1234, "%=2") → "12.34%"
|
|
@@ -143,16 +186,55 @@ const TOOLS = [
|
|
|
143
186
|
},
|
|
144
187
|
{
|
|
145
188
|
name: "calc_sum",
|
|
146
|
-
description:
|
|
189
|
+
description: `📈 a-calc 批量聚合计算工具 - 对数组数据进行批量计算并求和
|
|
147
190
|
|
|
148
|
-
|
|
149
|
-
- 计算订单总价
|
|
150
|
-
- 统计销售额
|
|
151
|
-
- 汇总报表数据
|
|
191
|
+
⚠️ 使用场景:处理数组数据、批量计算、统计汇总时使用
|
|
152
192
|
|
|
153
|
-
|
|
193
|
+
🚨 这是处理数组数据的正确方式!不要用 forEach 累加!
|
|
194
|
+
|
|
195
|
+
典型应用场景:
|
|
196
|
+
1. 计算订单总价:多个商品的 price * quantity 求和
|
|
197
|
+
2. 统计销售额:多条销售记录的金额汇总
|
|
198
|
+
3. 报表数据汇总:批量计算并求和
|
|
199
|
+
4. 购物车总价计算
|
|
200
|
+
|
|
201
|
+
编码规范对比(必读!):
|
|
202
|
+
|
|
203
|
+
❌ 错误写法(不要这样做):
|
|
204
|
+
\`\`\`javascript
|
|
205
|
+
// 购物车总价 - 错误示例
|
|
206
|
+
let total = '0'
|
|
207
|
+
cart.forEach(item => {
|
|
208
|
+
total = calc(\`\${total} + \${item.price} * \${item.quantity}\`)
|
|
209
|
+
})
|
|
210
|
+
\`\`\`
|
|
211
|
+
问题:使用模板字符串拼接、forEach 累加,代码不清晰、性能差
|
|
212
|
+
|
|
213
|
+
✅ 正确写法(推荐):
|
|
214
|
+
\`\`\`javascript
|
|
215
|
+
// 购物车总价 - 使用 calc_sum
|
|
216
|
+
const total = calc_sum("price * quantity | =2", cart)
|
|
217
|
+
|
|
218
|
+
// 单个商品小计 - 直接传入对象(最优雅)
|
|
219
|
+
const itemTotal = calc("price * quantity | =2", item)
|
|
220
|
+
\`\`\`
|
|
221
|
+
优势:代码简洁、性能好、自动处理精度
|
|
222
|
+
|
|
223
|
+
🎯 最佳实践:
|
|
224
|
+
- 对象已有所需字段 → 直接传入:calc("a + b", obj)
|
|
225
|
+
- 需要多个独立变量 → 使用简写:calc("a + b", {a, b})
|
|
226
|
+
- 避免冗余写法 → ❌ calc("a + b", {a: obj.a, b: obj.b})
|
|
227
|
+
|
|
228
|
+
快速示例:
|
|
154
229
|
- calc_sum("a + b", [{a:1,b:2}, {a:3,b:4}]) → "10"
|
|
155
|
-
- calc_sum("price * qty
|
|
230
|
+
- calc_sum("price * qty", [{price:99.9,qty:2}, {price:49.9,qty:3}]) → "349.50"
|
|
231
|
+
- calc_sum("price * qty * 0.9 | =2", orders) → 计算所有订单9折后总价
|
|
232
|
+
|
|
233
|
+
优势:
|
|
234
|
+
- 自动处理精度问题
|
|
235
|
+
- 支持复杂表达式
|
|
236
|
+
- 支持格式化输出
|
|
237
|
+
- 性能优于手动累加`,
|
|
156
238
|
inputSchema: {
|
|
157
239
|
type: "object",
|
|
158
240
|
properties: {
|
|
@@ -297,6 +379,24 @@ const TOOLS = [
|
|
|
297
379
|
required: ["topic"],
|
|
298
380
|
},
|
|
299
381
|
},
|
|
382
|
+
{
|
|
383
|
+
name: "debug_info",
|
|
384
|
+
description: `🔍 调试工具 - 获取 MCP 服务器的运行环境信息
|
|
385
|
+
|
|
386
|
+
返回信息:
|
|
387
|
+
- cwd: 当前工作目录 (process.cwd())
|
|
388
|
+
- __dirname: 脚本所在目录
|
|
389
|
+
- __filename: 脚本文件路径
|
|
390
|
+
- node_version: Node.js 版本
|
|
391
|
+
- platform: 操作系统平台
|
|
392
|
+
- env: 相关环境变量
|
|
393
|
+
|
|
394
|
+
用途:调试 MCP 服务器配置问题`,
|
|
395
|
+
inputSchema: {
|
|
396
|
+
type: "object",
|
|
397
|
+
properties: {},
|
|
398
|
+
},
|
|
399
|
+
},
|
|
300
400
|
];
|
|
301
401
|
|
|
302
402
|
// ==================== Resources 定义 ====================
|
|
@@ -660,35 +760,27 @@ calc("(age >= 18 && hasLicense) ? 'can drive' : 'cannot drive'", {
|
|
|
660
760
|
|
|
661
761
|
### 价格计算
|
|
662
762
|
\`\`\`javascript
|
|
663
|
-
// 含税价格
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
//
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
}) // "314.70"
|
|
763
|
+
// 含税价格 - 如果有 product 对象包含 price 和 taxRate
|
|
764
|
+
const product = {price: 100, taxRate: 0.13}
|
|
765
|
+
calc("price * (1 + taxRate) | =2", product) // "113.00"
|
|
766
|
+
|
|
767
|
+
// 折扣价格 - 直接传入商品对象
|
|
768
|
+
const item = {price: 199.9, discount: 0.8}
|
|
769
|
+
calc("price * discount | =2", item) // "159.92"
|
|
770
|
+
|
|
771
|
+
// 订单总价 - 直接传入订单对象
|
|
772
|
+
const order = {price: 99.9, qty: 3, shipping: 15}
|
|
773
|
+
calc("price * qty + shipping | =2,", order) // "314.70"
|
|
675
774
|
\`\`\`
|
|
676
775
|
|
|
677
776
|
### 利率计算
|
|
678
777
|
\`\`\`javascript
|
|
679
|
-
// 单利
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
rate: 0.05,
|
|
683
|
-
time: 2
|
|
684
|
-
}) // "1000.00"
|
|
778
|
+
// 单利 - 直接传入投资对象
|
|
779
|
+
const investment = {principal: 10000, rate: 0.05, time: 2}
|
|
780
|
+
calc("principal * rate * time | =2", investment) // "1000.00"
|
|
685
781
|
|
|
686
782
|
// 复利
|
|
687
|
-
calc("principal * pow(1 + rate, time) - principal | =2",
|
|
688
|
-
principal: 10000,
|
|
689
|
-
rate: 0.05,
|
|
690
|
-
time: 2
|
|
691
|
-
}) // "1025.00"
|
|
783
|
+
calc("principal * pow(1 + rate, time) - principal | =2", investment) // "1025.00"
|
|
692
784
|
\`\`\`
|
|
693
785
|
|
|
694
786
|
## 电商场景
|
|
@@ -706,7 +798,8 @@ calc_sum("price * qty | =2", items) // "548.50"
|
|
|
706
798
|
|
|
707
799
|
### 优惠券计算
|
|
708
800
|
\`\`\`javascript
|
|
709
|
-
|
|
801
|
+
const cart = {total: 250}
|
|
802
|
+
calc("total > 200 ? total * 0.9 : total | =2", cart) // "225.00"
|
|
710
803
|
\`\`\`
|
|
711
804
|
|
|
712
805
|
## 数据格式化
|
|
@@ -775,6 +868,170 @@ cmul(99.9, 3) // 单价 * 数量
|
|
|
775
868
|
`
|
|
776
869
|
};
|
|
777
870
|
|
|
871
|
+
// ==================== Prompts 定义 ====================
|
|
872
|
+
|
|
873
|
+
const PROMPTS = [
|
|
874
|
+
{
|
|
875
|
+
name: "a-calc",
|
|
876
|
+
description: "强制在所有数值计算中使用 a-calc(推荐)",
|
|
877
|
+
arguments: [],
|
|
878
|
+
},
|
|
879
|
+
];
|
|
880
|
+
|
|
881
|
+
const PROMPT_CONTENTS = {
|
|
882
|
+
"a-calc": {
|
|
883
|
+
messages: [
|
|
884
|
+
{
|
|
885
|
+
role: "user",
|
|
886
|
+
content: {
|
|
887
|
+
type: "text",
|
|
888
|
+
text: `# 数值计算强制规则
|
|
889
|
+
|
|
890
|
+
⚠️ **重要:在本次对话中,所有数值计算必须使用 a-calc MCP 工具!**
|
|
891
|
+
|
|
892
|
+
## 强制使用场景
|
|
893
|
+
|
|
894
|
+
### 1. 任何涉及小数的运算(必须使用)
|
|
895
|
+
- ✅ 使用 calc("0.1 + 0.2")
|
|
896
|
+
- ❌ 不要直接计算 0.1 + 0.2
|
|
897
|
+
|
|
898
|
+
### 2. 价格和金额计算(必须使用)
|
|
899
|
+
- ✅ 使用 calc("price * qty | =2", item) // 直接传入对象
|
|
900
|
+
- ❌ 不要使用 JavaScript 的 * 运算符
|
|
901
|
+
|
|
902
|
+
### 3. 百分比和折扣计算(必须使用)
|
|
903
|
+
- ✅ 使用 calc("price * 0.9 | =2", product) // 直接传入对象
|
|
904
|
+
- ❌ 不要直接计算
|
|
905
|
+
|
|
906
|
+
### 4. 需要格式化的数值(必须使用)
|
|
907
|
+
- ✅ 使用 fmt(1234567, ",") 或 calc("value | ,", data)
|
|
908
|
+
- ❌ 不要使用 toLocaleString()
|
|
909
|
+
|
|
910
|
+
### 5. 批量数据计算(必须使用)
|
|
911
|
+
- ✅ 使用 calc_sum("price * qty", items)
|
|
912
|
+
- ❌ 不要使用 reduce() 或 forEach() 手动累加
|
|
913
|
+
|
|
914
|
+
## 可以不使用的场景
|
|
915
|
+
|
|
916
|
+
只有以下情况可以不使用 a-calc:
|
|
917
|
+
- 简单的整数加减:1 + 1, 10 - 5
|
|
918
|
+
- 数组长度、索引等非计算场景
|
|
919
|
+
|
|
920
|
+
## 为什么必须使用 a-calc?
|
|
921
|
+
|
|
922
|
+
JavaScript 的浮点数精度问题:
|
|
923
|
+
- 0.1 + 0.2 = 0.30000000000000004 ❌
|
|
924
|
+
- 0.3 - 0.1 = 0.19999999999999998 ❌
|
|
925
|
+
- 99.9 * 3 = 299.70000000000005 ❌
|
|
926
|
+
|
|
927
|
+
使用 a-calc 后:
|
|
928
|
+
- calc("0.1 + 0.2") = "0.3" ✅
|
|
929
|
+
- calc("0.3 - 0.1") = "0.2" ✅
|
|
930
|
+
- calc("99.9 * 3") = "299.7" ✅
|
|
931
|
+
|
|
932
|
+
## 编码规范和最佳实践
|
|
933
|
+
|
|
934
|
+
### ❌ 错误写法 1:使用模板字符串拼接
|
|
935
|
+
\`\`\`javascript
|
|
936
|
+
// 不要这样写!
|
|
937
|
+
let total = '0'
|
|
938
|
+
cart.forEach(item => {
|
|
939
|
+
total = calc(\`\${total} + \${item.price} * \${item.quantity}\`)
|
|
940
|
+
})
|
|
941
|
+
\`\`\`
|
|
942
|
+
**问题**:代码不清晰、难以维护、性能差
|
|
943
|
+
|
|
944
|
+
### ❌ 错误写法 2:重复写字段名(冗余)
|
|
945
|
+
\`\`\`javascript
|
|
946
|
+
// 不要这样写!
|
|
947
|
+
const itemTotal = calc("price * qty | =2", {
|
|
948
|
+
price: item.price,
|
|
949
|
+
qty: item.qty
|
|
950
|
+
})
|
|
951
|
+
\`\`\`
|
|
952
|
+
**问题**:代码冗余、不简洁、重复劳动
|
|
953
|
+
|
|
954
|
+
### ✅ 正确写法 1:使用 calc_sum(批量计算)
|
|
955
|
+
\`\`\`javascript
|
|
956
|
+
const total = calc_sum("price * qty | =2", cart)
|
|
957
|
+
\`\`\`
|
|
958
|
+
|
|
959
|
+
### ✅ 正确写法 2:直接传入对象(最优雅)
|
|
960
|
+
\`\`\`javascript
|
|
961
|
+
// 对象已有所需字段,直接传入
|
|
962
|
+
const itemTotal = calc("price * qty | =2", item)
|
|
963
|
+
\`\`\`
|
|
964
|
+
|
|
965
|
+
### ✅ 正确写法 3:使用变量简写
|
|
966
|
+
\`\`\`javascript
|
|
967
|
+
// 多个独立变量,使用简写
|
|
968
|
+
const result = calc("a + b", {a, b})
|
|
969
|
+
\`\`\`
|
|
970
|
+
|
|
971
|
+
### ✅ 正确写法 4:数组映射
|
|
972
|
+
\`\`\`javascript
|
|
973
|
+
// 对每个对象进行计算
|
|
974
|
+
const results = items.map(item => calc("price * qty | =2", item))
|
|
975
|
+
\`\`\`
|
|
976
|
+
|
|
977
|
+
### 完整示例:购物车计算
|
|
978
|
+
|
|
979
|
+
\`\`\`javascript
|
|
980
|
+
import { calc, calc_sum, fmt } from 'a-calc'
|
|
981
|
+
|
|
982
|
+
// ❌ 错误:使用模板字符串累加
|
|
983
|
+
const wrongTotal = () => {
|
|
984
|
+
let total = '0'
|
|
985
|
+
cart.forEach(item => {
|
|
986
|
+
total = calc(\`\${total} + \${item.price} * \${item.quantity}\`)
|
|
987
|
+
})
|
|
988
|
+
return total
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
// ✅ 正确:使用 calc_sum
|
|
992
|
+
const correctTotal = () => {
|
|
993
|
+
return calc_sum("price * quantity | =2", cart)
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
// ✅ 正确:单个商品小计(直接传入 item 对象)
|
|
997
|
+
const itemSubtotal = (item) => {
|
|
998
|
+
return calc("price * quantity | =2", item)
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
// ✅ 正确:应用折扣(直接传入对象)
|
|
1002
|
+
const applyDiscount = (order) => {
|
|
1003
|
+
return calc("total * (1 - discountRate) | =2", order)
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
// ✅ 正确:含税价格(直接传入对象)
|
|
1007
|
+
const withTax = (order) => {
|
|
1008
|
+
return calc("subtotal * (1 + taxRate) | =2", order)
|
|
1009
|
+
}
|
|
1010
|
+
\`\`\`
|
|
1011
|
+
|
|
1012
|
+
## 核心原则
|
|
1013
|
+
|
|
1014
|
+
1. **批量计算用 calc_sum** - 不要用 forEach 累加
|
|
1015
|
+
2. **变量用第二参数注入** - 不要用模板字符串拼接
|
|
1016
|
+
3. **保持表达式简洁** - 一次计算完成,不要分步累加
|
|
1017
|
+
4. **使用格式化** - 用 \`| =2\` 保留小数位
|
|
1018
|
+
|
|
1019
|
+
## 实施要求
|
|
1020
|
+
|
|
1021
|
+
在编写代码时:
|
|
1022
|
+
1. 遇到数值计算,立即考虑是否需要使用 a-calc
|
|
1023
|
+
2. 涉及小数、金额、价格的,必须使用 a-calc
|
|
1024
|
+
3. 优先使用 calc_sum 处理数组数据
|
|
1025
|
+
4. 使用第二参数注入变量,不要用模板字符串
|
|
1026
|
+
5. 在代码注释中说明为什么使用 a-calc
|
|
1027
|
+
|
|
1028
|
+
请确认你理解并将严格遵守这些规则。`,
|
|
1029
|
+
},
|
|
1030
|
+
},
|
|
1031
|
+
],
|
|
1032
|
+
},
|
|
1033
|
+
};
|
|
1034
|
+
|
|
778
1035
|
// ==================== Server Setup ====================
|
|
779
1036
|
|
|
780
1037
|
const server = new Server(
|
|
@@ -786,6 +1043,7 @@ const server = new Server(
|
|
|
786
1043
|
capabilities: {
|
|
787
1044
|
tools: {},
|
|
788
1045
|
resources: {},
|
|
1046
|
+
prompts: {},
|
|
789
1047
|
},
|
|
790
1048
|
}
|
|
791
1049
|
);
|
|
@@ -989,6 +1247,31 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
989
1247
|
};
|
|
990
1248
|
}
|
|
991
1249
|
|
|
1250
|
+
case "debug_info": {
|
|
1251
|
+
const debugInfo = {
|
|
1252
|
+
cwd: process.cwd(),
|
|
1253
|
+
__dirname: import.meta.url,
|
|
1254
|
+
node_version: process.version,
|
|
1255
|
+
platform: process.platform,
|
|
1256
|
+
arch: process.arch,
|
|
1257
|
+
env: {
|
|
1258
|
+
HOME: process.env.HOME,
|
|
1259
|
+
USERPROFILE: process.env.USERPROFILE,
|
|
1260
|
+
PATH: process.env.PATH?.split(process.platform === 'win32' ? ';' : ':').slice(0, 5).join('\n '),
|
|
1261
|
+
NODE_ENV: process.env.NODE_ENV,
|
|
1262
|
+
},
|
|
1263
|
+
};
|
|
1264
|
+
|
|
1265
|
+
return {
|
|
1266
|
+
content: [
|
|
1267
|
+
{
|
|
1268
|
+
type: "text",
|
|
1269
|
+
text: JSON.stringify(debugInfo, null, 2),
|
|
1270
|
+
},
|
|
1271
|
+
],
|
|
1272
|
+
};
|
|
1273
|
+
}
|
|
1274
|
+
|
|
992
1275
|
default:
|
|
993
1276
|
throw new Error(`Unknown tool: ${name}`);
|
|
994
1277
|
}
|
|
@@ -1032,6 +1315,22 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
|
1032
1315
|
throw new Error(`Resource not found: ${uri}`);
|
|
1033
1316
|
});
|
|
1034
1317
|
|
|
1318
|
+
// ==================== Prompt Handlers ====================
|
|
1319
|
+
|
|
1320
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
1321
|
+
return { prompts: PROMPTS };
|
|
1322
|
+
});
|
|
1323
|
+
|
|
1324
|
+
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
1325
|
+
const { name } = request.params;
|
|
1326
|
+
|
|
1327
|
+
if (PROMPT_CONTENTS[name]) {
|
|
1328
|
+
return PROMPT_CONTENTS[name];
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
throw new Error(`Prompt not found: ${name}`);
|
|
1332
|
+
});
|
|
1333
|
+
|
|
1035
1334
|
// ==================== Start Server ====================
|
|
1036
1335
|
|
|
1037
1336
|
async function main() {
|