ServiceMinder MCP by usefulapi
Find contacts, read appointments and invoices; add contacts, notes and tasks in ServiceMinder.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- LOWserviceminder_query_appointments에서
- LOWserviceminder_list_service_agents에서
- LOWserviceminder_add_or_update_contact에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"serviceminder": {
"url": "https://serviceminder.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://serviceminder.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (14)
🟢serviceminder_locate_contacts(name, phone, email, address, contact_id, ...)
Find contacts by name, phone, email, address, contact ID, tag or category. Needs a brand-scoped API key. Calls POST /api/contacts/locate.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"description": "Name to search for.",
"type": "string"
},
"phone": {
"description": "Phone number to search for.",
"type": "string"
},
"email": {
"description": "Email address to search for.",
"type": "string"
},
"address": {
"description": "Address to search for.",
"type": "string"
},
"contact_id": {
"description": "Exact ServiceMinder contact ID.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"digital_tracking_id": {
"description": "Digital tracking ID of a lead.",
"type": "string"
},
"created_from": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"created_through": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"category": {
"description": "Contact category name.",
"type": "string"
},
"tags": {
"description": "Tag names; a contact must have them.",
"type": "array",
"items": {
"type": "string"
}
},
"return_payment_on_file": {
"description": "Include the payment method on file (default false).",
"type": "boolean"
},
"skip": {
"description": "Records to skip (paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Records to return, 1 to 500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_query_appointments(from_date, through_date, updated_from, updated_through, contact_id, ...)
List appointments by date range, last change, contact or service agent. Pages with skip and take (max 500). Calls POST /api/appointments/query.
입력 스키마
{
"type": "object",
"properties": {
"from_date": {
"description": "Appointments on or after this date.",
"type": "string",
"minLength": 1
},
"through_date": {
"description": "Appointments on or before this date.",
"type": "string",
"minLength": 1
},
"updated_from": {
"description": "Appointments changed on or after this time.",
"type": "string",
"minLength": 1
},
"updated_through": {
"description": "Appointments changed on or before this time.",
"type": "string",
"minLength": 1
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"service_agent_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"include_contact": {
"type": "boolean"
},
"skip": {
"description": "Records to skip (paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"take": {
"description": "Records per page, 1 to 500.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_query_proposals(scope, from_date, through_date, from_accepted, through_accepted, ...)
List proposals by scope, date, acceptance date, owner or contact. The public docs do not list scope values, so pass the scope name your account uses. Calls POST /api/proposal/query.
입력 스키마
{
"type": "object",
"properties": {
"scope": {
"description": "Scope name your account uses. Sent only when given.",
"type": "string"
},
"from_date": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"through_date": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"from_accepted": {
"description": "Proposals accepted on or after this time.",
"type": "string",
"minLength": 1
},
"through_accepted": {
"description": "Proposals accepted on or before this time.",
"type": "string",
"minLength": 1
},
"updated_from": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"updated_through": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"owner_user_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"include_contact": {
"type": "boolean"
},
"skip": {
"description": "Records to skip (paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"take": {
"description": "Records per page, 1 to 500.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_get_proposal(proposal_id)
Get one proposal with its lines, status, totals and customer notes. Calls POST /api/proposal/details.
입력 스키마
{
"type": "object",
"properties": {
"proposal_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "ServiceMinder proposal ID."
}
},
"required": [
"proposal_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_query_invoices(from_date, through_date, updated_from, updated_through, contact_id, ...)
List invoices by date range, last change or contact. Pages with skip and take (max 500). Calls POST /api/invoice/query.
입력 스키마
{
"type": "object",
"properties": {
"from_date": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"through_date": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"updated_from": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"updated_through": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"include_contact": {
"type": "boolean"
},
"skip": {
"description": "Records to skip (paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"take": {
"description": "Records per page, 1 to 500.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_get_invoice(invoice_id, include_contact)
Get one invoice with its payments. Calls POST /api/invoice/get.
입력 스키마
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "ServiceMinder invoice ID."
},
"include_contact": {
"type": "boolean"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_query_payments(from_date, through_date, created_from, created_through, contact_id, ...)
List payments by date range, contact or invoice. Pages with skip and take (max 500). Calls POST /api/payment/query.
입력 스키마
{
"type": "object",
"properties": {
"from_date": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"through_date": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"created_from": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"created_through": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"skip": {
"description": "Records to skip (paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"take": {
"description": "Records per page, 1 to 500.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_list_services(service_id, include_parts, include_inactive)
List the services of the organization, optionally with parts. Calls POST /api/services/all.
입력 스키마
{
"type": "object",
"properties": {
"service_id": {
"description": "Return only this service.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"include_parts": {
"type": "boolean"
},
"include_inactive": {
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_list_service_agents
List the service agents (field staff) of the organization. Calls POST /api/serviceagents/all.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_get_organization(organization_id)
Get the details of an organization: its services, agents, users and custom fields. Calls POST /api/organizations/details.
입력 스키마
{
"type": "object",
"properties": {
"organization_id": {
"description": "Organization ID. Omit it to use the key's own organization.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢serviceminder_query_tasks(task_id, contact_id, task_type, category, due_from, ...)
List follow-up tasks by due date, last change, contact or type. Pages with skip and take. Calls POST /api/task/query.
입력 스키마
{
"type": "object",
"properties": {
"task_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"task_type": {
"description": "Task type number from your ServiceMinder account.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"category": {
"description": "Task category name.",
"type": "string"
},
"due_from": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"due_through": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"updated_from": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"updated_through": {
"description": "Date or date-time, for example 2026-10-01 or 2026-10-01T09:00:00.",
"type": "string",
"minLength": 1
},
"include_completed": {
"type": "boolean"
},
"skip": {
"description": "Records to skip (paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"take": {
"description": "Records per page, 1 to 500.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴serviceminder_add_or_update_contact(name, phone, email, zip, custom_fields, ...)
Add a lead or update a contact. Needs a name and a phone or an email. Custom fields use the names in your account. Calls POST /api/contacts/addupdate.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Full name of the contact."
},
"phone": {
"type": "string"
},
"email": {
"type": "string"
},
"zip": {
"description": "Postal code. Lead distribution uses it.",
"type": "string"
},
"custom_fields": {
"description": "Custom fields to set, by field name.",
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"value": {
"type": "string"
}
},
"required": [
"name",
"value"
]
}
},
"distribute_lead": {
"description": "Route the lead to the organization that owns the postal code. Brand-scoped key only.",
"type": "boolean"
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴serviceminder_add_contact_note(contact_id, note)
Add a note to a contact. Calls POST /api/contacts/addnote.
입력 스키마
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "ServiceMinder contact ID."
},
"note": {
"type": "string",
"minLength": 1,
"description": "Note text."
}
},
"required": [
"contact_id",
"note"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴serviceminder_create_task(contact_id, description, task_type, due, category, ...)
Create a follow-up task for a contact. Calls POST /api/task/create.
입력 스키마
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "ServiceMinder contact ID."
},
"description": {
"type": "string",
"minLength": 1,
"description": "What the task is."
},
"task_type": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Task type number from your ServiceMinder account."
},
"due": {
"description": "When the task is due.",
"type": "string",
"minLength": 1
},
"category": {
"type": "string",
"minLength": 1,
"description": "Task category name from your account."
},
"duration_minutes": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"contact_id",
"description",
"task_type",
"category"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거