Summarize Text
summarizeSummarize meeting transcripts or notes using AI. Provide optional guidance like action items or executive summary.
Instructions
Summarize transcript text via GhostMinutes hosted AI (/api/ai/chat). Paste transcript content or downstream output from get_transcript.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Transcript or notes text to summarize. | |
| focus | No | Optional guidance (e.g. "action items only", "executive summary"). |
Implementation Reference
- src/tools/summarize.ts:15-50 (handler)The main handler for the 'summarize' tool. It calls `server.registerTool('summarize', ...)` with a callback that requires auth, builds a system prompt (optionally including a focus directive), sends the user's text to `client.aiChat()`, and returns both plain text and structured content.
export function register(server: McpServer, client: GhostMinutesClient): void { server.registerTool( 'summarize', { title: 'Summarize Text', description: 'Summarize transcript text via GhostMinutes hosted AI (/api/ai/chat). Paste transcript content or downstream output from get_transcript.', inputSchema: z.object({ text: z .string() .min(1) .describe('Transcript or notes text to summarize.'), focus: z .string() .optional() .describe( 'Optional guidance (e.g. "action items only", "executive summary").', ), }), annotations: { readOnlyHint: false, openWorldHint: true }, }, async ({ text, focus }) => { requireAuth(client); const systemPrompt = focus?.trim()?.length ? `You summarize transcripts accurately and concisely. Focus: ${focus}` : 'You summarize transcripts accurately and concisely.'; const messages = [{ role: 'user', content: text }]; const body = await client.aiChat(messages, systemPrompt); return { content: [{ type: 'text', text: JSON.stringify(body, null, 2) }], structuredContent: jsonStructured(body), }; }, ); } - src/tools/summarize.ts:22-33 (schema)Input schema for the summarize tool. Accepts a required 'text' string (transcript/notes) and an optional 'focus' string for guidance (e.g., 'action items only').
inputSchema: z.object({ text: z .string() .min(1) .describe('Transcript or notes text to summarize.'), focus: z .string() .optional() .describe( 'Optional guidance (e.g. "action items only", "executive summary").', ), }), - src/server.ts:9-9 (registration)Import of the register function from src/tools/summarize.ts into the server.
import { register as registerSummarize } from './tools/summarize.js'; - src/server.ts:20-20 (registration)'summarize' is listed in the EXPECTED_TOOL_NAMES array of the server.
'summarize', - src/server.ts:38-38 (registration)Registration call: registerSummarize(server, client) wires the tool into the MCP server.
registerSummarize(server, client);