attachment-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 +44 -0
- package/dist/calculator.d.ts +3 -0
- package/dist/calculator.d.ts.map +1 -0
- package/dist/calculator.js +66 -0
- package/dist/calculator.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/questions.d.ts +3 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +32 -0
- package/dist/questions.js.map +1 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Attachment MCP Server
|
|
2
|
+
|
|
3
|
+
依恋风格测试 MCP Server —— 24 道温柔的关系题目,探索你在亲密关系中的真实模样。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g attachment-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## MCP 配置
|
|
12
|
+
|
|
13
|
+
在 Claude Code 或其他 MCP 客户端的配置文件中添加:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"mcpServers": {
|
|
18
|
+
"attachment": {
|
|
19
|
+
"command": "npx",
|
|
20
|
+
"args": ["-y", "attachment-mcp"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 可用工具(4 个)
|
|
27
|
+
|
|
28
|
+
| 工具 | 说明 |
|
|
29
|
+
|------|------|
|
|
30
|
+
| `start_attachment_test` | 开始测试,返回第一道题 |
|
|
31
|
+
| `answer_question` | 提交当前题的分数(1-5),获取下一题 |
|
|
32
|
+
| `get_progress` | 查看当前答题进度 |
|
|
33
|
+
| `calculate_attachment_result` | 计算你的依恋风格报告 |
|
|
34
|
+
|
|
35
|
+
## 四种依恋风格
|
|
36
|
+
|
|
37
|
+
- 💚 **安全型** — 能坦然爱,也能安心被爱
|
|
38
|
+
- 💛 **焦虑型** — 热烈深情,害怕失去
|
|
39
|
+
- 💙 **回避型** — 独立自洽,保持距离
|
|
40
|
+
- 💜 **恐惧回避型** — 渴望亲密又害怕受伤
|
|
41
|
+
|
|
42
|
+
## 免责声明
|
|
43
|
+
|
|
44
|
+
本测试仅供娱乐和自我探索参考,不构成专业心理评估或诊断。依恋风格是流动的,不是固化的标签。如果你在关系中感到困扰,请寻求专业心理咨询师的帮助。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../src/calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgDhD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAgC7D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const attachmentProfiles = {
|
|
2
|
+
secure: {
|
|
3
|
+
name: '安全型',
|
|
4
|
+
emoji: '🤗',
|
|
5
|
+
desc: '你是亲密关系中的港湾——你既能在爱里安心地依赖他人,也能在被需要时稳稳地撑住别人。你不是没受过伤,而是你依然选择相信爱是值得的。你的安全感来自于你对自己和世界的温和地信任——你相信表达需要不是软弱,你相信分离不是末日。',
|
|
6
|
+
cheers: '你知道吗?安全型依恋在这个世界上的比例可能比你想的少——而你拥有的是很多人都想拥有却觉得"太难了"的依恋模式。你在关系中的从容不是天生的,是你一步一个脚印走出来的。你让靠近你的人感到安心,因为你给了他们一种很少有人在关系中给出过的稳定感。保持这份温柔——它是你最珍贵的超能力。',
|
|
7
|
+
perfectMatch: '你在任何关系里都能找到舒适的位置——你是最容易被大家喜欢的存在,也是最容易建立长期稳定关系的类型。',
|
|
8
|
+
advice: '安全型不代表你不需要被照顾。你总是习惯性地成为关系里的"支撑者",但别忘了你也需要偶尔放下担子,被别人好好地接一次。偶尔可以对信任的人说"今天我累了,换你撑着我吧"。'
|
|
9
|
+
},
|
|
10
|
+
anxious: {
|
|
11
|
+
name: '焦虑型',
|
|
12
|
+
emoji: '💭',
|
|
13
|
+
desc: '你爱人时是用全身心去爱的——你的关心、你的细腻、你对关系的投入程度是很多安全型的人都望尘莫及的。你的焦虑不是"想太多",是你对爱太在乎了。每一次心跳加速、每一次等待消息时的忐忑,都是你真心在关系的证据。',
|
|
14
|
+
cheers: '你给出去的爱是浓厚的、炙热的、不藏私的——在这个很多人已经不敢认真去爱的时代,你还在认真地爱着,这本身就是一种勇敢。你的"太过在意"不是缺点——它是你对关系的尊重。焦虑不是问题,问题是世界还没明白你只是需要一个让你安心的人。',
|
|
15
|
+
perfectMatch: '你最适合一个能给你安全感和稳定性的人——你需要的是一个不会让你在关系中猜来猜去的伴侣,一个会主动告诉你"我在"的人。',
|
|
16
|
+
advice: '你的安全感不应该完全依赖别人来提供——这不公平,也不稳定。试着学会自己给自己安全感:不是"没人爱我就不行",是"除了别人的爱,我也有能力让自己快乐"。你的价值不完全等于"我在这段关系里多被需要"。'
|
|
17
|
+
},
|
|
18
|
+
avoidant: {
|
|
19
|
+
name: '回避型',
|
|
20
|
+
emoji: '🕶️',
|
|
21
|
+
desc: '你有一个精密运转、自给自足的内心世界——你比别人更早学会了靠自己。你不随便让人走进你的内心不是冷漠,是你知道心灵的钥匙交给别人手里是一件需要很大勇气的事。你的独立和自控力常常让别人觉得你"太冷",但其实你只是把柔软藏在了坚硬之下。',
|
|
22
|
+
cheers: '你的独立和清醒是许多人羡慕的能力——在那个没有人可以依靠的时候,你靠住了自己。你不是没有脆弱,你只是选择了一个别人看不到的地方去消化。那种不依赖任何人也能把生活过好的能力是你的秘密武器。而那些被你慢慢允许靠近的人,是你最深情的授权。',
|
|
23
|
+
perfectMatch: '你需要的是一个尊重你空间和独立性的人——那种不会因为你偶尔退后一步就觉得自己被推开的人,那种有耐心等你慢慢开门的温柔灵魂。',
|
|
24
|
+
advice: '独立很好,但偶尔学会"依赖不丢人"。向信任的人展示脆弱不是弱点,是两个灵魂之间最原始最真诚的连接方式。尝试对一个人说一句"我需要你"——不是因为你不够强,是因为你知道有些东西两个人一起扛比较轻。'
|
|
25
|
+
},
|
|
26
|
+
fearful: {
|
|
27
|
+
name: '恐惧回避型',
|
|
28
|
+
emoji: '🌀',
|
|
29
|
+
desc: '你的内心是一个复杂的坐标系——同时标记着对亲密的渴望和对受伤的恐惧。你推两步退一步的原因不是因为不爱,是每当你觉得"是时候了"的时候,过去的某个回声就会在你脑海里想起:"小心点,上一个也是这么开始然后让你心碎的。"你是一个在爱里被打碎过还在努力拼凑自己的人。',
|
|
30
|
+
cheers: '你能走到今天已经非常非常了不起了。你带着过去的伤痕、带着那些还没来得及愈合的裂缝,依然在努力走向人群。你的脆弱是真实的,你的渴望也是真实的。你不是"太复杂了"——你是一个有深度有故事的人。能被你允许靠近的人,是非常非常幸运的。',
|
|
31
|
+
perfectMatch: '你需要的是一个不害怕"复杂"的人——一个能理解你有时需要靠近有时需要空间的人。这种理解不是"治疗",是"陪伴",是对方在你忽近忽远的时候依然稳稳站在那里。',
|
|
32
|
+
advice: '亲爱的,过去的伤害不是你的错。那些让你不敢再相信的人,他们的问题不应该让你来继续承担后果。尝试一次——哪怕只是一次——在安全的环境中完整地信任一次,你会发现世界不是都是你记忆中的那个危险的地方。如果觉得需要帮助,找一段好的咨询关系也可以是一种疗愈的开始。'
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
const styleOrder = ['secure', 'anxious', 'avoidant', 'fearful'];
|
|
36
|
+
export function calculateResult(answers) {
|
|
37
|
+
const styles = styleOrder;
|
|
38
|
+
const scores = Object.fromEntries(styles.map(s => [s, 0]));
|
|
39
|
+
// 6 questions per style, q1-6=secure, q7-12=anxious, q13-18=avoidant, q19-24=fearful
|
|
40
|
+
for (const a of answers) {
|
|
41
|
+
const styleIdx = Math.floor((a.questionId - 1) / 6);
|
|
42
|
+
const style = styles[styleIdx];
|
|
43
|
+
if (style)
|
|
44
|
+
scores[style] += a.score;
|
|
45
|
+
}
|
|
46
|
+
const maxPerStyle = 6 * 5; // 30
|
|
47
|
+
const normalizedScores = {};
|
|
48
|
+
for (const s of styles) {
|
|
49
|
+
normalizedScores[s] = Math.max(1, Math.min(10, Math.round((scores[s] / maxPerStyle) * 9 + 1)));
|
|
50
|
+
}
|
|
51
|
+
const sorted = Object.entries(normalizedScores).sort((a, b) => b[1] - a[1]);
|
|
52
|
+
const primary = sorted[0][0];
|
|
53
|
+
const profile = attachmentProfiles[primary];
|
|
54
|
+
return {
|
|
55
|
+
type: primary,
|
|
56
|
+
typeName: profile.name,
|
|
57
|
+
emoji: profile.emoji,
|
|
58
|
+
scores: normalizedScores,
|
|
59
|
+
description: profile.desc,
|
|
60
|
+
cheers: profile.cheers,
|
|
61
|
+
perfectMatch: profile.perfectMatch,
|
|
62
|
+
advice: profile.advice,
|
|
63
|
+
disclaimer: '本测试仅供自我探索和娱乐参考,不构成任何心理学诊断或临床评估。依恋类型是复杂的心理构念,受多种因素影响,无法通过简短的线上自评准确确定。如果你在亲密关系中感到持续的困扰或痛苦,建议寻求有资质的心理咨询师的帮助。你值得被理解,也值得被温柔对待。',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# 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;;;;GAIG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Attachment MCP Server - 成人依恋类型测试
|
|
4
|
+
* 24道自省题目 · 4种依恋类型
|
|
5
|
+
* 温馨提醒:本测试仅供自我探索参考,非临床诊断工具
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
9
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
10
|
+
import { questions } from './questions.js';
|
|
11
|
+
import { calculateResult } from './calculator.js';
|
|
12
|
+
const server = new Server({ name: 'attachment-mcp-server', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
13
|
+
const styleNames = {
|
|
14
|
+
secure: '安全型', anxious: '焦虑型', avoidant: '回避型', fearful: '恐惧回避型',
|
|
15
|
+
};
|
|
16
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
17
|
+
tools: [
|
|
18
|
+
{
|
|
19
|
+
name: 'start_attachment_test',
|
|
20
|
+
description: `开始成人依恋类型测试!一共${questions.length}道温柔的自省题目,探索你在亲密关系中的依恋模式。温馨提醒:本测试仅供自我探索参考。`,
|
|
21
|
+
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'answer_question',
|
|
25
|
+
description: '提交当前问题的答案(1-5分),获取下一题或最终结果提示。',
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
session: { type: 'object', properties: { answers: { type: 'array', items: { type: 'object', properties: { questionId: { type: 'number' }, score: { type: 'number' } } } }, currentQuestionIndex: { type: 'number' } }, required: ['answers', 'currentQuestionIndex'] },
|
|
30
|
+
score: { type: 'number', description: '1=完全不像我, 2=不太像我, 3=有时候像, 4=挺像我的, 5=这就是我本人!', minimum: 1, maximum: 5 },
|
|
31
|
+
},
|
|
32
|
+
required: ['session', 'score'],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'get_progress',
|
|
37
|
+
description: '查看当前测试进度。',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: { session: { type: 'object', properties: { answers: { type: 'array' }, currentQuestionIndex: { type: 'number' } }, required: ['answers', 'currentQuestionIndex'] } },
|
|
41
|
+
required: ['session'],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'calculate_attachment_result',
|
|
46
|
+
description: `获取你的依恋类型报告!包含4种类型得分、主要依恋风格解读、专属 cheers 和温柔的陪伴建议。`,
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: 'object',
|
|
49
|
+
properties: { session: { type: 'object', properties: { answers: { type: 'array' }, currentQuestionIndex: { type: 'number' } }, required: ['answers', 'currentQuestionIndex'] } },
|
|
50
|
+
required: ['session'],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
}));
|
|
55
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
56
|
+
const { name, arguments: args } = request.params;
|
|
57
|
+
try {
|
|
58
|
+
if (name === 'start_attachment_test') {
|
|
59
|
+
const session = { answers: [], currentQuestionIndex: 0 };
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: 'text', text: JSON.stringify({
|
|
62
|
+
message: `💕 成人依恋类型测试开始啦!一共 ${questions.length} 题,探索你在亲密关系中的依恋模式。放松心情,没有标准答案,只有你的真实感受~`,
|
|
63
|
+
aboutTheTest: '每道题请根据你在亲密关系中的真实感受打分:1=完全不像我 · 5=这就是我本人!',
|
|
64
|
+
styleList: Object.entries(styleNames).map(([k, v]) => ({ style: k, name: v })),
|
|
65
|
+
currentQuestion: { index: 1, total: questions.length, question: questions[0] },
|
|
66
|
+
session,
|
|
67
|
+
}, null, 2) }],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (name === 'answer_question') {
|
|
71
|
+
const session = (args?.session ?? { answers: [], currentQuestionIndex: 0 });
|
|
72
|
+
const score = Number(args?.score ?? 3);
|
|
73
|
+
const currentQ = questions[session.currentQuestionIndex];
|
|
74
|
+
const updatedSession = { ...session, answers: [...session.answers, { questionId: currentQ.id, score }], currentQuestionIndex: session.currentQuestionIndex + 1 };
|
|
75
|
+
if (updatedSession.currentQuestionIndex >= questions.length) {
|
|
76
|
+
return { content: [{ type: 'text', text: JSON.stringify({ message: `所有 ${questions.length} 道题都答完了。你对自己在关系中的样子有了更多的觉察——这本身就是一种很棒的成长。`, completed: true, progress: { answered: updatedSession.answers.length, total: questions.length }, session: updatedSession, nextStep: '快来用 calculate_attachment_result 看看你的依恋类型吧!' }, null, 2) }] };
|
|
77
|
+
}
|
|
78
|
+
const nextQ = questions[updatedSession.currentQuestionIndex];
|
|
79
|
+
const progressPct = Math.round(updatedSession.currentQuestionIndex / questions.length * 100);
|
|
80
|
+
const encouragement = progressPct < 25 ? '开始了,自我探索是件很温柔的事~' : progressPct < 50 ? '继续往前走,你对自己越来越了解~' : progressPct < 75 ? '过半了!你在关系中的模式正在清晰化~' : progressPct < 90 ? '快结束了,答案就在不远处~' : '最后几步!你的依恋画像即将完成!';
|
|
81
|
+
return { content: [{ type: 'text', text: JSON.stringify({ message: encouragement, progress: { answered: updatedSession.answers.length, total: questions.length, percentage: Math.round(updatedSession.answers.length / questions.length * 100) }, nextQuestion: { index: updatedSession.currentQuestionIndex + 1, total: questions.length, question: nextQ }, session: updatedSession }, null, 2) }] };
|
|
82
|
+
}
|
|
83
|
+
if (name === 'get_progress') {
|
|
84
|
+
const session = (args?.session ?? { answers: [], currentQuestionIndex: 0 });
|
|
85
|
+
const answered = session.answers?.length ?? 0;
|
|
86
|
+
const pct = Math.round(answered / questions.length * 100);
|
|
87
|
+
return { content: [{ type: 'text', text: JSON.stringify({ answered, total: questions.length, percentage: pct, remaining: questions.length - answered, vibes: pct === 0 ? '还没开始呢,输入 start_attachment_test 来探索你的依恋类型吧!' : pct === 100 ? '所有题目都答完啦!去用 calculate_attachment_result 揭晓答案吧~' : `完成了 ${pct}%,还剩 ${questions.length - answered} 题~` }, null, 2) }] };
|
|
88
|
+
}
|
|
89
|
+
if (name === 'calculate_attachment_result') {
|
|
90
|
+
const session = (args?.session ?? { answers: [], currentQuestionIndex: 0 });
|
|
91
|
+
if (!session.answers || session.answers.length < questions.length) {
|
|
92
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: '还没做完呢~再回答几题吧!', progress: { answered: session.answers?.length ?? 0, total: questions.length } }, null, 2) }], isError: true };
|
|
93
|
+
}
|
|
94
|
+
const result = calculateResult(session.answers);
|
|
95
|
+
return { content: [{ type: 'text', text: JSON.stringify({ message: '💕 你的依恋类型报告已生成!', yourAttachmentStyle: { type: result.type, name: result.typeName, emoji: result.emoji, description: result.description }, scores: result.scores, cheers: result.cheers, perfectMatch: result.perfectMatch, advice: result.advice, disclaimer: result.disclaimer, finalThought: '依恋类型不是判决书——它是一种可以随着自我觉察和有意识的努力而发生变化的模式。真正的勇敢是:在了解了自己的依恋模式之后,依然选择去爱,并且选择被爱。无论今天的结果如何,你都值得被坚定地、温柔地、认真地对待。' }, null, 2) }] };
|
|
96
|
+
}
|
|
97
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: '未知工具' }) }], isError: true };
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: error instanceof Error ? error.message : '未知错误' }) }], isError: true };
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
async function main() {
|
|
104
|
+
const transport = new StdioServerTransport();
|
|
105
|
+
await server.connect(transport);
|
|
106
|
+
console.error('💕 Attachment MCP Server running on stdio');
|
|
107
|
+
}
|
|
108
|
+
main().catch((error) => { console.error('Server error:', error); process.exit(1); });
|
|
109
|
+
//# 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 @@
|
|
|
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,EA6B/B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// 4种依恋风格 x 6题 = 24题
|
|
2
|
+
export const questions = [
|
|
3
|
+
// ========== 安全型 Secure Q1-Q6 ==========
|
|
4
|
+
{ id: 1, text: "你可以很自然地跟伴侣说「我今天不开心,需要你抱抱我」,不觉得这是示弱。", style: 'secure', emoji: '💚' },
|
|
5
|
+
{ id: 2, text: "你和伴侣吵架之后能够很快和好,不会在心里反复思量「他是不是不爱我了」,睡一觉就翻篇了。", style: 'secure', emoji: '💚' },
|
|
6
|
+
{ id: 3, text: "伴侣和朋友出去玩没有叫你,你心里会想「挺好,我正好可以窝在沙发上看剧」,而不是挨个问「去了谁,男的女的」。", style: 'secure', emoji: '💚' },
|
|
7
|
+
{ id: 4, text: "你在关系里有自己的空间,也愿意给对方空间——「我爱你」和「我需要独处」这两句话可以共存在同一段关系里。", style: 'secure', emoji: '💚' },
|
|
8
|
+
{ id: 5, text: "当你对关系有不满时,你能直接说出口——不是憋着,也不是爆发,就是好好说:「最近我感觉有点失落,我们能聊聊吗?」", style: 'secure', emoji: '💚' },
|
|
9
|
+
{ id: 6, text: "伴侣在工作或生活上取得了成就,你的第一反应是真心的骄傲和开心,而不是暗暗比较「那我呢」。", style: 'secure', emoji: '💚' },
|
|
10
|
+
// ========== 焦虑型 Anxious Q7-Q12 ==========
|
|
11
|
+
{ id: 7, text: "喜欢的人超过一小时没回消息,你的大脑已经自动播放了七种最坏的剧情——从车祸到「ta不爱我了」——还每种都给配了台词。", style: 'anxious', emoji: '💛' },
|
|
12
|
+
{ id: 8, text: "约会结束各回各家之后,你已经坐在床上抱着手机,反复点开他的朋友圈,从去年翻到前年,寻找任何一丝「他可能不喜欢我了」的证据或反证据。", style: 'anxious', emoji: '💛' },
|
|
13
|
+
{ id: 9, text: "你需要伴侣经常说「我爱你」「你是最重要的」「我没有离开你的打算」,不是你不信,是你需要听见这句话心里那块石头才能暂时落地。", style: 'anxious', emoji: '💛' },
|
|
14
|
+
{ id: 10, text: "两个人之间哪怕只有一丁点冷淡的苗头——比如对方今天少发了两个表情包——你就能在心里拉出一张「我做错了什么」的思维导图。", style: 'anxious', emoji: '💛' },
|
|
15
|
+
{ id: 11, text: "恋爱初期你会「一不小心」就把全部的自己交出去——分享所有秘密、每天所有时间、所有情绪——然后在某一刻突然恐慌:我是不是给得太多了?", style: 'anxious', emoji: '💛' },
|
|
16
|
+
{ id: 12, text: "朋友跟你说「你太粘人了」的时候,你表面点头说知道了,心里却在想「可我只是想确认我在乎的人也在乎我啊,这有错吗」。", style: 'anxious', emoji: '💛' },
|
|
17
|
+
// ========== 回避型 Avoidant Q13-Q18 ==========
|
|
18
|
+
{ id: 13, text: "和伴侣分开几天的时候,你不会焦虑,反而有一种「终于可以一个人待会儿了」的轻松感——不是不爱,是需要喘气。", style: 'avoidant', emoji: '💙' },
|
|
19
|
+
{ id: 14, text: "对方发来长篇感性小作文的时候,你读完之后的第一反应往往是「那我该怎么回复呢」,而不是被感动到。你更擅长用行动,而不是用文字去接住情绪。", style: 'avoidant', emoji: '💙' },
|
|
20
|
+
{ id: 15, text: "有人想走进你的内心世界的时候,你会下意识退后一步。「别靠太近」这句话你已经说得很熟练了,只不过有时候用的是沉默。", style: 'avoidant', emoji: '💙' },
|
|
21
|
+
{ id: 16, text: "你觉得「独立」是一个人最有吸引力的品质。你不理解为什么有人谈恋爱之后就变成了连体婴——你自己换灯泡、自己修水管、自己消化情绪,这不是挺好的吗?", style: 'avoidant', emoji: '💙' },
|
|
22
|
+
{ id: 17, text: "遇到压力或难过的时候,你的本能反应是把自己关起来慢慢消化,而不是打电话给伴侣倾诉。别人问「你怎么了」的时候你经常说「没事」。", style: 'avoidant', emoji: '💙' },
|
|
23
|
+
{ id: 18, text: "伴侣开始频繁表达情感需求的时候,你内心有一小部分在想「是不是该退后一点了」——你害怕被情感要求淹没,害怕失去对自己的掌控感。", style: 'avoidant', emoji: '💙' },
|
|
24
|
+
// ========== 恐惧回避型 Fearful-Avoidant Q19-Q24 ==========
|
|
25
|
+
{ id: 19, text: "别人对你好,你第一反应不是开心,是「ta是不是有什么目的」或者「我配吗」——善意对你来说像一颗包装太漂亮的糖,你不敢剥开。", style: 'fearful_avoidant', emoji: '💜' },
|
|
26
|
+
{ id: 20, text: "你嘴上说着「好想谈恋爱啊」,但当真有人靠近的时候,你听到的不是心跳加速是警报拉响:危险危险危险。然后你就不自觉地开始后退。", style: 'fearful_avoidant', emoji: '💜' },
|
|
27
|
+
{ id: 21, text: "你在关系里反复横跳——今天觉得「我离不开你」,明天又觉得「我一个人挺好的干嘛要谈恋爱」——像在坐一辆没有刹车的感情过山车。", style: 'fearful_avoidant', emoji: '💜' },
|
|
28
|
+
{ id: 22, text: "你内心深处渴望被深深爱着,但同时又深信「走得越近,伤得越深」。所以你会先推开对方,再看对方有没有留下来——这是你唯一的测试方法。", style: 'fearful_avoidant', emoji: '💜' },
|
|
29
|
+
{ id: 23, text: "你很会照顾别人的情绪,但轮到别人照顾你的时候,你浑身不自在——你习惯了做那个「扛事的人」,不习惯那个「被心疼的人」。", style: 'fearful_avoidant', emoji: '💜' },
|
|
30
|
+
{ id: 24, text: "你常常在想:「如果我能不那么矛盾就好了」——你又想被看见,又害怕被看穿;又希望有人能接住你,又怕自己太重了会把对方砸跑。", style: 'fearful_avoidant', emoji: '💜' },
|
|
31
|
+
];
|
|
32
|
+
//# 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,27 @@
|
|
|
1
|
+
export interface Question {
|
|
2
|
+
id: number;
|
|
3
|
+
text: string;
|
|
4
|
+
style: string;
|
|
5
|
+
emoji?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Answer {
|
|
8
|
+
questionId: number;
|
|
9
|
+
score: number;
|
|
10
|
+
}
|
|
11
|
+
export interface TestSession {
|
|
12
|
+
testType: string;
|
|
13
|
+
answers: Answer[];
|
|
14
|
+
currentQuestionIndex: number;
|
|
15
|
+
}
|
|
16
|
+
export interface TestResult {
|
|
17
|
+
type: string;
|
|
18
|
+
typeName: string;
|
|
19
|
+
emoji: string;
|
|
20
|
+
scores: Record<string, number>;
|
|
21
|
+
description: string;
|
|
22
|
+
cheers: string;
|
|
23
|
+
perfectMatch: string;
|
|
24
|
+
advice: string;
|
|
25
|
+
disclaimer: string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AACtF,MAAM,WAAW,MAAM;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE;AAC9D,MAAM,WAAW,WAAW;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;CAAE;AACnG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "attachment-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "依恋风格测试 MCP Server — 24道温柔关系题目,探索你在亲密关系中的真实模样",
|
|
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", "attachment", "psychology", "relationship", "self-discovery"],
|
|
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
|
+
}
|