bigfive-mcp 1.0.0
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/README.md +37 -0
- package/dist/calculator.d.ts +3 -0
- package/dist/calculator.d.ts.map +1 -0
- package/dist/calculator.js +154 -0
- package/dist/calculator.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +254 -0
- package/dist/index.js.map +1 -0
- package/dist/questions.d.ts +6 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +44 -0
- package/dist/questions.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# bigfive-mcp
|
|
2
|
+
|
|
3
|
+
大五人格测试 MCP Server —— 30 道幽默题目,测测你的 OCEAN 人格海洋,附带"人格天气预报"。
|
|
4
|
+
|
|
5
|
+
## 用法
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx -y bigfive-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
在 Claude Code 或其他 MCP 客户端中添加此服务器后,可以使用以下工具:
|
|
12
|
+
|
|
13
|
+
- `start_bigfive_test` — 开始测试
|
|
14
|
+
- `answer_question` — 提交答案 (1-5 分),获取下一题
|
|
15
|
+
- `get_progress` — 查看进度
|
|
16
|
+
- `calculate_bigfive_result` — 获取完整人格报告
|
|
17
|
+
|
|
18
|
+
## OCEAN 五维人格
|
|
19
|
+
|
|
20
|
+
| 维度 | 含义 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| O (开放性) | 对新事物的好奇心与接受度 |
|
|
23
|
+
| C (尽责性) | 自律、条理与靠谱程度 |
|
|
24
|
+
| E (外向性) | 从社交中获取能量的程度 |
|
|
25
|
+
| A (宜人性) | 同理心与合作倾向 |
|
|
26
|
+
| N (神经质) | 情绪敏感度与波动幅度 |
|
|
27
|
+
|
|
28
|
+
每维度 6 题,每题 1-5 分,最终输出百分比得分 + 等级解读 + 人格天气预报。
|
|
29
|
+
|
|
30
|
+
## 本地开发
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install
|
|
34
|
+
npm run dev # tsx 热运行
|
|
35
|
+
npm run build # tsc 编译
|
|
36
|
+
npm start # 运行编译产物
|
|
37
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../src/calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkE,UAAU,EAAmB,MAAM,YAAY,CAAC;AA2HjI,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAoD7D"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { DIMENSION_LABELS, DIMENSION_EMOJIS } from './types.js';
|
|
2
|
+
import { QUESTIONS_PER_DIMENSION } from './questions.js';
|
|
3
|
+
const MAX_PER_DIMENSION = QUESTIONS_PER_DIMENSION * 5; // 6题 × 5分 = 30
|
|
4
|
+
const levelDescriptions = {
|
|
5
|
+
O: {
|
|
6
|
+
high: '思想探险家:对一切新鲜事物持有"请开始你的表演"的态度。你的大脑没有围墙,只有欢迎光临的地毯。',
|
|
7
|
+
medium: '开放见习生:你对新事物持"先看菜单再决定"的态度——有好奇心但不上头,有判断力但不保守。一种很健康的中间态。',
|
|
8
|
+
low: '务实主义者:你更相信"试过才信"而非"听说过就想试"。不是不感兴趣,是你的信任需要通过实践认证——这其实很酷。',
|
|
9
|
+
},
|
|
10
|
+
C: {
|
|
11
|
+
high: '自律王者:你的人生有彩色Excel甘特图。别人看到的是你的成就,没看到的是你在背后搭建的那套精密运转的系统。',
|
|
12
|
+
medium: '弹性计划家:你时而自律时而放纵,在"早起健身"和"再睡五分钟"之间达到了某种微妙的动态平衡。挺好的。',
|
|
13
|
+
low: '随性艺术家:计划是用来打破的,deadline是用来呼吸的。你不是不靠谱,你只是拥有一种"在混乱中找到秩序"的特殊天赋——虽然有时候找到的是更高的混乱。',
|
|
14
|
+
},
|
|
15
|
+
E: {
|
|
16
|
+
high: '社交充电宝:靠和别人聊天回复HP。你的存在让任何聚会多了30%的热闹和50%的惊喜——数据未经科学验证,但目测准确。',
|
|
17
|
+
medium: '可切换模式:你不是社恐也不是社牛,你是"社交变形虫"——需要的时候能嗨,不需要的时候能宅。这种灵活性很珍贵。',
|
|
18
|
+
low: '精致内向者:社交是消耗品,独处是充电器。你不是不会社交,你只是觉得每次社交后需要一个对等长度的假期来恢复。你的内心世界丰富到不需要太多外界输入。',
|
|
19
|
+
},
|
|
20
|
+
A: {
|
|
21
|
+
high: '人间天使:你的同理心雷达全天候开着。你让人感到安全、被理解、被接纳——这可能是你能给这个世界最好的礼物。',
|
|
22
|
+
medium: '温柔把关人:你善良但有底线,温柔但有准则。你给的温暖不是无差别投放,是经过考量的馈赠。这是成熟的善意。',
|
|
23
|
+
low: '理性批判者:你的温柔有严格的准入门槛。你不是不善良,只是不会把善良烂大街地分发——你的善意需要对方用真诚来兑换。这也是一种公平。',
|
|
24
|
+
},
|
|
25
|
+
N: {
|
|
26
|
+
high: '情绪地震仪:能感知到别人肉眼看不到的情绪波动。你的敏感不是弱点,是你理解世界的一种特别细腻的方式——虽然有时候细腻到自己也疼。',
|
|
27
|
+
medium: '情绪恒温器:你能感受到情绪波动,但不会被它卷走。像一个会摇晃但不倒的不倒翁——你知道情绪来了,也知道它会走。',
|
|
28
|
+
low: '淡定之王:天塌下来你先拍照发朋友圈。情绪平稳到让人怀疑你是不是偷偷练了冥想——但其实你只是天生有一种"急也没用,不如冷静"的内在节奏。',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
function getLevel(score) {
|
|
32
|
+
if (score >= 65)
|
|
33
|
+
return 'high';
|
|
34
|
+
if (score >= 35)
|
|
35
|
+
return 'medium';
|
|
36
|
+
return 'low';
|
|
37
|
+
}
|
|
38
|
+
function getLevelLabel(level) {
|
|
39
|
+
if (level === 'high')
|
|
40
|
+
return '偏高';
|
|
41
|
+
if (level === 'medium')
|
|
42
|
+
return '适中';
|
|
43
|
+
return '偏低';
|
|
44
|
+
}
|
|
45
|
+
function generateWeather(dimensions) {
|
|
46
|
+
const highDims = dimensions.filter(d => d.level === 'high');
|
|
47
|
+
const lowDims = dimensions.filter(d => d.level === 'low');
|
|
48
|
+
// Main "weather" determined by dominant traits
|
|
49
|
+
const dominant = [...highDims].sort((a, b) => b.score - a.score);
|
|
50
|
+
const weakest = [...lowDims].sort((a, b) => a.score - b.score);
|
|
51
|
+
const highEmojis = dominant.map(d => d.emoji).join('');
|
|
52
|
+
const lowEmojis = weakest.map(d => d.emoji).join('');
|
|
53
|
+
// Overall description
|
|
54
|
+
const overallParts = [];
|
|
55
|
+
if (dominant.length > 0) {
|
|
56
|
+
const dominantLabels = dominant.map(d => d.label).join('和');
|
|
57
|
+
overallParts.push(`你的人格天气以${dominantLabels}为主导气流`);
|
|
58
|
+
}
|
|
59
|
+
if (weakest.length > 0) {
|
|
60
|
+
const lowLabels = weakest.map(d => d.label).join('和');
|
|
61
|
+
overallParts.push(`${lowLabels}方面相对平和`);
|
|
62
|
+
}
|
|
63
|
+
if (overallParts.length === 0) {
|
|
64
|
+
overallParts.push('你的人格天气多云转晴,各维度均衡发展');
|
|
65
|
+
}
|
|
66
|
+
const overall = overallParts.join(',') + '。';
|
|
67
|
+
// Today's vibe
|
|
68
|
+
const todayOptions = [
|
|
69
|
+
'今天适合尝试一件你一直想做但没敢做的事情——哪怕只是点一道没吃过的菜。',
|
|
70
|
+
'今天适合给别人一个真诚的夸奖,它的回波效应会让你自己也很开心。',
|
|
71
|
+
'今天适合做五分钟的"什么都不做"——拒绝所有待办事项的召唤,单纯地呼吸。',
|
|
72
|
+
'今天适合联系一个很久没联系的朋友,不需要理由,只需要一句"突然想你了"。',
|
|
73
|
+
'今天适合把你的想法写下来——不是给别人看的总结,是给自己看的诚实记录。',
|
|
74
|
+
];
|
|
75
|
+
const today = todayOptions[Math.floor(Math.random() * todayOptions.length)];
|
|
76
|
+
// Warning
|
|
77
|
+
const warningOptions = [];
|
|
78
|
+
if (dimensions.find(d => d.dimension === 'N' && d.level === 'high')) {
|
|
79
|
+
warningOptions.push('今天可能会有"想太多"的倾向,建议在看到已读不回的时候先深呼吸,而不是开始编剧本。');
|
|
80
|
+
}
|
|
81
|
+
if (dimensions.find(d => d.dimension === 'E' && d.level === 'high')) {
|
|
82
|
+
warningOptions.push('注意社交电量过载——再嗨也要记得喝水,再开心也要记得回家。');
|
|
83
|
+
}
|
|
84
|
+
if (dimensions.find(d => d.dimension === 'C' && d.level === 'high')) {
|
|
85
|
+
warningOptions.push('当心过度计划的陷阱——把所有事情都安排完美了,留给意外的空间就太小了。');
|
|
86
|
+
}
|
|
87
|
+
if (dimensions.find(d => d.dimension === 'A' && d.level === 'high')) {
|
|
88
|
+
warningOptions.push('今天可能会有人来寻求你的安慰和帮助,记得先照顾好自己的情绪再照顾别人。');
|
|
89
|
+
}
|
|
90
|
+
if (dimensions.find(d => d.dimension === 'O' && d.level === 'high')) {
|
|
91
|
+
warningOptions.push('今天可能会被十七个新想法同时轰炸——选一个最喜欢的先试试,不用全部同时进行。');
|
|
92
|
+
}
|
|
93
|
+
if (warningOptions.length === 0) {
|
|
94
|
+
warningOptions.push('今天没有什么特别的预警,保持你现在这种张弛有度的状态就很好。');
|
|
95
|
+
}
|
|
96
|
+
const warning = warningOptions[Math.floor(Math.random() * warningOptions.length)];
|
|
97
|
+
// Lucky thing
|
|
98
|
+
const luckyOptions = [
|
|
99
|
+
'幸运事物:一杯在正确温度喝到的饮品',
|
|
100
|
+
'幸运事物:楼道里偶遇的一只猫(或狗)',
|
|
101
|
+
'幸运事物:一首恰好切到你心事的歌',
|
|
102
|
+
'幸运事物:今天傍晚六点三十一分的天空',
|
|
103
|
+
'幸运事物:一个你伸手就能拿到的、让你会心一笑的小物件',
|
|
104
|
+
'幸运事物:一条突如其来的好消息——可能来自一个意想不到的人',
|
|
105
|
+
];
|
|
106
|
+
const lucky = luckyOptions[Math.floor(Math.random() * luckyOptions.length)];
|
|
107
|
+
return { overall, today, warning, lucky };
|
|
108
|
+
}
|
|
109
|
+
export function calculateResult(answers) {
|
|
110
|
+
const allDimensions = ['O', 'C', 'E', 'A', 'N'];
|
|
111
|
+
// 各维度总分: questionId 1-6=O, 7-12=C, 13-18=E, 19-24=A, 25-30=N
|
|
112
|
+
const rawScores = { O: 0, C: 0, E: 0, A: 0, N: 0 };
|
|
113
|
+
for (const a of answers) {
|
|
114
|
+
const dimIdx = Math.floor((a.questionId - 1) / QUESTIONS_PER_DIMENSION);
|
|
115
|
+
const dim = allDimensions[dimIdx];
|
|
116
|
+
if (dim)
|
|
117
|
+
rawScores[dim] += a.score;
|
|
118
|
+
}
|
|
119
|
+
const dimensions = allDimensions.map(dim => {
|
|
120
|
+
const pct = Math.round(rawScores[dim] / MAX_PER_DIMENSION * 100);
|
|
121
|
+
const level = getLevel(pct);
|
|
122
|
+
return {
|
|
123
|
+
dimension: dim,
|
|
124
|
+
label: DIMENSION_LABELS[dim],
|
|
125
|
+
emoji: DIMENSION_EMOJIS[dim],
|
|
126
|
+
score: pct,
|
|
127
|
+
level,
|
|
128
|
+
description: levelDescriptions[dim][level],
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
const weather = generateWeather(dimensions);
|
|
132
|
+
// Summary
|
|
133
|
+
const highTraits = dimensions
|
|
134
|
+
.filter(d => d.level === 'high')
|
|
135
|
+
.map(d => d.label.split(' ')[0])
|
|
136
|
+
.join('、');
|
|
137
|
+
const summary = highTraits
|
|
138
|
+
? `你的人格画像中最突出的是${highTraits}——这是你的超能力区域,也是你面对世界的独特方式。你的每一项特质都不是"得分"或"扣分",它们只是诚实地描述了"你是谁"。而这已经足够好了。`
|
|
139
|
+
: '你的人格画像相当均衡——你不偏科,什么都会一点,什么都不过火。这是一种罕见的"人格多边形战士"体质。';
|
|
140
|
+
// Cheers
|
|
141
|
+
const cheers = [
|
|
142
|
+
'人格测试不是考试,没有及格线。你的每一个"偏高"或"偏低"都不是缺陷,是特征。就像一棵树不会因为长得不像另一棵树而道歉——你也一样。',
|
|
143
|
+
'你知道吗?心理学上说,了解自己的人格特质不是为了给自己贴标签,而是为了更好地和自己相处。你已经迈出了那一步,这本身就值得鼓掌。',
|
|
144
|
+
'今天的你,不管在哪个维度上得分如何,都是目前为止最完整的版本。不需要成为别人,你的出厂配置已经很棒了。',
|
|
145
|
+
'大五人格的发明者说过:人格没有好坏之分。一个高神经质的人可能比一个低神经质的人更容易成为一个伟大的艺术家。你的每一个特质都有它的主场。',
|
|
146
|
+
][Math.floor(Math.random() * 4)];
|
|
147
|
+
// 构建 scores 对象
|
|
148
|
+
const scores = {};
|
|
149
|
+
for (const d of dimensions) {
|
|
150
|
+
scores[d.dimension] = d.score;
|
|
151
|
+
}
|
|
152
|
+
return { type: 'bigfive', typeName: '大五人格 (OCEAN)', scores, dimensions, weather, summary, cheers };
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=calculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../src/calculator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* BigFive MCP Server — 大五人格测试
|
|
4
|
+
* 30道幽默题目 · OCEAN五维人格 · 人格天气预报
|
|
5
|
+
*
|
|
6
|
+
* 用法: npx -y bigfive-mcp
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
9
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
10
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import { questions, TOTAL_QUESTIONS } from './questions.js';
|
|
12
|
+
import { calculateResult } from './calculator.js';
|
|
13
|
+
const server = new Server({ name: 'bigfive-mcp-server', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
14
|
+
// ==================== List tools ====================
|
|
15
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
16
|
+
tools: [
|
|
17
|
+
{
|
|
18
|
+
name: 'start_bigfive_test',
|
|
19
|
+
description: `开始大五人格测试!一共${TOTAL_QUESTIONS}道风趣幽默的题目,测测你的OCEAN人格海洋(开放性、尽责性、外向性、宜人性、神经质)。每题回答1-5分,放轻松,没有对错。`,
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: 'object',
|
|
22
|
+
properties: {},
|
|
23
|
+
required: [],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'answer_question',
|
|
28
|
+
description: '提交当前问题的答案(1-5分),获取下一题或最终结果提示。',
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {
|
|
32
|
+
session: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
description: '测试会话状态',
|
|
35
|
+
properties: {
|
|
36
|
+
answers: { type: 'array', items: { type: 'object', properties: { questionId: { type: 'number' }, score: { type: 'number' } } } },
|
|
37
|
+
currentQuestionIndex: { type: 'number' },
|
|
38
|
+
},
|
|
39
|
+
required: ['answers', 'currentQuestionIndex'],
|
|
40
|
+
},
|
|
41
|
+
score: {
|
|
42
|
+
type: 'number',
|
|
43
|
+
description: '1=完全不像我, 2=不太像我, 3=有时候像, 4=挺像我的, 5=这就是我本人!',
|
|
44
|
+
minimum: 1,
|
|
45
|
+
maximum: 5,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
required: ['session', 'score'],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'get_progress',
|
|
53
|
+
description: '看看你做了多少题了,还差几题就能看到你的人格海洋报告。',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: {
|
|
57
|
+
session: {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
answers: { type: 'array' },
|
|
61
|
+
currentQuestionIndex: { type: 'number' },
|
|
62
|
+
},
|
|
63
|
+
required: ['answers', 'currentQuestionIndex'],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
required: ['session'],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'calculate_bigfive_result',
|
|
71
|
+
description: `做完所有${TOTAL_QUESTIONS}题后,获取你的大五人格报告!包含五维度得分(百分比)、等级解读(偏高/适中/偏低带趣味评语)和专属"人格天气预报"。`,
|
|
72
|
+
inputSchema: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
session: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
answers: { type: 'array' },
|
|
79
|
+
currentQuestionIndex: { type: 'number' },
|
|
80
|
+
},
|
|
81
|
+
required: ['answers', 'currentQuestionIndex'],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
required: ['session'],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
}));
|
|
89
|
+
// ==================== Call tool ====================
|
|
90
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
91
|
+
const { name, arguments: args } = request.params;
|
|
92
|
+
try {
|
|
93
|
+
// --- start_bigfive_test ---
|
|
94
|
+
if (name === 'start_bigfive_test') {
|
|
95
|
+
const session = { answers: [], currentQuestionIndex: 0 };
|
|
96
|
+
return {
|
|
97
|
+
content: [{
|
|
98
|
+
type: 'text', text: JSON.stringify({
|
|
99
|
+
message: `🧠 大五人格测试(OCEAN)开始啦!一共 ${TOTAL_QUESTIONS} 题,放轻松,这不是考试——它更像一面有趣的镜子,帮你看见自己平时没注意到的那些特质。`,
|
|
100
|
+
aboutTheTest: '每道题请根据你的第一反应打分:1=完全不像我 · 2=不太像我 · 3=有时候像 · 4=挺像我的 · 5=这就是我本人!',
|
|
101
|
+
dimensions: {
|
|
102
|
+
'🌌 O (开放性)': '对新鲜事物的好奇心和接受度——你的大脑围墙有多高?',
|
|
103
|
+
'📋 C (尽责性)': '自律、条理、靠谱程度——你是Excel甘特图还是"deadline是第一生产力"?',
|
|
104
|
+
'🎉 E (外向性)': '从社交中获取能量的程度——你是社交充电宝还是精致独处者?',
|
|
105
|
+
'🕊️ A (宜人性)': '同理心与合作的倾向——你是人间天使还是有门槛的温柔?',
|
|
106
|
+
'🌊 N (神经质)': '情绪敏感度和波动幅度——你的内心是微波荡漾还是海啸频发?',
|
|
107
|
+
},
|
|
108
|
+
currentQuestion: {
|
|
109
|
+
index: 1,
|
|
110
|
+
total: TOTAL_QUESTIONS,
|
|
111
|
+
question: questions[0],
|
|
112
|
+
},
|
|
113
|
+
session,
|
|
114
|
+
}, null, 2),
|
|
115
|
+
}],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// --- answer_question ---
|
|
119
|
+
if (name === 'answer_question') {
|
|
120
|
+
const session = (args?.session ?? { answers: [], currentQuestionIndex: 0 });
|
|
121
|
+
const score = Number(args?.score ?? 3);
|
|
122
|
+
const currentQ = questions[session.currentQuestionIndex];
|
|
123
|
+
if (!currentQ) {
|
|
124
|
+
return {
|
|
125
|
+
content: [{ type: 'text', text: JSON.stringify({ error: '会话状态异常,请重新开始测试。' }) }],
|
|
126
|
+
isError: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const updatedSession = {
|
|
130
|
+
...session,
|
|
131
|
+
answers: [...session.answers, { questionId: currentQ.id, score }],
|
|
132
|
+
currentQuestionIndex: session.currentQuestionIndex + 1,
|
|
133
|
+
};
|
|
134
|
+
// 全部完成
|
|
135
|
+
if (updatedSession.currentQuestionIndex >= TOTAL_QUESTIONS) {
|
|
136
|
+
return {
|
|
137
|
+
content: [{
|
|
138
|
+
type: 'text', text: JSON.stringify({
|
|
139
|
+
message: `🎉 所有 ${TOTAL_QUESTIONS} 道题都答完了!你太棒了——花了时间了解自己,这本身就是一件很酷的事。`,
|
|
140
|
+
completed: true,
|
|
141
|
+
progress: { answered: updatedSession.answers.length, total: TOTAL_QUESTIONS },
|
|
142
|
+
session: updatedSession,
|
|
143
|
+
nextStep: '快来用 calculate_bigfive_result 揭晓你的大五人格报告和人格天气预报吧!',
|
|
144
|
+
}, null, 2),
|
|
145
|
+
}],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// 中间鼓励
|
|
149
|
+
const nextQ = questions[updatedSession.currentQuestionIndex];
|
|
150
|
+
const progressPct = Math.round(updatedSession.currentQuestionIndex / TOTAL_QUESTIONS * 100);
|
|
151
|
+
const encouragement = progressPct < 30
|
|
152
|
+
? '开局不错!你的人格画像正在慢慢浮现,继续下去~'
|
|
153
|
+
: progressPct < 60
|
|
154
|
+
? '越来越有意思了,我能感觉到你的OCEAN人格海洋正在波动——继续乘风破浪!'
|
|
155
|
+
: progressPct < 90
|
|
156
|
+
? '快做完啦!你五维人格的轮廓已经相当清晰了,这几题过后就能揭晓~'
|
|
157
|
+
: '最后几题了!答案即将揭晓,准备好迎接你的人格天气预报了吗?';
|
|
158
|
+
return {
|
|
159
|
+
content: [{
|
|
160
|
+
type: 'text', text: JSON.stringify({
|
|
161
|
+
message: encouragement,
|
|
162
|
+
progress: {
|
|
163
|
+
answered: updatedSession.answers.length,
|
|
164
|
+
total: TOTAL_QUESTIONS,
|
|
165
|
+
percentage: Math.round(updatedSession.answers.length / TOTAL_QUESTIONS * 100),
|
|
166
|
+
},
|
|
167
|
+
nextQuestion: {
|
|
168
|
+
index: updatedSession.currentQuestionIndex + 1,
|
|
169
|
+
total: TOTAL_QUESTIONS,
|
|
170
|
+
question: nextQ,
|
|
171
|
+
},
|
|
172
|
+
session: updatedSession,
|
|
173
|
+
}, null, 2),
|
|
174
|
+
}],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// --- get_progress ---
|
|
178
|
+
if (name === 'get_progress') {
|
|
179
|
+
const session = (args?.session ?? { answers: [], currentQuestionIndex: 0 });
|
|
180
|
+
const answered = session.answers?.length ?? 0;
|
|
181
|
+
const pct = Math.round(answered / TOTAL_QUESTIONS * 100);
|
|
182
|
+
return {
|
|
183
|
+
content: [{
|
|
184
|
+
type: 'text', text: JSON.stringify({
|
|
185
|
+
answered,
|
|
186
|
+
total: TOTAL_QUESTIONS,
|
|
187
|
+
percentage: pct,
|
|
188
|
+
remaining: TOTAL_QUESTIONS - answered,
|
|
189
|
+
vibes: pct === 0
|
|
190
|
+
? '还没开始呢,输入 start_bigfive_test 来探索你的OCEAN人格海洋吧!'
|
|
191
|
+
: pct === 100
|
|
192
|
+
? '所有题目都答完啦!去用 calculate_bigfive_result 揭晓你的完整报告吧~'
|
|
193
|
+
: `你已经完成了 ${pct}%,还有 ${TOTAL_QUESTIONS - answered} 题~你的性格画像正在逐渐清晰,别停!`,
|
|
194
|
+
}, null, 2),
|
|
195
|
+
}],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// --- calculate_bigfive_result ---
|
|
199
|
+
if (name === 'calculate_bigfive_result') {
|
|
200
|
+
const session = (args?.session ?? { answers: [], currentQuestionIndex: 0 });
|
|
201
|
+
if (!session.answers || session.answers.length < TOTAL_QUESTIONS) {
|
|
202
|
+
return {
|
|
203
|
+
content: [{
|
|
204
|
+
type: 'text', text: JSON.stringify({
|
|
205
|
+
error: '还没做完呢~再回答几题就可以揭晓你的大五人格啦!',
|
|
206
|
+
progress: { answered: session.answers?.length ?? 0, total: TOTAL_QUESTIONS },
|
|
207
|
+
}, null, 2),
|
|
208
|
+
}],
|
|
209
|
+
isError: true,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
const result = calculateResult(session.answers);
|
|
213
|
+
return {
|
|
214
|
+
content: [{
|
|
215
|
+
type: 'text', text: JSON.stringify({
|
|
216
|
+
message: '🧠 你的大五人格(OCEAN)报告已生成!',
|
|
217
|
+
dimensions: result.dimensions.map(d => ({
|
|
218
|
+
trait: d.label,
|
|
219
|
+
emoji: d.emoji,
|
|
220
|
+
score: `${d.score}%`,
|
|
221
|
+
level: d.level === 'high' ? '偏高' : d.level === 'medium' ? '适中' : '偏低',
|
|
222
|
+
interpretation: d.description,
|
|
223
|
+
})),
|
|
224
|
+
personalityWeather: {
|
|
225
|
+
title: '🌤️ 人格天气预报',
|
|
226
|
+
overall: result.weather.overall,
|
|
227
|
+
today: result.weather.today,
|
|
228
|
+
warning: '⚠️ ' + result.weather.warning,
|
|
229
|
+
lucky: '🍀 ' + result.weather.lucky,
|
|
230
|
+
},
|
|
231
|
+
summary: result.summary,
|
|
232
|
+
cheers: result.cheers,
|
|
233
|
+
finalThought: '大五人格不是给你贴标签,而是帮你更好地理解自己——你的每一个特质,无论"偏高"还是"偏低",都曾经在某一个时刻帮过你。它们不是bug,是你的feature。谢谢你相信自己值得被了解。',
|
|
234
|
+
}, null, 2),
|
|
235
|
+
}],
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: '未知工具' }) }], isError: true };
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
return {
|
|
242
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error instanceof Error ? error.message : '未知错误' }) }],
|
|
243
|
+
isError: true,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
// ==================== 启动 ====================
|
|
248
|
+
async function main() {
|
|
249
|
+
const transport = new StdioServerTransport();
|
|
250
|
+
await server.connect(transport);
|
|
251
|
+
console.error('🧠 BigFive MCP Server running on stdio');
|
|
252
|
+
}
|
|
253
|
+
main().catch((error) => { console.error('Server error:', error); process.exit(1); });
|
|
254
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Question } from './types.js';
|
|
2
|
+
export declare const questions: Question[];
|
|
3
|
+
export declare function getQuestionsByDimension(dimension: string): Question[];
|
|
4
|
+
export declare const TOTAL_QUESTIONS: number;
|
|
5
|
+
export declare const QUESTIONS_PER_DIMENSION = 6;
|
|
6
|
+
//# sourceMappingURL=questions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,eAAO,MAAM,SAAS,EAAE,QAAQ,EAwC/B,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,CAErE;AAED,eAAO,MAAM,eAAe,QAAmB,CAAC;AAChD,eAAO,MAAM,uBAAuB,IAAI,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// 5个维度 × 6题 = 30题 — 幽默、有情绪价值的题目
|
|
2
|
+
export const questions = [
|
|
3
|
+
// ========== O (开放性) ==========
|
|
4
|
+
{ id: 1, text: '你对新事物的态度是"先试再说,大不了丢人"——哪怕那个新事物是一个你完全看不懂的展览、一道连名字都不会念的菜,或者一个根本不知道是干什么的App。', dimension: 'O', emoji: '🌌' },
|
|
5
|
+
{ id: 2, text: '朋友说"我有一个大胆的想法",你的第一反应不是"这靠谱吗",而是"展开说说,需要我帮忙吗"。', dimension: 'O', emoji: '🌌' },
|
|
6
|
+
{ id: 3, text: '你觉得"颠覆认知"这件事本身就很有快感——就像你发现原来西瓜可以蘸酱油吃,而且居然还不错。', dimension: 'O', emoji: '🌌' },
|
|
7
|
+
{ id: 4, text: '你书架上的书籍种类跨度之大,让人怀疑这是不是好几个不同的人共用一个书架。从量子物理到猫咪心理学,主打一个"我不一定能学会,但我必须知道它存在"。', dimension: 'O', emoji: '🌌' },
|
|
8
|
+
{ id: 5, text: '别人追剧你跟不上,因为你总在追一些奇奇怪怪的东西——比如某个冷门国家的独立电影,或者一个只有三千粉丝的B站UP主。', dimension: 'O', emoji: '🌌' },
|
|
9
|
+
{ id: 6, text: '当有人跟你说"这是规矩"的时候,你内心的回答是"规矩是谁定的?为什么要这么定?如果不这样会怎样?如果换一种方式呢?"——你是会认真思考这些问题的,不是杠,是真的好奇。', dimension: 'O', emoji: '🌌' },
|
|
10
|
+
// ========== C (尽责性) ==========
|
|
11
|
+
{ id: 7, text: '你的待办清单不是一张纸,而是一个彩色Excel表格,含优先级、截止日期、完成进度条和条件格式——你自己欣赏它的时候会获得一种类似整理完房间的快感。', dimension: 'C', emoji: '📋' },
|
|
12
|
+
{ id: 8, text: '约会迟到?不可能。你通常是提前十五分钟到然后在附近转一圈假装自己也是刚到的那个人。', dimension: 'C', emoji: '📋' },
|
|
13
|
+
{ id: 9, text: '你说"我再检查一遍"的时候,是真的会再检查一遍——而且是每一遍都像第一遍那样认真,不是敷衍地划一下。', dimension: 'C', emoji: '📋' },
|
|
14
|
+
{ id: 10, text: '你收拾行李的逻辑是"万一要用呢",所以你的行李箱里常年备着创可贴、针线包、备用充电线和一把不知道什么时候才会用到的折叠伞。', dimension: 'C', emoji: '📋' },
|
|
15
|
+
{ id: 11, text: '你答应别人的事情,哪怕对方已经忘了,你也会记得。而且你会在答应的时间之前完成,而不是在deadline前五分钟疯狂输出。', dimension: 'C', emoji: '📋' },
|
|
16
|
+
{ id: 12, text: '你的手机相册是按日期+事件+地点分类的,并且你真心觉得那些从来不整理相册的人"内心很强大,但我不敢深想"。', dimension: 'C', emoji: '📋' },
|
|
17
|
+
// ========== E (外向性) ==========
|
|
18
|
+
{ id: 13, text: '你参加完一个三小时的聚会,回家路上还在群里发消息:"今天太开心了!下次什么时候约?"——你不是客套,你是真的已经在想下次了。', dimension: 'E', emoji: '🎉' },
|
|
19
|
+
{ id: 14, text: '你在电梯里跟陌生人聊天的概率,大概等于别人在电梯里刷手机的概率。而且你聊完真的会觉得心情变好了。', dimension: 'E', emoji: '🎉' },
|
|
20
|
+
{ id: 15, text: '独处对你来说不是"享受安静",而是"暂时没人可以说话所以我在群里发了个段子看看谁先回"。', dimension: 'E', emoji: '🎉' },
|
|
21
|
+
{ id: 16, text: '你认识新朋友的速度让社恐人士感到深深的敬畏——他们还在纠结要不要说第一句话的时候,你已经知道对方家有几口人、养了几只猫、最近在看什么剧了。', dimension: 'E', emoji: '🎉' },
|
|
22
|
+
{ id: 17, text: '你的能量来源是"和喜欢的人待在一起",一个人待着的时候电池电量会缓慢下降,看到朋友发来的消息会瞬间回血。', dimension: 'E', emoji: '🎉' },
|
|
23
|
+
{ id: 18, text: '别人说的"尬聊"对你来说是"还没找到共同话题的聊",而且你非常擅长找到那个共同话题——大概三句话之内。', dimension: 'E', emoji: '🎉' },
|
|
24
|
+
// ========== A (宜人性) ==========
|
|
25
|
+
{ id: 19, text: '看到别人哭,你的眼眶会自动进入预备模式——哪怕你根本不认识对方,哪怕对方只是在电视剧里哭。', dimension: 'A', emoji: '🕊️' },
|
|
26
|
+
{ id: 20, text: '一群人争论去哪里吃饭,你说"随便"是真的觉得大家开心就好,不是被动攻击。你甚至会在心里默默帮每个人考虑忌口和偏好。', dimension: 'A', emoji: '🕊️' },
|
|
27
|
+
{ id: 21, text: '你安慰朋友的方式是"我先听你说完,不打断,不评判,然后在恰当的时候递上一张纸巾和一句你其实很棒"。', dimension: 'A', emoji: '🕊️' },
|
|
28
|
+
{ id: 22, text: '你跟别人吵架之后,对方可能已经忘了,你还在想"我那句是不是说得太过分了,要不要去道个歉"——尽管明明是你占理。', dimension: 'A', emoji: '🕊️' },
|
|
29
|
+
{ id: 23, text: '你夸奖别人的频率高到对方有时候会怀疑你是不是在客套,但你真的不是在客套——你是真心觉得每个人都值得被看见和被肯定。', dimension: 'A', emoji: '🕊️' },
|
|
30
|
+
{ id: 24, text: '你有一种"气氛不舒服探测器",能在一群人里精准地发现那个不太自在的人,然后不动声色地把话题抛给他。这个技能你甚至没有刻意练过。', dimension: 'A', emoji: '🕊️' },
|
|
31
|
+
// ========== N (神经质) ==========
|
|
32
|
+
{ id: 25, text: '你给朋友发了一条消息,对方已读没回——接下来的十五分钟里,你的大脑已经自动生成了至少三个版本的灾难剧本,从"我说错话了"到"他可能出事了"。', dimension: 'N', emoji: '🌊' },
|
|
33
|
+
{ id: 26, text: '你对周围人情绪的感知精度堪比地震仪:对方嘴角下降了0.3毫米你就知道有事,即使对方说"没事"你也知道有事。', dimension: 'N', emoji: '🌊' },
|
|
34
|
+
{ id: 27, text: '你会在睡前突然想起三年前某个尴尬瞬间,然后整个人在床上蜷成一团,内心发出无声的尖叫。', dimension: 'N', emoji: '🌊' },
|
|
35
|
+
{ id: 28, text: '你觉得自己有某种"预知坏事"的超能力——明天有个重要会议,你今晚已经在脑子里把可能出现的二十种问题和对策全部过了一遍。', dimension: 'N', emoji: '🌊' },
|
|
36
|
+
{ id: 29, text: '你的内心世界是一部24小时不间断播放的连续剧,剧情包括但不限于:担忧、感动、焦虑、狂喜、回忆杀和未来预演——而且每一集的情绪都很真实。', dimension: 'N', emoji: '🌊' },
|
|
37
|
+
{ id: 30, text: '你听一首歌可以哭,看一条新闻可以生气一整天,刷到一个治愈视频能让你接下来三个小时都对人生产生新的感悟——你的情感丰富程度大概等于普通人的三倍。', dimension: 'N', emoji: '🌊' },
|
|
38
|
+
];
|
|
39
|
+
export function getQuestionsByDimension(dimension) {
|
|
40
|
+
return questions.filter(q => q.dimension === dimension);
|
|
41
|
+
}
|
|
42
|
+
export const TOTAL_QUESTIONS = questions.length;
|
|
43
|
+
export const QUESTIONS_PER_DIMENSION = 6;
|
|
44
|
+
//# sourceMappingURL=questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** OCEAN 大五人格维度 */
|
|
2
|
+
export type Dimension = 'O' | 'C' | 'E' | 'A' | 'N';
|
|
3
|
+
export declare const DIMENSION_LABELS: Record<Dimension, string>;
|
|
4
|
+
export declare const DIMENSION_EMOJIS: Record<Dimension, string>;
|
|
5
|
+
export interface Question {
|
|
6
|
+
id: number;
|
|
7
|
+
text: string;
|
|
8
|
+
dimension: Dimension;
|
|
9
|
+
emoji: string;
|
|
10
|
+
}
|
|
11
|
+
export interface Answer {
|
|
12
|
+
questionId: number;
|
|
13
|
+
score: number;
|
|
14
|
+
}
|
|
15
|
+
export interface TestSession {
|
|
16
|
+
testType: string;
|
|
17
|
+
answers: Answer[];
|
|
18
|
+
currentQuestionIndex: number;
|
|
19
|
+
}
|
|
20
|
+
export interface DimensionResult {
|
|
21
|
+
dimension: Dimension;
|
|
22
|
+
label: string;
|
|
23
|
+
emoji: string;
|
|
24
|
+
score: number;
|
|
25
|
+
level: 'high' | 'medium' | 'low';
|
|
26
|
+
description: string;
|
|
27
|
+
}
|
|
28
|
+
export interface WeatherForecast {
|
|
29
|
+
overall: string;
|
|
30
|
+
today: string;
|
|
31
|
+
warning: string;
|
|
32
|
+
lucky: string;
|
|
33
|
+
}
|
|
34
|
+
export interface TestResult {
|
|
35
|
+
type: string;
|
|
36
|
+
typeName: string;
|
|
37
|
+
scores: Record<string, number>;
|
|
38
|
+
dimensions: DimensionResult[];
|
|
39
|
+
weather: WeatherForecast;
|
|
40
|
+
summary: string;
|
|
41
|
+
cheers: string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEpD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMtD,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const DIMENSION_LABELS = {
|
|
2
|
+
O: '开放性 (Openness)',
|
|
3
|
+
C: '尽责性 (Conscientiousness)',
|
|
4
|
+
E: '外向性 (Extraversion)',
|
|
5
|
+
A: '宜人性 (Agreeableness)',
|
|
6
|
+
N: '神经质 (Neuroticism)',
|
|
7
|
+
};
|
|
8
|
+
export const DIMENSION_EMOJIS = {
|
|
9
|
+
O: '🌌',
|
|
10
|
+
C: '📋',
|
|
11
|
+
E: '🎉',
|
|
12
|
+
A: '🕊️',
|
|
13
|
+
N: '🌊',
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,CAAC,EAAE,gBAAgB;IACnB,CAAC,EAAE,yBAAyB;IAC5B,CAAC,EAAE,oBAAoB;IACvB,CAAC,EAAE,qBAAqB;IACxB,CAAC,EAAE,mBAAmB;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,IAAI;CACR,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bigfive-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "大五人格测试 MCP Server — 30道幽默题目,测测你的OCEAN人格海洋,附带人格天气预报",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": "./dist/index.js",
|
|
7
|
+
"files": ["dist", "README.md"],
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc",
|
|
10
|
+
"start": "node dist/index.js",
|
|
11
|
+
"dev": "tsx src/index.ts",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"keywords": ["mcp", "bigfive", "ocean", "personality", "fun", "psychology"],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": { "@modelcontextprotocol/sdk": "^1.0.4" },
|
|
17
|
+
"devDependencies": { "@types/node": "^22.10.2", "tsx": "^4.0.0", "typescript": "^5.7.2" },
|
|
18
|
+
"engines": { "node": ">=18.0.0" }
|
|
19
|
+
}
|