Green Thumb Landscaping (demo)
AI agents can now book a site visit, request a quote. Point any MCP-capable agent (Muse, Claude, ChatGPT) at the endpoints below, or submit the manifest to Meta's Muse connector directory.
Endpoints
MCP server (agents connect here)
https://unamused.app/a/deadbeef0003/mcp
OpenAPI 3.1 spec
https://unamused.app/a/deadbeef0003/openapi.json
Connector manifest
https://unamused.app/a/deadbeef0003/manifest.json
Your actions
| Action | Runs via | Approval |
|---|---|---|
Book a site visitbook_appointment — Book a free landscaping estimate visit. Demo: no real visit is scheduled. |
link | required |
Request a quoterequest_quote — Ask Green Thumb Landscaping for a project quote. Demo: goes to the echo service. |
webhook | no |
Try it
Call an action right from your terminal:
curl example
curl -X POST https://unamused.app/a/deadbeef0003/actions/book_appointment \
-H 'Content-Type: application/json' \
-d '{"name": "Jane Doe"}'
Actions marked approval required are gated server-side: the first call
validates your parameters and returns approval_required plus a single-use
approval_token (valid 10 minutes). Call again with
{"approval_token": "..."} after the human approves to execute.
Webhook deliveries are signed — verify X-Unamused-Signature (HMAC-SHA256 of
<timestamp>.<body>) and reject old X-Unamused-Timestamp
values to stop replays.
OpenAPI spec
openapi.json
{
"openapi": "3.1.0",
"info": {
"title": "Green Thumb Landscaping (demo) \u2014 Agent API",
"version": "1.0.0",
"description": "Machine-usable actions for Green Thumb Landscaping (demo) (https://example.com/green-thumb), generated free by Unamused. Submit this spec to an agent connector directory (e.g. Meta's Muse connector platform) to let AI agents act on behalf of customers."
},
"servers": [
{
"url": "https://unamused.app"
}
],
"paths": {
"/a/deadbeef0003/actions/book_appointment": {
"post": {
"summary": "Book a site visit",
"description": "Book a free landscaping estimate visit. Demo: no real visit is scheduled. NOTE: this action commits the business (booking/order) and approval is enforced server-side. The first call only validates and returns approval_required + a single-use approval_token (10 min). Call again with {\"approval_token\": \"...\"} after the human approves to execute.",
"operationId": "book_appointment",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Customer's full name"
},
"phone_or_email": {
"type": "string",
"description": "Customer's phone or email"
},
"preferred_time": {
"type": "string",
"description": "Preferred date/time"
}
},
"additionalProperties": false,
"required": [
"name",
"phone_or_email"
]
}
}
}
},
"responses": {
"200": {
"description": "Action result"
}
},
"x-unamused-requires-approval": true
}
},
"/a/deadbeef0003/actions/request_quote": {
"post": {
"summary": "Request a quote",
"description": "Ask Green Thumb Landscaping for a project quote. Demo: goes to the echo service.",
"operationId": "request_quote",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Customer's full name"
},
"details": {
"type": "string",
"description": "What you want quoted"
}
},
"additionalProperties": false,
"required": [
"name",
"details"
]
}
}
}
},
"responses": {
"200": {
"description": "Action result"
}
}
}
}
}
}
Next: submit https://unamused.app/a/deadbeef0003/manifest.json to Meta's
Muse connector directory so customers reach you just by asking their agent.
Methodology and source: GitHub.