FieldRobin

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

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
99%
Integridad del esquema
88%
Calidad de los nombres
64%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (49)

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

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~7,414Tokens (definiciones de herramientas)
~1.3 KBTamaño de respuesta típico
Impacto significativo en la atención (5.79% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "fieldrobin": {
      "url": "https://fieldrobin.com/api/v1/mcp"
    }
  }
}

Puntos de conexión remotos

https://fieldrobin.com/api/v1/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (47)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟡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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢search-locations(query, status, limit)

Lists physical locations in the authenticated workspace.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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"
      ]
    }
  }
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada47 herramientas
verificadoversión no registrada47 herramientas