import type {
CallToolRequest,
CallToolResult,
} from "@modelcontextprotocol/sdk/types.js";
import { resolveReadmePath } from "../helpers/resolveReadmePath";
import { summarizeReadme } from "../helpers/summarizeReadme";
import { readmeFirstParagraph } from "../helpers/readmeParagraph";
import { readmeHeadings } from "../helpers/readmeHeadings";
import { type HandlerDeps, mergeDeps } from "../helpers/handlerDeps";
export function handleCallTool(deps: Partial<HandlerDeps> = {}) {
const mergedDeps = mergeDeps(["readFile", "getReadmeFromGitRepo"], deps);
return async (request: CallToolRequest): Promise<CallToolResult> => {
const input = request.params.arguments ?? {};
let readmeText: string;
switch (request.params.name) {
case "readme_summary": {
const readmePath = resolveReadmePath(input);
readmeText = await mergedDeps.readFile(readmePath, "utf8");
break;
}
case "readme_from_git": {
const repoUrl = input.repo_url as string;
readmeText = await mergedDeps.getReadmeFromGitRepo(repoUrl);
break;
}
default:
throw new Error(`Unknown tool: ${request.params.name}`);
}
const result = summarizeReadme(readmeText, readmeFirstParagraph, readmeHeadings);
return {
content: [
{
type: "text",
text: JSON.stringify(result, null, 2),
},
],
};
};
}