systemprompt-mcp-interview
by Ejb503
Verified
- src
- handlers
import { CreateMessageResult } from "@modelcontextprotocol/sdk/types.js";
import { sendJsonResultNotification, sendOperationNotification } from "./notifications.js";
import { SystemPromptService } from "../services/systemprompt-service.js";
import { server } from "../server.js";
import { InterviewPlanResponse, CVSummaryResponse } from "../types/sampling-schemas.js";
/**
* Handles sending an email via SystemPrompt API
* @param result The LLM result
* @returns The tool response
*/
export async function handleConfigureInterviewCallback(
result: CreateMessageResult,
): Promise<string> {
try {
if (result.content.type !== "text") {
throw new Error("Expected text content");
}
const interviewPlan = JSON.parse(result.content.text) as InterviewPlanResponse;
if (
!interviewPlan.interviewId ||
!interviewPlan.interviewPlan ||
!interviewPlan.metadata ||
!interviewPlan.systemPromptMetadata
) {
throw new Error("Invalid interview plan format");
}
const blockData = {
content: result.content.text,
prefix: interviewPlan.systemPromptMetadata.prefix,
metadata: {
title: interviewPlan.systemPromptMetadata.title,
description: interviewPlan.systemPromptMetadata.description,
tag: ["mcp_systemprompt_interview", "interview"],
},
};
await sendJsonResultNotification(JSON.stringify(blockData));
const systemprompt = SystemPromptService.getInstance();
await systemprompt.createBlock(blockData);
server.sendResourceListChanged();
const message = `Successfully created interview plan ${interviewPlan.interviewId} with ${interviewPlan.metadata.totalQuestions} questions`;
await sendOperationNotification("configure_interview", message);
return message;
} catch (error) {
const errorMessage = error instanceof Error ? error.message : "Unknown error";
await sendOperationNotification(
"configure_interview",
`Failed to configure interview: ${errorMessage}`,
);
throw error;
}
}
/**
* Handles saving the CV summary to SystemPrompt
* @param result The LLM result
* @returns The tool response
*/
export async function handleSummarizeCVCallback(result: CreateMessageResult): Promise<string> {
if (result.content.type !== "text") {
throw new Error("Expected text content");
}
let cvSummary;
try {
cvSummary = JSON.parse(result.content.text) as CVSummaryResponse;
if (
!cvSummary.personalInfo ||
!cvSummary.skills ||
!cvSummary.metadata ||
!cvSummary.systemPromptMetadata
) {
throw new Error("Invalid CV summary format");
}
} catch (error) {
throw new Error("Invalid CV summary format");
}
const blockData = {
content: result.content.text,
prefix: cvSummary.systemPromptMetadata.prefix,
metadata: {
title: cvSummary.systemPromptMetadata.title,
description: cvSummary.systemPromptMetadata.description,
tag: ["mcp_systemprompt_interview", "cv"],
},
};
await sendJsonResultNotification(JSON.stringify(blockData));
const systemprompt = SystemPromptService.getInstance();
await systemprompt.createBlock(blockData);
server.sendResourceListChanged();
const message = `Successfully processed CV summary for ${cvSummary.metadata.primaryDomain} role`;
await sendOperationNotification("summarize_cv", message);
return message;
}