Jake Shore 601224bf70 fieldedge: Complete MCP server with 87 tools and 16 React apps
- Multi-file architecture with API client, comprehensive types, 13 tool domains
- 87 total tools covering customers, jobs, invoices, estimates, equipment, technicians, scheduling, inventory, payments, reporting, locations, service agreements, tasks
- 16 dark-themed React MCP apps (Dashboard, Customers, Jobs, Scheduling, Invoices, Estimates, Technicians, Equipment, Inventory, Payments, Service Agreements, Reports, Tasks, Calendar, Map View, Price Book)
- Full TypeScript support with zero compilation errors
- Comprehensive README with API coverage details
- Bearer token authentication with rate limiting and error handling
2026-02-12 18:18:51 -05:00

109 lines
2.9 KiB
TypeScript

/**
* Payment Management Tools
*/
import type { Payment } from '../types/index.js';
import { getFieldEdgeClient } from '../clients/fieldedge.js';
export const paymentTools = [
{
name: 'fieldedge_list_payments',
description: 'List all payments',
inputSchema: {
type: 'object',
properties: {
page: { type: 'number' },
pageSize: { type: 'number' },
customerId: { type: 'string' },
invoiceId: { type: 'string' },
status: { type: 'string', enum: ['pending', 'processed', 'failed', 'refunded'] },
paymentMethod: { type: 'string', enum: ['cash', 'check', 'credit-card', 'debit-card', 'ach', 'wire', 'other'] },
startDate: { type: 'string' },
endDate: { type: 'string' },
},
},
},
{
name: 'fieldedge_get_payment',
description: 'Get specific payment',
inputSchema: {
type: 'object',
properties: {
id: { type: 'string' },
},
required: ['id'],
},
},
{
name: 'fieldedge_process_payment',
description: 'Process a new payment',
inputSchema: {
type: 'object',
properties: {
invoiceId: { type: 'string' },
customerId: { type: 'string' },
amount: { type: 'number' },
paymentMethod: { type: 'string', enum: ['cash', 'check', 'credit-card', 'debit-card', 'ach', 'wire', 'other'] },
paymentDate: { type: 'string' },
reference: { type: 'string' },
notes: { type: 'string' },
},
required: ['invoiceId', 'customerId', 'amount', 'paymentMethod'],
},
},
{
name: 'fieldedge_refund_payment',
description: 'Refund a payment',
inputSchema: {
type: 'object',
properties: {
id: { type: 'string' },
amount: { type: 'number' },
reason: { type: 'string' },
},
required: ['id', 'amount', 'reason'],
},
},
{
name: 'fieldedge_void_payment',
description: 'Void a payment',
inputSchema: {
type: 'object',
properties: {
id: { type: 'string' },
reason: { type: 'string' },
},
required: ['id', 'reason'],
},
},
];
export async function handlePaymentTool(name: string, args: any): Promise<any> {
const client = getFieldEdgeClient();
switch (name) {
case 'fieldedge_list_payments':
return await client.getPaginated<Payment>('/payments', args);
case 'fieldedge_get_payment':
return await client.get<Payment>(`/payments/${args.id}`);
case 'fieldedge_process_payment':
return await client.post<Payment>('/payments', args);
case 'fieldedge_refund_payment':
return await client.post<Payment>(`/payments/${args.id}/refund`, {
amount: args.amount,
reason: args.reason,
});
case 'fieldedge_void_payment':
return await client.post(`/payments/${args.id}/void`, {
reason: args.reason,
});
default:
throw new Error(`Unknown payment tool: ${name}`);
}
}