FieldRobin

Authenticated FieldRobin workspace tools, including scope-authorized customer and job creation.

我該用這個嗎

品質與安全性

A
說明品質
99%
結構描述完整度
88%
命名品質
64%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(49)

  • LOWTool 'get-invoice-payment-status' description lacks action verb在 get-invoice-payment-status 中
  • LOWTool 'create-customer' doesn't follow camelCase/snake_case在 create-customer 中
  • LOWTool 'create-job' doesn't follow camelCase/snake_case在 create-job 中
  • LOWTool 'get-workspace-summary' doesn't follow camelCase/snake_case在 get-workspace-summary 中
  • LOWTool 'search-locations' doesn't follow camelCase/snake_case在 search-locations 中
  • LOWTool 'get-location' doesn't follow camelCase/snake_case在 get-location 中
  • LOWTool 'search-customers' doesn't follow camelCase/snake_case在 search-customers 中
  • LOWTool 'search-jobs' doesn't follow camelCase/snake_case在 search-jobs 中
  • LOWTool 'get-customer' doesn't follow camelCase/snake_case在 get-customer 中
  • LOWTool 'get-job' doesn't follow camelCase/snake_case在 get-job 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~7,414Token(工具定義)
~1.3 KB典型回應大小
顯著的注意力影響(128k 上下文的 5.79%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `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"
      ]
    }
  }
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本47 個工具
已驗證未記錄版本47 個工具