Juicy Designs Quote
Free digital marketing quote and strategy requests from Juicy Designs SA. No price returned.
Open source Repository Open in the app JSON README (API)
About
Free digital marketing quote and strategy requests from Juicy Designs SA. No price returned.
Details
- Kind
- MCP servers
- Topic
- Marketing & analytics
- Publisher
- cobusvdwest
- Origin
- official
- Category
- ferramentas
- Transport
- http
- Version
- 1.1.0
- Last push
- 2026-06-23T10:29:02Z
- Repository state
- ativo
- Language
- TypeScript
- Added
- 2026-08-29 03:02:35
- Updated
- 2026-08-29 03:02:35
- Origin id
io.github.cobusvdwest/juicy-designs-quote
README
# Juicy Designs — Quote MCP Server + REST API (Cloudflare Worker)
Request and read-only capabilities for AI agents, exposed two ways:
| Transport | Path | For |
|---|---|---|
| MCP (Streamable HTTP) | `POST /mcp` | ChatGPT / Claude / agent connectors |
| REST request | `POST /quote`, `POST /strategy-session` | Agentic browsers / OpenAPI clients |
| REST read | `GET /service-catalog` `/service-areas` `/case-studies` `/client-reviews` `/faqs` | Read reference data |
| Discovery | `GET /`, `GET /openapi.json` | Health + machine-readable spec |
### Tools
| Tool | Type | Purpose |
|---|---|---|
| `get_quote` | request | Submit a free, no-obligation quote request. Consent-gated. |
| `book_strategy_session` | request | Request a free strategy session. Consent-gated. |
| `get_service_catalog` | read | Services + reference "from" floors (reference only). |
| `get_service_areas` | read | Where Juicy Designs works. |
| `get_case_studies` | read | Track record and portfolio pointer. |
| `get_client_reviews` | read | Aggregate Google rating and review source. |
| `get_faqs` | read | Common questions and answers. |
Both request tools share the same server-side validation and the same `forwardLead()`
sink, which posts the lead to the **existing Juicy Designs Apps Script form handler**
as `form_type=quote` — leads land exactly where the website form's leads land
(email + the "Leads" Google Sheet). Read tools return curated static data only; no PII,
no external calls.
### Guarantees
- **Never returns or implies a price.** Published "from" figures are entry-point
references only, never a quote or estimate. Confirms receipt + the four-working-hour SLA only.
- **Rejects `consent_to_contact !== true`** on every request tool (POPIA).
- **All input validated server-side** — the model's extraction is never trusted.
- Read tools are side-effect-free and contain no per-user calculation.
- Enum inputs map to the labels the Apps Script email/sheet expects.
## Deploy
```bash
cd mcp-quote-worker
npm install
# 1) Lead sink (the existing Apps Script /exec URL)
npx wrangler secret put LEAD_ENDPOINT
# paste: https://script.google.com/macros/s/AKfycb.../exec
# 2) (optional) per-IP rate limit — Apps Script already throttles 5/10min
# npx wrangler kv namespace create RATELIMIT # then paste id into wrangler.toml + uncomment
npx wrangler deploy
```
Deploy prints the Worker URL, e.g. `https://juicy-designs-quote.<subdomain>.workers.dev`.
Put that origin into `openapi.yaml` (`servers.url`) and wherever you advertise the endpoint.
## Local test
```bash
npx wrangler dev # serves on http://localhost:8787
# REST
curl -s localhost:8787/quote -H 'content-type: application/json' -d '{
"name":"Sipho Dlamini","email":"sipho@example.co.za","service":"seo",
"project_summary":"E-commerce store, want to rank for running shoes in SA.",
"budget_range":"25k_75k","timeline":"1_3_months","consent_to_contact":true
}'
# MCP: list tools
curl -s localhost:8787/mcp -H 'content-type: application/json' -d \
'{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# MCP: call get_quote
curl -s localhost:8787/mcp -H 'content-type: application/json' -d \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_quote","arguments":{"name":"Sipho","email":"s@x.co.za","service":"seo","project_summary":"Need SEO for a new store in Pretoria.","consent_to_contact":true}}}'
```
A request without `consent_to_contact:true` must come back as an error — that is the POPIA gate working.
## Connect as a connector
**Claude (Settings → Connectors → Add custom connector):** URL = `https://<worker>/mcp`.
**ChatGPT (Settings → Connectors / Developer mode):** add an MCP server with the same `/mcp` URL.
The connector lists one tool, `get_quote`. The agent should read the fields back and confirm
consent with the user before calling. No authentication is required (the tool only creates a lead).
## Connector discovery (so agents can find it)
After deploy, advertise the endpoints from the site:
1. A short docs page (e.g. `/connect/` or a section on `/quote/`) listing the MCP + OpenAPI URLs.
2. Append to **`llms.txt`** (root of juicydesigns.co.za):
```
## For AI agents
- MCP server (request a quote): https://<worker>/mcp
- OpenAPI 3.1 spec: https://<worker>/openapi.json
```
(Left out of llms.txt until you have the real Worker URL — paste it in post-deploy so there is no dead link.)
## Map of inputs → Apps Script fields
| MCP/REST input | sent as | shown in email/sheet |
|---|---|---|
| `service` (enum) | `services` (label) | Services |
| `budget_range` (enum) | `budget` (label) | Budget |
| `project_summary` (+ timeline + source) | `message` | Message |
| `name` / `email` / `phone` / `company` | same | as-is |
| `form_type` | `quote` | routes to the quote email/template |
Swap the body of `forwardLead()` in `src/index.ts` to send leads elsewhere (CRM, webhook, Resend).