FieldRobin
Authenticated FieldRobin workspace tools, including scope-authorized customer and job creation.
사용해야 할까요
품질 및 안전성
발견 사항 (49)
- LOWget-invoice-payment-status에서
- LOWcreate-customer에서
- LOWcreate-job에서
- LOWget-workspace-summary에서
- LOWsearch-locations에서
- LOWget-location에서
- LOWsearch-customers에서
- LOWsearch-jobs에서
- LOWget-customer에서
- LOWget-job에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"fieldrobin": {
"url": "https://fieldrobin.com/api/v1/mcp"
}
}
}원격 엔드포인트
https://fieldrobin.com/api/v1/mcpstreamable-http할 수 있는 일
도구 목록
도구 (47)
🟡create-customer(name, phone, email, address, business_name, ...)
Creates one customer directly in the selected FieldRobin business when the connection has customer-write permission. Search first to avoid creating a duplicate; reuse the idempotency key only when retrying the same request.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"description": "Customer full name.",
"minLength": 1,
"maxLength": 255,
"type": "string"
},
"phone": {
"description": "Customer phone number, if known.",
"maxLength": 30,
"type": [
"string",
"null"
]
},
"email": {
"description": "Customer email address, if known.",
"maxLength": 255,
"format": "email",
"type": [
"string",
"null"
]
},
"address": {
"description": "Customer address, if known.",
"maxLength": 500,
"type": [
"string",
"null"
]
},
"business_name": {
"description": "Customer business name, if known.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"trade_type": {
"description": "Customer trade or service type.",
"maxLength": 100,
"type": [
"string",
"null"
]
},
"lifecycle_tag": {
"description": "Lifecycle tag.",
"enum": [
"active",
"inactive",
"vip"
],
"type": [
"string",
"null"
]
},
"acquisition_source": {
"description": "How the customer was acquired.",
"maxLength": 100,
"type": [
"string",
"null"
]
},
"notes": {
"description": "Internal customer notes.",
"type": [
"string",
"null"
]
},
"location_id": {
"description": "Business location for the customer.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"idempotency_key": {
"description": "Opaque retry key. Reuse it only for the same request to receive the verified result without creating a duplicate.",
"minLength": 1,
"maxLength": 128,
"type": "string"
}
},
"required": [
"name",
"idempotency_key"
]
}🟡create-job(customer_id, title, description, service_address, total_amount, ...)
Creates one job directly in the selected FieldRobin business when the connection has job-write permission. Resolve the customer first and pass the verified customer ID when one is named.
입력 스키마
{
"type": "object",
"properties": {
"customer_id": {
"description": "Verified customer ID, if the job belongs to an existing customer.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"title": {
"description": "Short job title.",
"minLength": 1,
"maxLength": 255,
"type": "string"
},
"description": {
"description": "Readable issue and service description.",
"type": [
"string",
"null"
]
},
"service_address": {
"description": "Service address, if known.",
"maxLength": 2000,
"type": [
"string",
"null"
]
},
"total_amount": {
"description": "Optional quoted amount.",
"minimum": 0,
"type": [
"number",
"null"
]
},
"status": {
"description": "Initial job status.",
"enum": [
"lead",
"pending",
"quoted",
"approved",
"scheduled"
],
"type": [
"string",
"null"
]
},
"technician_user_id": {
"description": "Verified technician user ID, if assigned.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"scheduled_at": {
"description": "Optional local wall-clock appointment date/time or ISO timestamp with offset.",
"type": [
"string",
"null"
]
},
"appointment_count": {
"description": "Optional appointment count.",
"minimum": 1,
"maximum": 99,
"type": [
"integer",
"null"
]
},
"voice_notes": {
"description": "Optional internal voice-note text.",
"type": [
"string",
"null"
]
},
"location_id": {
"description": "Business location for the job.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"idempotency_key": {
"description": "Opaque retry key. Reuse it only for the same request to receive the verified result without creating a duplicate.",
"minLength": 1,
"maxLength": 128,
"type": "string"
}
},
"required": [
"title",
"idempotency_key"
]
}🟢get-workspace-summary
Returns a limited, read-only summary of the authenticated FieldRobin workspace.
입력 스키마
{
"type": "object",
"properties": {}
}🟢search-locations(query, status, limit)
Lists physical locations in the authenticated workspace.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Location name to search for.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"status": {
"description": "active, archived, or all.",
"type": [
"string",
"null"
]
},
"limit": {
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢get-location(location_id)
Returns one location and its public Google listing status. A confirmed place is not a Google Business Profile connection.
입력 스키마
{
"type": "object",
"properties": {
"location_id": {
"description": "Location ID.",
"minimum": 1,
"type": "integer"
}
}
}🟢search-customers(query, limit)
Searches the authenticated workspace customers without exposing addresses, notes, or other private fields.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Name, email, phone, or business name to search for.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of customers to return.",
"default": 10,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢search-jobs(query, customer_id, scheduled_from, scheduled_to, status, ...)
Searches the authenticated workspace jobs using safe summary fields only; it does not return service addresses, notes, or amounts.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Customer name, email, phone, or job title.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"customer_id": {
"description": "Restrict results to one customer ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"scheduled_from": {
"description": "Inclusive scheduled date, YYYY-MM-DD.",
"format": "date",
"type": [
"string",
"null"
]
},
"scheduled_to": {
"description": "Inclusive scheduled date, YYYY-MM-DD.",
"format": "date",
"type": [
"string",
"null"
]
},
"status": {
"description": "Optional job status filter.",
"maxLength": 40,
"type": [
"string",
"null"
]
},
"location_id": {
"description": "Restrict results to one business location ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum number of jobs to return.",
"default": 10,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢get-customer(customer_id)
Returns one authorized customer using bounded contact and lifecycle fields; addresses and notes are excluded.
입력 스키마
{
"type": "object",
"properties": {
"customer_id": {
"description": "Customer ID returned by search-customers.",
"minimum": 1,
"type": "integer"
}
}
}🟢get-job(job_id)
Returns one authorized job using bounded customer, schedule, status, and technician fields; service addresses, notes, and amounts are excluded.
입력 스키마
{
"type": "object",
"properties": {
"job_id": {
"description": "Job ID returned by search-jobs or jobs-today.",
"minimum": 1,
"type": "integer"
}
}
}🟢search-leads(query, status, urgency, source, customer_id, ...)
Searches authorized workspace leads with bounded contact, source, status, and service-interest fields; notes and estimated values are excluded.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Name, email, phone, source, or service interest.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"status": {
"description": "Optional lead status.",
"maxLength": 40,
"type": [
"string",
"null"
]
},
"urgency": {
"description": "Optional urgency: low, medium, or high.",
"maxLength": 20,
"type": [
"string",
"null"
]
},
"source": {
"description": "Optional exact lead source.",
"maxLength": 100,
"type": [
"string",
"null"
]
},
"customer_id": {
"description": "Restrict results to a customer ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum number of leads to return.",
"default": 10,
"minimum": 1,
"maximum": 20,
"type": [
"integer",
"null"
]
}
}
}🟢jobs-today(date, technician_id, status, limit)
Lists authorized jobs scheduled for a business day, with bounded customer, schedule, status, and technician fields.
입력 스키마
{
"type": "object",
"properties": {
"date": {
"description": "Local business date, YYYY-MM-DD; defaults to today.",
"format": "date",
"type": [
"string",
"null"
]
},
"technician_id": {
"description": "Optional technician ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"status": {
"description": "Optional job status filter.",
"maxLength": 40,
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of jobs to return.",
"default": 25,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢get-lead(lead_id)
Returns one authorized lead using bounded contact, source, status, and service-interest fields; notes, budget, and internal summaries are excluded.
입력 스키마
{
"type": "object",
"properties": {
"lead_id": {
"description": "Lead ID returned by search-leads.",
"minimum": 1,
"type": "integer"
}
}
}🟢search-quotes(query, status, customer_id, limit)
Searches authorized estimates using bounded customer, status, title, and total fields; notes, terms, and addresses are excluded.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Estimate title, customer name, email, or phone.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"status": {
"description": "Optional estimate status.",
"enum": [
"draft",
"sent",
"changes_requested",
"approved",
"rejected",
"expired",
"converted"
],
"type": [
"string",
"null"
]
},
"customer_id": {
"description": "Restrict results to one customer ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum number of estimates to return.",
"default": 10,
"minimum": 1,
"maximum": 20,
"type": [
"integer",
"null"
]
}
}
}🟢get-quote(quote_id)
Returns one authorized estimate with bounded customer, status, pricing, revision, and line-item fields; addresses, notes, and terms are excluded.
입력 스키마
{
"type": "object",
"properties": {
"quote_id": {
"description": "Estimate ID returned by search-quotes.",
"minimum": 1,
"type": "integer"
}
}
}🟢preview-quote(customer_id, items, document_discount_type, document_discount_value, coupon_code, ...)
Calculates a deterministic estimate preview without saving, sending, or creating a quote.
입력 스키마
{
"type": "object",
"properties": {
"customer_id": {
"description": "Optional resolved customer ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"items": {
"description": "Estimate line item.",
"minItems": 1,
"maxItems": 50,
"items": {
"properties": {
"description": {
"maxLength": 500,
"type": "string"
},
"quantity": {
"minimum": 0,
"type": "number"
},
"unit_price": {
"minimum": 0,
"type": "number"
},
"item_type": {
"enum": [
"material",
"labour",
"service",
"equipment",
"fee"
],
"type": [
"string",
"null"
]
},
"discount_type": {
"enum": [
"none",
"percentage",
"fixed"
],
"type": [
"string",
"null"
]
},
"discount_value": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"tax_behavior": {
"enum": [
"inherit",
"taxable",
"non_taxable",
"automatic"
],
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"document_discount_type": {
"enum": [
"none",
"percentage",
"fixed"
],
"type": [
"string",
"null"
]
},
"document_discount_value": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"coupon_code": {
"maxLength": 100,
"type": [
"string",
"null"
]
},
"tax_mode": {
"enum": [
"none",
"manual"
],
"type": [
"string",
"null"
]
},
"tax_rate_id": {
"minimum": 1,
"type": [
"integer",
"null"
]
}
}
}🟢search-invoices(query, status, payment_status, customer_id, job_id, ...)
Searches authorized invoices using bounded customer, job, status, payment, due-date, and total fields; payment links and addresses are excluded.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Invoice number, customer name, email, phone, job title, or description.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"status": {
"description": "Invoice lifecycle status.",
"enum": [
"draft",
"sent",
"overdue",
"paid",
"cancelled"
],
"type": [
"string",
"null"
]
},
"payment_status": {
"description": "Authoritative payment state, such as unpaid, pending, paid, or refunded.",
"maxLength": 40,
"type": [
"string",
"null"
]
},
"customer_id": {
"description": "Restrict results to one customer ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"job_id": {
"description": "Restrict results to one job ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum number of invoices to return.",
"default": 10,
"minimum": 1,
"maximum": 20,
"type": [
"integer",
"null"
]
}
}
}🟢get-invoice(invoice_id)
Returns one authorized invoice with bounded customer, job, payment-state, due-date, and line-item fields; payment links, addresses, and internal notes are excluded.
입력 스키마
{
"type": "object",
"properties": {
"invoice_id": {
"description": "Invoice ID returned by search-invoices.",
"minimum": 1,
"type": "integer"
}
}
}🟢preview-invoice(customer_id, items, document_discount_type, document_discount_value, coupon_code, ...)
Calculates a deterministic invoice preview without saving, charging, sending, or creating an invoice.
입력 스키마
{
"type": "object",
"properties": {
"customer_id": {
"description": "Resolved customer ID; required for an invoice preview.",
"minimum": 1,
"type": "integer"
},
"items": {
"description": "Invoice line items.",
"minItems": 1,
"maxItems": 50,
"items": {
"properties": {
"description": {
"maxLength": 500,
"type": "string"
},
"quantity": {
"minimum": 0,
"type": "number"
},
"unit_price": {
"minimum": 0,
"type": "number"
},
"item_type": {
"enum": [
"material",
"labour",
"service",
"equipment",
"fee"
],
"type": [
"string",
"null"
]
},
"discount_type": {
"enum": [
"none",
"percentage",
"fixed"
],
"type": [
"string",
"null"
]
},
"discount_value": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"tax_behavior": {
"enum": [
"inherit",
"taxable",
"non_taxable",
"automatic"
],
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"document_discount_type": {
"enum": [
"none",
"percentage",
"fixed"
],
"type": [
"string",
"null"
]
},
"document_discount_value": {
"minimum": 0,
"type": [
"number",
"null"
]
},
"coupon_code": {
"maxLength": 100,
"type": [
"string",
"null"
]
},
"tax_mode": {
"enum": [
"none",
"manual"
],
"type": [
"string",
"null"
]
},
"tax_rate_id": {
"minimum": 1,
"type": [
"integer",
"null"
]
}
}
}🟢schedule-availability(date, technician_id, duration_minutes, job_duration_minutes, workday_start, ...)
Calculates verified busy jobs and open planning windows for a local business day without scheduling or changing a job.
입력 스키마
{
"type": "object",
"properties": {
"date": {
"description": "Local business date, YYYY-MM-DD; defaults to today.",
"format": "date",
"type": [
"string",
"null"
]
},
"technician_id": {
"description": "Optional same-business technician ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"duration_minutes": {
"description": "Requested appointment length.",
"default": 60,
"minimum": 15,
"maximum": 480,
"type": [
"integer",
"null"
]
},
"job_duration_minutes": {
"description": "Planning duration for existing jobs.",
"default": 60,
"minimum": 15,
"maximum": 480,
"type": [
"integer",
"null"
]
},
"workday_start": {
"description": "Planning window start hour.",
"default": 10,
"minimum": 0,
"maximum": 23,
"type": [
"integer",
"null"
]
},
"workday_end": {
"description": "Planning window end hour.",
"default": 20,
"minimum": 1,
"maximum": 24,
"type": [
"integer",
"null"
]
}
}
}🟢pipeline-next-actions(action_state, priority, action_type, due_before, limit)
Lists persisted pipeline attention items for the authenticated business without changing, dismissing, or executing them.
입력 스키마
{
"type": "object",
"properties": {
"action_state": {
"description": "Pipeline state; defaults to open.",
"enum": [
"open",
"in_progress",
"snoozed",
"blocked",
"dismissed",
"done"
],
"type": [
"string",
"null"
]
},
"priority": {
"description": "Optional priority filter.",
"enum": [
"urgent",
"high",
"normal",
"low"
],
"type": [
"string",
"null"
]
},
"action_type": {
"description": "Optional exact action type.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"due_before": {
"description": "Only actions due on or before this local date.",
"format": "date",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of actions to return.",
"default": 10,
"minimum": 1,
"maximum": 20,
"type": [
"integer",
"null"
]
}
}
}🟢pipeline-recommendations(recommendation_id, status, action_type, limit, include_draft_history)
Lists persisted pipeline recommendations for the authenticated business without generating, editing, approving, rejecting, or executing them.
입력 스키마
{
"type": "object",
"properties": {
"recommendation_id": {
"description": "Optional exact recommendation ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"status": {
"description": "Recommendation state; defaults to pending.",
"enum": [
"pending",
"approved",
"rejected",
"expired"
],
"type": [
"string",
"null"
]
},
"action_type": {
"description": "Optional exact pipeline recommendation action type.",
"maxLength": 80,
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum recommendations to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
},
"include_draft_history": {
"description": "When true, recommendation_id is required and bounded draft edit history is returned.",
"default": false,
"type": [
"boolean",
"null"
]
}
}
}🟢customer-service-requests(customer_id, limit)
Lists recent active service requests associated with one authorized customer using bounded status, source, urgency, and scheduling fields.
입력 스키마
{
"type": "object",
"properties": {
"customer_id": {
"description": "Customer ID returned by search-customers.",
"minimum": 1,
"type": "integer"
},
"limit": {
"description": "Maximum number of service requests to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢search-service-requests(q, view, status, urgency, limit)
Finds bounded active service-request inbox records for the authenticated business without exposing request descriptions, addresses, contact channels, or outreach controls.
입력 스키마
{
"type": "object",
"properties": {
"q": {
"description": "Client name, service type, or request text.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"view": {
"description": "Inbox view; defaults to active inbox records.",
"enum": [
"inbox",
"pending",
"converted",
"outreach",
"all"
],
"type": [
"string",
"null"
]
},
"status": {
"description": "Optional exact active request status.",
"enum": [
"sent",
"opened",
"submitted",
"reviewing",
"scheduled",
"quoted",
"converted"
],
"type": [
"string",
"null"
]
},
"urgency": {
"description": "Optional urgency filter.",
"enum": [
"low",
"medium",
"high"
],
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of requests to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢get-service-request(service_request_id)
Returns one authorized service-request inbox record using bounded status, source, urgency, and scheduling fields without exposing request descriptions, addresses, contact channels, metadata, files, or outreach controls.
입력 스키마
{
"type": "object",
"properties": {
"service_request_id": {
"description": "Service-request ID returned by search-service-requests.",
"minimum": 1,
"type": "integer"
}
}
}🟢get-invoice-payment-status(invoice_id)
Returns the authoritative payment state for one authorized invoice without exposing payment links or provider identifiers.
입력 스키마
{
"type": "object",
"properties": {
"invoice_id": {
"description": "Invoice ID returned by search-invoices.",
"minimum": 1,
"type": "integer"
}
}
}🟢preview-review-requests(job_ids, channel)
Previews explicit completed jobs for review requests, including eligibility and skip reasons, without sending anything.
입력 스키마
{
"type": "object",
"properties": {
"job_ids": {
"description": "Explicit job IDs to evaluate.",
"minItems": 1,
"maxItems": 50,
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"channel": {
"description": "Optional review-request channel preference.",
"enum": [
"sms",
"email"
],
"type": [
"string",
"null"
]
}
}
}🟢search-reviews(query, platform, rating_min, rating_max, has_reply, ...)
Searches authorized reviews by reviewer, customer, job, rating, platform, or reply status using bounded fields.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Reviewer, customer, job title, review body, or platform.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"platform": {
"description": "Review platform.",
"enum": [
"google",
"facebook",
"yelp",
"industry",
"bbb",
"angi",
"thumbtack",
"custom"
],
"type": [
"string",
"null"
]
},
"rating_min": {
"description": "Minimum rating.",
"minimum": 1,
"maximum": 5,
"type": [
"integer",
"null"
]
},
"rating_max": {
"description": "Maximum rating.",
"minimum": 1,
"maximum": 5,
"type": [
"integer",
"null"
]
},
"has_reply": {
"description": "Filter by whether an owner reply exists.",
"type": [
"boolean",
"null"
]
},
"reply_status": {
"description": "Reply delivery state.",
"enum": [
"none",
"pending",
"sent",
"failed"
],
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of reviews to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢draft-review-reply(review_id, tone)
Drafts a policy-aware reply for one authorized review without posting or changing the review.
입력 스키마
{
"type": "object",
"properties": {
"review_id": {
"description": "Review ID returned by search-reviews.",
"minimum": 1,
"type": "integer"
},
"tone": {
"description": "Draft tone.",
"enum": [
"professional",
"warm",
"concise"
],
"type": [
"string",
"null"
]
}
}
}🟢search-referral-campaigns(query, status, limit)
Searches authorized referral campaigns by name, status, message channel, and bounded performance fields.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Campaign name, message, or channel.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"status": {
"description": "Campaign status.",
"enum": [
"active",
"paused",
"archived"
],
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of campaigns to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢get-referral-campaign-attribution(campaign_id, days)
Shows verified referral campaign totals and conversion activity without returning referral tokens or bearer-like links.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"description": "Referral campaign ID returned by search-referral-campaigns.",
"minimum": 1,
"type": "integer"
},
"days": {
"description": "Lookback window in days.",
"default": 30,
"minimum": 1,
"maximum": 180,
"type": [
"integer",
"null"
]
}
}
}🟢preview-referral-campaign(campaign_id, limit)
Previews eligible completed jobs for one authorized referral campaign without sending or changing records.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"description": "Referral campaign ID returned by search-referral-campaigns.",
"minimum": 1,
"type": "integer"
},
"limit": {
"description": "Maximum audience items to evaluate.",
"default": 25,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢search-reactivation-campaigns(query, status, limit)
Searches authorized reactivation campaigns by name, status, channel, and job-type filter.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Campaign name, message, channel, or job type.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"status": {
"description": "Campaign status.",
"enum": [
"active",
"paused",
"archived"
],
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of campaigns to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢preview-reactivation-campaign(campaign_id, limit)
Previews dormant customers eligible for one authorized reactivation campaign without sending or changing records.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"description": "Reactivation campaign ID returned by search-reactivation-campaigns.",
"minimum": 1,
"type": "integer"
},
"limit": {
"description": "Maximum audience items to evaluate.",
"default": 25,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢search-broadcast-campaigns(query, status, limit)
Searches authorized broadcast campaigns by name, status, message channel, and bounded delivery fields.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Campaign name, message, or channel.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"status": {
"description": "Campaign status.",
"enum": [
"draft",
"pending_approval",
"approved",
"rejected",
"sent",
"archived"
],
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of campaigns to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢preview-broadcast-campaign(campaign_id, limit)
Previews one approved broadcast audience, including suppression and policy skips, without sending or changing records.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"description": "Broadcast campaign ID returned by search-broadcast-campaigns.",
"minimum": 1,
"type": "integer"
},
"limit": {
"description": "Maximum audience items to evaluate.",
"default": 25,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢search-social-drafts(query, status, platform, review_id, limit)
Searches authorized social drafts and returns bounded content, status, platform, source-review, and approval metadata.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Draft content, platform, status, or ID.",
"maxLength": 120,
"type": [
"string",
"null"
]
},
"status": {
"description": "Draft approval state.",
"enum": [
"pending_approval",
"approved",
"rejected",
"published"
],
"type": [
"string",
"null"
]
},
"platform": {
"description": "Social platform.",
"enum": [
"facebook",
"instagram",
"google_business"
],
"type": [
"string",
"null"
]
},
"review_id": {
"description": "Optional source review ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum number of drafts to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢preview-social-draft(content, platform, review_id)
Validates social post copy for an authorized source review without saving or publishing it.
입력 스키마
{
"type": "object",
"properties": {
"content": {
"description": "Proposed social post content.",
"minLength": 3,
"maxLength": 1200,
"type": "string"
},
"platform": {
"description": "Social platform.",
"enum": [
"facebook",
"instagram",
"google_business"
],
"type": [
"string",
"null"
]
},
"review_id": {
"description": "Optional authorized source review ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
}
}
}🟢list-job-photos(job_id)
Lists authorized private photos attached to one job with protected download URLs, filenames, captions, and media types.
입력 스키마
{
"type": "object",
"properties": {
"job_id": {
"description": "Job ID returned by search-jobs.",
"minimum": 1,
"type": "integer"
}
}
}🟢search-inventory(query, low_stock, active, limit)
Searches active inventory in the authenticated workspace and can identify low-stock items without exposing internal cost or margin fields.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Inventory name, SKU, or description.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"low_stock": {
"description": "Only items at or below minimum quantity.",
"type": [
"boolean",
"null"
]
},
"active": {
"description": "Filter by active state; defaults to true.",
"type": [
"boolean",
"null"
]
},
"limit": {
"description": "Maximum items to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢search-pricebook(query, type, active, limit)
Searches active customer-facing services and materials in the authenticated workspace without exposing internal cost or markup fields.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Pricebook item name or description.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"type": {
"description": "Service or material.",
"enum": [
"service",
"material"
],
"type": [
"string",
"null"
]
},
"active": {
"description": "Filter by active state; defaults to true.",
"type": [
"boolean",
"null"
]
},
"limit": {
"description": "Maximum items to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢complaint-recall-risk(query, status, limit)
Lists complaint and recall risk records for the authenticated workspace without exposing private operational notes.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Job title, customer name, or technician name.",
"maxLength": 255,
"type": [
"string",
"null"
]
},
"status": {
"description": "Risk state; defaults to open.",
"enum": [
"open",
"resolved",
"all"
],
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum records to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢routing-driving-risk(date, technician_id, limit)
Reads a local business day route and high driving-risk stops for the authenticated workspace without exposing addresses or private route notes.
입력 스키마
{
"type": "object",
"properties": {
"date": {
"description": "Local business date, YYYY-MM-DD; defaults to today.",
"format": "date",
"type": [
"string",
"null"
]
},
"technician_id": {
"description": "Optional technician filter.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum route stops to return.",
"default": 50,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢operations-parts(technician_id, limit)
Reads bounded parts stock, technician exposure, and transaction metadata for the authenticated workspace without exposing amounts, item pricing, or private notes.
입력 스키마
{
"type": "object",
"properties": {
"technician_id": {
"description": "Optional same-business technician ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum inventory, transactions, and technician balances to return.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢operations-scorecards(technician_id, limit)
Reads bounded technician performance and coaching signals for the authenticated workspace without exposing coaching notes or private contact fields.
입력 스키마
{
"type": "object",
"properties": {
"technician_id": {
"description": "Optional same-business technician ID.",
"minimum": 1,
"type": [
"integer",
"null"
]
},
"limit": {
"description": "Maximum jobs sampled per technician.",
"default": 20,
"minimum": 1,
"maximum": 50,
"type": [
"integer",
"null"
]
}
}
}🟢reports-overview(period)
Reads aggregate revenue, receivables, job, lead, and estimate performance for the authenticated workspace without exposing customer names, addresses, invoice rows, or mutation access.
입력 스키마
{
"type": "object",
"properties": {
"period": {
"description": "Number of days for the bounded trend metrics; defaults to 30.",
"default": 30,
"enum": [
7,
30,
90,
365
],
"type": [
"integer",
"null"
]
}
}
}🟢reports-by-location(period)
Compares revenue, activation, retention, and review-request outcomes by physical location. Does not expose customer names, invoice rows, or mutation access. Location writes stay on the in-product assistant, not MCP.
입력 스키마
{
"type": "object",
"properties": {
"period": {
"description": "Number of days for location comparison metrics; defaults to 30.",
"default": 30,
"enum": [
7,
30,
90,
365
],
"type": [
"integer",
"null"
]
}
}
}🟢reports-customer-revenue-rank(period, from, to, limit)
Ranks named customers by paid invoice revenue for the authenticated workspace. Uses all paid, non-sample invoices and returns aggregate customer totals without invoice rows.
입력 스키마
{
"type": "object",
"properties": {
"period": {
"description": "Ranking window. Use all_time for to-date questions.",
"default": "all_time",
"enum": [
"all_time",
"7",
"30",
"90",
"365",
"custom"
],
"type": [
"string",
"null"
]
},
"from": {
"description": "Inclusive start date when period is custom.",
"type": [
"string",
"null"
]
},
"to": {
"description": "Inclusive end date when period is custom.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Maximum number of ranked customers to return.",
"default": 20,
"minimum": 1,
"maximum": 100,
"type": [
"integer",
"null"
]
}
}
}커뮤니티
증거