ServiceMinder MCP by usefulapi

Find contacts, read appointments and invoices; add contacts, notes and tasks in ServiceMinder.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
85%
이름 품질
76%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (3)

  • LOWTool 'serviceminder_query_appointments' name length outside 3-30 rangeserviceminder_query_appointments에서
  • LOWTool 'serviceminder_list_service_agents' name length outside 3-30 rangeserviceminder_list_service_agents에서
  • LOWTool 'serviceminder_add_or_update_contact' name length outside 3-30 rangeserviceminder_add_or_update_contact에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,346토큰 (도구 정의)
~2.0 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.61%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`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"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 14개