Skip to main content
Glama
reports.ts3.45 kB
import { z } from 'zod'; import { createTool } from '../base.js'; import { floatApi } from '../../services/float-api.js'; // Get time report export const getTimeReport = createTool( 'get-time-report', 'Get time tracking report with various filters', z.object({ start_date: z.string().describe('Start date for report (YYYY-MM-DD)'), end_date: z.string().describe('End date for report (YYYY-MM-DD)'), people_id: z.number().optional().describe('Filter by person ID'), project_id: z.number().optional().describe('Filter by project ID'), client_id: z.number().optional().describe('Filter by client ID'), department_id: z.number().optional().describe('Filter by department ID'), billable: z .number() .optional() .describe('Filter by billable status (0=non-billable, 1=billable)'), format: z.enum(['json', 'csv']).optional().describe('Report format (default: json)'), }), async (params) => { const response = await floatApi.getPaginated( '/reports/time', params, z.array( z.object({ people_id: z.number().optional(), project_id: z.number().optional(), task_id: z.number().optional(), date: z.string().optional(), hours: z.number().optional(), billable: z.number().optional(), notes: z.string().nullable().optional(), }) ) ); return response; } ); // Get project report export const getProjectReport = createTool( 'get-project-report', 'Get project summary report', z.object({ start_date: z.string().optional().describe('Start date for report (YYYY-MM-DD)'), end_date: z.string().optional().describe('End date for report (YYYY-MM-DD)'), project_id: z.number().optional().describe('Filter by project ID'), client_id: z.number().optional().describe('Filter by client ID'), status: z.number().optional().describe('Filter by project status'), }), async (params) => { const response = await floatApi.getPaginated( '/reports/projects', params, z.array( z.object({ project_id: z.number().optional(), name: z.string().optional(), client_id: z.number().optional(), status: z.number().optional(), total_hours: z.number().optional(), billable_hours: z.number().optional(), budget: z.number().optional(), budget_used: z.number().optional(), }) ) ); return response; } ); // Get people utilization report export const getPeopleUtilizationReport = createTool( 'get-people-utilization-report', 'Get people utilization report', z.object({ start_date: z.string().describe('Start date for report (YYYY-MM-DD)'), end_date: z.string().describe('End date for report (YYYY-MM-DD)'), people_id: z.number().optional().describe('Filter by person ID'), department_id: z.number().optional().describe('Filter by department ID'), }), async (params) => { const response = await floatApi.getPaginated( '/reports/people', params, z.array( z.object({ people_id: z.number().optional(), name: z.string().optional(), department_id: z.number().optional(), scheduled_hours: z.number().optional(), logged_hours: z.number().optional(), utilization: z.number().optional(), }) ) ); return response; } );

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/asachs01/float-mcp'

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