Skip to main content
Glama
pdf.tools.ts5.96 kB
/** * PDF Analysis Tools for MCP Server */ import { z } from 'zod'; import { PDFAnalysisService } from '../services/pdf-analysis.service.js'; import { logger } from '../utils/logger.js'; import { validateNotEmpty } from '../utils/validation.js'; import * as fs from 'fs/promises'; export function createPDFTools(pdfService: PDFAnalysisService) { return { analyze_bioimpedance_pdf: { description: 'Analyze a bioimpedance PDF document and extract health metrics with recommendations', parameters: z.object({ filePath: z.string().describe('Absolute path to the PDF file to analyze') }), execute: async (args: { filePath: string }) => { try { logger.info('Analyzing bioimpedance PDF', args); validateNotEmpty(args.filePath, 'File path'); // Check if file exists try { await fs.access(args.filePath); } catch { throw new Error(`File not found: ${args.filePath}`); } const analysis = await pdfService.analyzeBioimpedancePDF(args.filePath); return { content: [ { type: 'text', text: JSON.stringify( { success: true, analysis: { patientInfo: { name: analysis.patientName, date: analysis.date }, measurements: { weight: analysis.weight ? `${analysis.weight} kg` : 'N/A', height: analysis.height ? `${analysis.height} cm` : 'N/A', bmi: analysis.bmi || 'N/A', bodyFatPercentage: analysis.bodyFatPercentage ? `${analysis.bodyFatPercentage}%` : 'N/A', muscleMassPercentage: analysis.muscleMassPercentage ? `${analysis.muscleMassPercentage}%` : 'N/A', boneMass: analysis.boneMass ? `${analysis.boneMass} kg` : 'N/A', bodyWaterPercentage: analysis.bodyWaterPercentage ? `${analysis.bodyWaterPercentage}%` : 'N/A', visceralFat: analysis.visceralFat || 'N/A', bmr: analysis.bmr ? `${analysis.bmr} kcal` : 'N/A' }, analysis: analysis.analysis, recommendations: analysis.recommendations } }, null, 2 ) } ] }; } catch (error) { logger.error('Failed to analyze bioimpedance PDF', error); return { content: [ { type: 'text', text: JSON.stringify( { success: false, error: error instanceof Error ? error.message : 'Unknown error' }, null, 2 ) } ], isError: true }; } } }, analyze_bioimpedance_pdf_base64: { description: 'Analyze a bioimpedance PDF document from base64-encoded data', parameters: z.object({ base64Data: z.string().describe('Base64-encoded PDF data'), patientId: z.string().optional().describe('Optional patient ID for reference') }), execute: async (args: { base64Data: string; patientId?: string }) => { try { logger.info('Analyzing bioimpedance PDF from base64', { patientId: args.patientId, dataLength: args.base64Data.length }); validateNotEmpty(args.base64Data, 'Base64 data'); const analysis = await pdfService.analyzeBioimpedancePDFFromBase64(args.base64Data); return { content: [ { type: 'text', text: JSON.stringify( { success: true, patientId: args.patientId, analysis: { patientInfo: { name: analysis.patientName, date: analysis.date }, measurements: { weight: analysis.weight ? `${analysis.weight} kg` : 'N/A', height: analysis.height ? `${analysis.height} cm` : 'N/A', bmi: analysis.bmi || 'N/A', bodyFatPercentage: analysis.bodyFatPercentage ? `${analysis.bodyFatPercentage}%` : 'N/A', muscleMassPercentage: analysis.muscleMassPercentage ? `${analysis.muscleMassPercentage}%` : 'N/A', boneMass: analysis.boneMass ? `${analysis.boneMass} kg` : 'N/A', bodyWaterPercentage: analysis.bodyWaterPercentage ? `${analysis.bodyWaterPercentage}%` : 'N/A', visceralFat: analysis.visceralFat || 'N/A', bmr: analysis.bmr ? `${analysis.bmr} kcal` : 'N/A' }, analysis: analysis.analysis, recommendations: analysis.recommendations } }, null, 2 ) } ] }; } catch (error) { logger.error('Failed to analyze bioimpedance PDF from base64', error); return { content: [ { type: 'text', text: JSON.stringify( { success: false, error: error instanceof Error ? error.message : 'Unknown error' }, null, 2 ) } ], isError: true }; } } } }; }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/osmarsant/fitslot-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server