Sunny Smiles Dental (demo)
AI agents can now book a dental appointment, request a treatment 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/deadbeef0001/mcp
OpenAPI 3.1 spec
https://unamused.app/a/deadbeef0001/openapi.json
Connector manifest
https://unamused.app/a/deadbeef0001/manifest.json
Your actions
| Action | Runs via | Approval |
|---|---|---|
Book a dental appointmentbook_appointment — Book a checkup or cleaning at Sunny Smiles Dental. Demo: no real appointment is made. |
webhook | required |
Request a treatment quoterequest_quote — Ask Sunny Smiles Dental for a treatment price estimate. Demo: returns a sample quote link. |
link | no |
Try it
Call an action right from your terminal:
curl example
curl -X POST https://unamused.app/a/deadbeef0001/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": "Sunny Smiles Dental (demo) \u2014 Agent API",
"version": "1.0.0",
"description": "Machine-usable actions for Sunny Smiles Dental (demo) (https://example.com/sunny-smiles), 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/deadbeef0001/actions/book_appointment": {
"post": {
"summary": "Book a dental appointment",
"description": "Book a checkup or cleaning at Sunny Smiles Dental. Demo: no real appointment is made. 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": "Patient's full name"
},
"phone_or_email": {
"type": "string",
"description": "Patient'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/deadbeef0001/actions/request_quote": {
"post": {
"summary": "Request a treatment quote",
"description": "Ask Sunny Smiles Dental for a treatment price estimate. Demo: returns a sample quote link.",
"operationId": "request_quote",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Patient's full name"
},
"treatment": {
"type": "string",
"description": "Treatment to quote"
}
},
"additionalProperties": false,
"required": [
"name",
"treatment"
]
}
}
}
},
"responses": {
"200": {
"description": "Action result"
}
}
}
}
}
}
Next: submit https://unamused.app/a/deadbeef0001/manifest.json to Meta's
Muse connector directory so customers reach you just by asking their agent.
Methodology and source: GitHub.