streamable-httpupdated 2mo ago
Request and read-only capabilities for AI agents, exposed two ways:
What can you do with Juicy Designs Quote?
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 !== trueon 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
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
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:
- A short docs page (e.g.
/connect/or a section on/quote/) listing the MCP + OpenAPI URLs. - 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).
Install
Add Juicy Designs Quote to your client. Pick the one you use.
claude mcp add --transport http juicy-designs-quote https://juicy-designs-quote.black-voice-76e6.workers.dev/mcpcodex mcp add juicy-designs-quote --url https://juicy-designs-quote.black-voice-76e6.workers.dev/mcp{
"mcpServers": {
"juicy-designs-quote": {
"url": "https://juicy-designs-quote.black-voice-76e6.workers.dev/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"juicy-designs-quote": {
"type": "http",
"url": "https://juicy-designs-quote.black-voice-76e6.workers.dev/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"juicy-designs-quote": {
"url": "https://juicy-designs-quote.black-voice-76e6.workers.dev/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"juicy-designs-quote": {
"serverUrl": "https://juicy-designs-quote.black-voice-76e6.workers.dev/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
7 tools
Juicy Designs Quote exposes 7 tools to a connected agent.
- get_quote
- request
- book_strategy_session
- request
- get_service_catalog
- read
- get_service_areas
- read
- get_case_studies
- read
- get_client_reviews
- read
- get_faqs
- read
Score
60 / 100
Good
- Documentation20/25
- Maintenance16/25
- Trust6/20
- Capability6/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 70 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 7 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 1.1.0Latest | Jun 23, 2026 |