answer_question
Submit your answer (1-5) to the current MBTI test question and receive the next question or test progress. Requires complete session state.
Instructions
提交当前问题的答案(1-5分),并获取下一题或测试进度。需要传入完整的测试会话状态。
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| session | Yes | 测试会话状态,包含testType、answers数组和currentQuestionIndex | |
| score | Yes | 对当前问题的回答(1=强烈不同意, 2=不同意, 3=中立, 4=同意, 5=强烈同意) |
Implementation Reference
- src/index.ts:165-230 (handler)The core handler logic for the 'answer_question' tool. It processes the submitted score, updates the test session state, determines if the test is complete, and returns either the completion message or the next question.if (name === 'answer_question') { const session = args.session as TestSession; const score = args.score as number; const questions = session.testType === 'simplified' ? questionBank.simplified : questionBank.cognitive; const currentQuestion = questions[session.currentQuestionIndex]; // Save answer const newAnswer: Answer = { questionId: currentQuestion.id, score, }; const updatedSession: TestSession = { ...session, answers: [...session.answers, newAnswer], currentQuestionIndex: session.currentQuestionIndex + 1, }; // Check if test is complete if (updatedSession.currentQuestionIndex >= questions.length) { return { content: [ { type: 'text', text: JSON.stringify({ message: '所有问题已回答完毕!', completed: true, progress: { answered: updatedSession.answers.length, total: questions.length, }, session: updatedSession, nextStep: '请使用 calculate_mbti_result 工具计算你的MBTI类型', }, null, 2), }, ], }; } // Return next question const nextQuestion = questions[updatedSession.currentQuestionIndex]; return { content: [ { type: 'text', text: JSON.stringify({ message: '答案已记录', progress: { answered: updatedSession.answers.length, total: questions.length, }, nextQuestion: { index: updatedSession.currentQuestionIndex + 1, total: questions.length, question: nextQuestion, }, session: updatedSession, }, null, 2), }, ], }; }
- src/index.ts:43-77 (registration)Registration of the 'answer_question' tool in the ListTools response, including name, description, and input schema definition.{ name: 'answer_question', description: '提交当前问题的答案(1-5分),并获取下一题或测试进度。需要传入完整的测试会话状态。', inputSchema: { type: 'object', properties: { session: { type: 'object', description: '测试会话状态,包含testType、answers数组和currentQuestionIndex', properties: { testType: { type: 'string' }, answers: { type: 'array', items: { type: 'object', properties: { questionId: { type: 'number' }, score: { type: 'number' }, }, }, }, currentQuestionIndex: { type: 'number' }, }, required: ['testType', 'answers', 'currentQuestionIndex'], }, score: { type: 'number', description: '对当前问题的回答(1=强烈不同意, 2=不同意, 3=中立, 4=同意, 5=强烈同意)', minimum: 1, maximum: 5, }, }, required: ['session', 'score'], }, },
- src/index.ts:46-76 (schema)JSON schema definition for the input parameters of the 'answer_question' tool, specifying the structure of session and score.inputSchema: { type: 'object', properties: { session: { type: 'object', description: '测试会话状态,包含testType、answers数组和currentQuestionIndex', properties: { testType: { type: 'string' }, answers: { type: 'array', items: { type: 'object', properties: { questionId: { type: 'number' }, score: { type: 'number' }, }, }, }, currentQuestionIndex: { type: 'number' }, }, required: ['testType', 'answers', 'currentQuestionIndex'], }, score: { type: 'number', description: '对当前问题的回答(1=强烈不同意, 2=不同意, 3=中立, 4=同意, 5=强烈同意)', minimum: 1, maximum: 5, }, }, required: ['session', 'score'], },
- src/types.ts:61-64 (helper)Type definitions supporting the tool, including TestSession, Answer, and QuestionBank used in the handler for type safety.export interface QuestionBank { simplified: Question[]; cognitive: Question[]; }
- src/questions.ts:109-112 (helper)The questionBank data structure used by the handler to retrieve questions based on test type.export const questionBank: QuestionBank = { simplified: simplifiedQuestions, cognitive: cognitiveQuestions, };