ServiceFusion MCP Server
A Model Context Protocol (MCP) server that provides AI agents with standardized access to ServiceFusion API operations.
Features
- OAuth 2.0 Authentication: Automatic token management and refresh
- Complete CRUD Operations: Create, read, update, and delete customers and jobs
- Type-Safe Interface: Full TypeScript support with validation
- Resource Access: MCP resources for browsing customers and jobs
- Error Handling: Comprehensive error handling and validation
Available Tools
Connection Management
sf_test_connection
- Test ServiceFusion API connectivitysf_get_api_status
- Get current authentication status
Customer Operations
sf_create_customer
- Create new customers with contacts and locationssf_get_customers
- Search and retrieve customers with pagination
Job Operations
sf_create_job
- Create new work orders/jobssf_get_jobs
- Search and retrieve jobs with filteringsf_update_job
- Update job status and detailssf_delete_job
- Delete/cancel jobs
Available Resources
servicefusion://customers
- Paginated list of customersservicefusion://jobs
- Paginated list of jobsservicefusion://customer/{id}
- Individual customer detailsservicefusion://job/{id}
- Individual job detailsservicefusion://api-status
- API connection status
Installation
- Clone and install dependencies:
npm install
- Set up environment variables:
cp .env.example .env
# Edit .env with your ServiceFusion credentials
- Build the project:
npm run build
Usage
Running the MCP Server
npm start
Development Mode
npm run dev
Testing
npm test
Configuration
Set the following environment variables:
SERVICEFUSION_CLIENT_ID
- Your ServiceFusion API client IDSERVICEFUSION_CLIENT_SECRET
- Your ServiceFusion API client secretSERVICEFUSION_BASE_URL
- (Optional) API base URL (defaults to https://api.servicefusion.com)
Integration with Claude Desktop
Add to your Claude Desktop MCP configuration:
{
"mcpServers": {
"servicefusion": {
"command": "node",
"args": ["/path/to/servicefusion-mcp/build/index.js"],
"env": {
"SERVICEFUSION_CLIENT_ID": "your_client_id",
"SERVICEFUSION_CLIENT_SECRET": "your_client_secret"
}
}
}
}
API Examples
Create a Customer
await sf_create_customer({
customer_name: "ABC Property Management",
contacts: [{
fname: "John",
lname: "Doe",
contact_type: "Primary",
phone: "555-1234",
email: "[email protected]"
}],
locations: [{
street_1: "123 Main St",
city: "Dallas",
state_prov: "TX",
postal_code: "75201"
}]
});
Create a Job
await sf_create_job({
check_number: "WO-12345",
customer_id: 123456,
description: "HVAC repair needed",
category: "Maintenance",
priority: "High",
street_1: "123 Main St",
city: "Dallas",
state_prov: "TX"
});
Search Jobs
await sf_get_jobs({
page: 1,
customer_name: "ABC Property",
status: "Scheduled",
updated_since: "2025-01-01T00:00:00Z"
});
Data Models
Customer
customer_name
(required)parent_customer
(optional) - For hierarchical customerscontacts[]
- Array of contact informationlocations[]
- Array of location information
Job
check_number
(required) - Unique identifiercustomer_id
(required) - Associated customerdescription
(required) - Job descriptionstatus
- Job status (Scheduled, In Progress, Completed, etc.)priority
- Job priority (Normal, High, Low)custom_fields[]
- Custom field values
Error Handling
The server includes comprehensive error handling for:
- Authentication failures (automatic token refresh)
- API rate limits and timeouts
- Invalid input validation
- Network connectivity issues
Contributing
- Make changes to TypeScript files in
src/
- Build with
npm run build
- Test with
npm test
- Submit pull requests with tests
License
MIT