Quote and invoice PDFs, cleaning prices, sales tax and leaf blower rules for US service businesses
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Says whether state sales tax (or the state's equivalent) applies to home (residential) and commercial cleaning services in one US state or DC, from EosLog's state by state reference. Each answer is what that state's own official pages say, with the official source links, the state base rate where the source states one, and the date it was checked. It is not tax advice and does not cover local taxes.
Two-letter code (TX) or full name (Texas). DC is included.
home for residential cleaning, commercial for offices and other businesses, or both.
Says whether state sales tax (or the state's equivalent) applies to home (residential) and commercial cleaning services in one US state or DC, from EosLog's state by state reference. Each answer is what that state's own official pages say, with the official source links, the state base rate where the source states one, and the date it was checked. It is not tax advice and does not cover local taxes.
| Argument | Type | Description |
|---|---|---|
| state* | string | Two-letter code (TX) or full name (Texas). DC is included. |
| audience | string | home for residential cleaning, commercial for offices and other businesses, or both. |
{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "Two-letter code (TX) or full name (Texas). DC is included."
},
"audience": {
"enum": [
"home",
"commercial",
"both"
],
"type": "string",
"default": "both",
"description": "home for residential cleaning, commercial for offices and other businesses, or both."
}
}
}Makes a professional invoice PDF for a small service business from the details the user gives: the business name, the customer, and each line item's name, quantity and price, plus an optional tax rate, discount, payment terms, service date, invoice number and note. EosLog adds up the subtotal, discount, tax and total due, sets the due date from the payment terms, saves the invoice behind an unguessable link for 90 days, and returns that link (view, download or email the PDF) and a direct PDF link. Use it when the user wants an invoice to send a customer. It uses the user's prices and never sets them.
| Argument | Type | Description |
|---|---|---|
| notes | string | Optional note, such as how to pay. |
| tax_rate | number | Sales tax percent on the subtotal after any discount, for example 8.25. The user supplies it. |
| line_items* | array | One row per service or item, with the prices the user gives. |
| service_date | string | Optional date or period of the work, as text, for example October 2026 or 10/1 to 10/15. |
| business_name* | string | The business sending the document, as it should print at the top. |
| customer_name | string | Who the document is for, a person or a company. Printed as Customer when left out. |
| payment_terms | string | When payment is due: on receipt, or 15, 30 or 45 days after the invoice date. |
| business_email | string | Business email to print on it. |
| business_phone | string | Business phone to print on it. |
| invoice_number | string | Optional invoice number. One based on the date and time is used when left out. |
| discount_percent | number | Optional discount, as a percent off the subtotal. |
Makes a professional quote (estimate) PDF for a small service business from the details the user gives: the business name, the customer, and each line item's name, quantity and price, plus an optional tax rate, discount, deposit, note and how many days the quote stays valid. EosLog adds up the subtotal, discount, tax and total, saves the quote behind an unguessable link for 90 days, and returns that link (view, download or email the PDF) and a direct PDF link. Use it when the user wants a quote or estimate to send a customer. It uses the user's prices and never sets them.
| Argument | Type | Description |
|---|---|---|
| title | string | Optional subject line, for example Biweekly house cleaning. |
| message | string | Optional note to the customer. |
| tax_rate | number | Sales tax percent on the subtotal after any discount, for example 8.25. The user supplies it. |
| line_items* | array | One row per service or item, with the prices the user gives. |
| valid_days | integer | How many days the quote stays valid. |
| business_name* | string | The business sending the document, as it should print at the top. |
| customer_name | string | Who the document is for, a person or a company. Printed as Customer when left out. |
Prices one residential house cleaning visit with the math behind EosLog's free cleaning price calculator: time on site from the home's size and square footage, times a frequency factor and the cleaner's hourly rate, plus supplies, drive and add-ons, adjusted for the local market and rounded to $5. Returns the price, a low to high range, hours on site, a per square foot cross-check, the math, and a link that opens the calculator with these inputs so the user can adjust them. Every input is optional and has the calculator's default.
| Argument | Type | Description |
|---|---|---|
| size | string | Bedrooms and bathrooms, for example 3br2ba for 3 bedrooms and 2 bathrooms. |
| sqft | integer | Square footage. Defaults to the typical size for the layout (1,600 for 3br2ba). |
| addons | array | Extras that apply: pets (+$15), kids under 10 (+$20), oven inside (+$35), fridge inside (+$30), trash takeout (+$10), laundry, one load washed and folded (+$20). |
| market | string | rural (0.80x), standard for most US metros (1.00x), or coastal for a high-cost coastal metro (1.30x). |
| frequency | string | How often the home is cleaned. deep is a first or one-time deep clean; moveout is a one-time move-out clean. |
| hourly_rate | integer | What the cleaner bills per cleaner-hour, in US dollars. |
Finds the free EosLog tool for a service business task: a quote or invoice generator (with a page for the trade where one exists), a price calculator for house, move-out, deep, commercial or Airbnb cleaning, pressure washing or landscaping (with the URL params that prefill it), or contract and form templates, filtered by trade when given. Returns titles and https://eoslog.com URLs. Every tool is free and needs no account.
| Argument | Type | Description |
|---|---|---|
| need* | string | What the user is trying to do. |
| trade | string | Optional trade, used to pick trade pages and templates. |
{
"type": "object",
"required": [
"need"
],
"properties": {
"need": {
"enum": [
"quote",
"invoice",
"house_cleaning_price",
"move_out_cleaning_price",
"deep_cleaning_price",
"commercial_cleaning_bid",
"airbnb_cleaning_price",
"pressure_washing_price",
"landscaping_price",
"contract_or_form_template"
],
"type": "string",
"description": "What the user is trying to do."
},
"trade": {
"enum": [
"hvac",
"plumbing",
"electrical",
"landscaping",
"cleaning",
"pest_control",
"handyman",
"property_management",
"pressure_washing"
],
"type": "string",
"description": "Optional trade, used to pick trade pages and templates."
}
}
}Lists adopted local laws that ban or restrict gas leaf blowers in one US state, or one city or town in it, from EosLog's sourced table: the rule, when it took or takes effect and any later phases, who is cited, the penalty, and the official sources with the date each row was checked. Also reports a state law that blocks local bans (Florida, Georgia, and Texas). Without a city it lists every place in the state briefly; pass city for the full row. A place with no row may still have a rule EosLog has not confirmed.
| Argument | Type | Description |
|---|---|---|
| city | string | Optional city, town, village or county name, for example Los Angeles. |
| state* | string | Two-letter code (CA) or full name (California). DC is included. |
{
"type": "object",
"required": [
"state"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"description": "Optional city, town, village or county name, for example Los Angeles."
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "Two-letter code (CA) or full name (California). DC is included."
}
}
}{
"type": "object",
"required": [
"business_name",
"line_items"
],
"properties": {
"notes": {
"type": "string",
"maxLength": 1000,
"description": "Optional note, such as how to pay."
},
"tax_rate": {
"type": "number",
"default": 0,
"maximum": 25,
"minimum": 0,
"description": "Sales tax percent on the subtotal after any discount, for example 8.25. The user supplies it."
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"unit_price"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"description": "What the line is for."
},
"quantity": {
"type": "number",
"default": 1,
"maximum": 10000,
"minimum": 0.01,
"description": "Units, hours or visits."
},
"unit_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Price per unit in US dollars."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Optional detail under the name."
}
}
},
"maxItems": 25,
"minItems": 1,
"description": "One row per service or item, with the prices the user gives."
},
"service_date": {
"type": "string",
"maxLength": 60,
"description": "Optional date or period of the work, as text, for example October 2026 or 10/1 to 10/15."
},
"business_name": {
"type": "string",
"maxLength": 100,
"description": "The business sending the document, as it should print at the top."
},
"customer_name": {
"type": "string",
"maxLength": 100,
"description": "Who the document is for, a person or a company. Printed as Customer when left out."
},
"payment_terms": {
"enum": [
"upon_receipt",
"net_15",
"net_30",
"net_45"
],
"type": "string",
"default": "upon_receipt",
"description": "When payment is due: on receipt, or 15, 30 or 45 days after the invoice date."
},
"business_email": {
"type": "string",
"maxLength": 120,
"description": "Business email to print on it."
},
"business_phone": {
"type": "string",
"maxLength": 30,
"description": "Business phone to print on it."
},
"invoice_number": {
"type": "string",
"maxLength": 40,
"description": "Optional invoice number. One based on the date and time is used when left out."
},
"discount_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Optional discount, as a percent off the subtotal."
}
}
}| business_email | string | Business email to print on it. |
| business_phone | string | Business phone to print on it. |
| deposit_percent | number | Optional deposit to schedule the job, as a percent of the total. |
| discount_percent | number | Optional discount, as a percent off the subtotal. |
{
"type": "object",
"required": [
"business_name",
"line_items"
],
"properties": {
"title": {
"type": "string",
"maxLength": 150,
"description": "Optional subject line, for example Biweekly house cleaning."
},
"message": {
"type": "string",
"maxLength": 1000,
"description": "Optional note to the customer."
},
"tax_rate": {
"type": "number",
"default": 0,
"maximum": 25,
"minimum": 0,
"description": "Sales tax percent on the subtotal after any discount, for example 8.25. The user supplies it."
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"unit_price"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"description": "What the line is for."
},
"quantity": {
"type": "number",
"default": 1,
"maximum": 10000,
"minimum": 0.01,
"description": "Units, hours or visits."
},
"unit_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Price per unit in US dollars."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Optional detail under the name."
}
}
},
"maxItems": 25,
"minItems": 1,
"description": "One row per service or item, with the prices the user gives."
},
"valid_days": {
"type": "integer",
"default": 30,
"maximum": 365,
"minimum": 1,
"description": "How many days the quote stays valid."
},
"business_name": {
"type": "string",
"maxLength": 100,
"description": "The business sending the document, as it should print at the top."
},
"customer_name": {
"type": "string",
"maxLength": 100,
"description": "Who the document is for, a person or a company. Printed as Customer when left out."
},
"business_email": {
"type": "string",
"maxLength": 120,
"description": "Business email to print on it."
},
"business_phone": {
"type": "string",
"maxLength": 30,
"description": "Business phone to print on it."
},
"deposit_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Optional deposit to schedule the job, as a percent of the total."
},
"discount_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Optional discount, as a percent off the subtotal."
}
}
}{
"type": "object",
"properties": {
"size": {
"enum": [
"1br1ba",
"2br1ba",
"2br2ba",
"3br2ba",
"4br2ba",
"4br3ba",
"5br3ba",
"5br4ba",
"6br4ba",
"6br5ba",
"7br5ba"
],
"type": "string",
"default": "2br1ba",
"description": "Bedrooms and bathrooms, for example 3br2ba for 3 bedrooms and 2 bathrooms."
},
"sqft": {
"type": "integer",
"maximum": 10000,
"minimum": 300,
"description": "Square footage. Defaults to the typical size for the layout (1,600 for 3br2ba)."
},
"addons": {
"type": "array",
"items": {
"enum": [
"pets",
"kids",
"oven",
"fridge",
"trash",
"laundry"
],
"type": "string"
},
"maxItems": 6,
"description": "Extras that apply: pets (+$15), kids under 10 (+$20), oven inside (+$35), fridge inside (+$30), trash takeout (+$10), laundry, one load washed and folded (+$20).",
"uniqueItems": true
},
"market": {
"enum": [
"rural",
"standard",
"coastal"
],
"type": "string",
"default": "standard",
"description": "rural (0.80x), standard for most US metros (1.00x), or coastal for a high-cost coastal metro (1.30x)."
},
"frequency": {
"enum": [
"weekly",
"biweekly",
"monthly",
"deep",
"moveout"
],
"type": "string",
"default": "biweekly",
"description": "How often the home is cleaned. deep is a first or one-time deep clean; moveout is a one-time move-out clean."
},
"hourly_rate": {
"type": "integer",
"default": 40,
"maximum": 120,
"minimum": 20,
"description": "What the cleaner bills per cleaner-hour, in US dollars."
}
}
}