# Juicy Designs Quote [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/cobusvdwest/juicy-designs-quote  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/juicy-designs-quote

## Description
Free digital marketing quote and strategy requests from Juicy Designs SA. No price returned.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "juicy-designs-quote": {
    "command": "npx",
    "args": ["-y","wrangler"]
  }
}
```

## Documentation & 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).

