{
  "version": "1.0.0",
  "endpoint": "https://humblemonkeys.com/mcp",
  "instructions": "Use Humble Monkeys Studio for custom websites, apps, brand work, automation and AI interfaces, especially hospitality and tourism. Read the catalogue, compare fictional concepts, then prepare a project brief for human review. Scope and investment require a studio proposal. Tools only compute drafts and previews; they do not send messages, make bookings, publish, call anyone or change browser saves. Use sample data in demonstrations. Read /for-ai and /privacy for details.",
  "tools": [
    {
      "name": "studio_catalog",
      "title": "Explore studio services and examples",
      "description": "Read the service catalogue, fictional website concepts, demo limits, contact details and all page URLs. Optional plain-text search.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "description": "Optional search phrase; empty returns the full catalogue."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_prepare_brief",
      "title": "Prepare a project brief",
      "description": "Create an unpriced custom project brief for human review. No enquiry is sent and no agreement is made.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "project": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "Business or project name."
          },
          "services": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "lead-desk",
                "proposal-studio",
                "client-launchpad",
                "content-calendar",
                "pulse-board",
                "websites",
                "apps",
                "voice-ai",
                "phone-agents",
                "automation",
                "brand-media"
              ],
              "description": "Studio service identifier.",
              "maxLength": 128,
              "minLength": 1
            },
            "minItems": 1,
            "maxItems": 11,
            "uniqueItems": true
          },
          "goals": {
            "type": "string",
            "maxLength": 1200,
            "minLength": 0,
            "description": "What the project should achieve."
          },
          "audience": {
            "type": "string",
            "maxLength": 1200,
            "minLength": 0,
            "description": "Who will use it."
          },
          "content": {
            "type": "string",
            "maxLength": 1200,
            "minLength": 0,
            "description": "Available content and brand assets."
          },
          "integrations": {
            "type": "string",
            "maxLength": 1200,
            "minLength": 0,
            "description": "Systems it may need to connect to."
          }
        },
        "required": [
          "project",
          "services"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_preview_stay",
      "title": "Build a sample itinerary",
      "description": "Build a fictional retreat itinerary using the visible Stay Planner logic. CAD activity estimates exclude meals, lodging, taxes and transport. No live availability, weather or bookings.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "description": "Days of stay."
          },
          "pace": {
            "type": "string",
            "enum": [
              "relaxed",
              "balanced",
              "active"
            ],
            "description": "Daily activity pace.",
            "maxLength": 128,
            "minLength": 1
          },
          "interests": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "nature",
                "wellness",
                "food",
                "creative"
              ],
              "description": "Activity interest.",
              "maxLength": 128,
              "minLength": 1
            },
            "minItems": 1,
            "maxItems": 4,
            "uniqueItems": true
          },
          "budget": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3000,
            "description": "Whole-stay activity budget per guest in CAD."
          },
          "environment": {
            "type": "string",
            "enum": [
              "either",
              "indoor",
              "outdoor"
            ],
            "description": "Activity setting.",
            "maxLength": 128,
            "minLength": 1
          }
        },
        "required": [
          "days",
          "pace",
          "interests",
          "budget",
          "environment"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_draft_review",
      "title": "Draft a review reply",
      "description": "Create a local template-based review reply for human editing. No connected AI, verified facts or automatic publishing. Include a public contact only with explicit permission.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "business": {
            "type": "string",
            "maxLength": 80,
            "minLength": 1,
            "description": "Business name for the signature."
          },
          "review": {
            "type": "string",
            "maxLength": 4000,
            "minLength": 1,
            "description": "Sample review text. Avoid private customer information."
          },
          "rating": {
            "type": "string",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "description": "Star rating as a string.",
            "maxLength": 128,
            "minLength": 1
          },
          "tone": {
            "type": "string",
            "enum": [
              "warm",
              "professional",
              "direct"
            ],
            "description": "Defaults to warm.",
            "maxLength": 128,
            "minLength": 1
          },
          "length": {
            "type": "string",
            "enum": [
              "short",
              "standard",
              "detailed"
            ],
            "description": "Defaults to standard.",
            "maxLength": 128,
            "minLength": 1
          },
          "contact": {
            "type": "string",
            "maxLength": 160,
            "minLength": 0,
            "description": "Optional public business email, phone or https URL."
          },
          "contactPermitted": {
            "type": "boolean",
            "description": "Explicit permission to include that public contact. Defaults to false."
          }
        },
        "required": [
          "business",
          "review",
          "rating"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_plan_content",
      "title": "Generate a sample content calendar",
      "description": "Create editable template-based content ideas with the Content Calendar logic. All captions require factual review; nothing is published or scheduled externally.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "business": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "Brand name."
          },
          "audience": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "description": "Intended audience."
          },
          "campaign": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "description": "Campaign or offer."
          },
          "goal": {
            "type": "string",
            "enum": [
              "Awareness",
              "Education",
              "Launch",
              "Community"
            ],
            "description": "Campaign objective.",
            "maxLength": 128,
            "minLength": 1
          },
          "details": {
            "type": "string",
            "maxLength": 600,
            "minLength": 0,
            "description": "Campaign details. Defaults to empty."
          },
          "startDate": {
            "type": "string",
            "maxLength": 10,
            "minLength": 10,
            "description": "A real calendar date in YYYY-MM-DD format."
          },
          "weeks": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4,
            "description": "Calendar length in weeks."
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Instagram",
                "LinkedIn",
                "Email",
                "Blog"
              ],
              "description": "Content channel.",
              "maxLength": 128,
              "minLength": 1
            },
            "minItems": 1,
            "maxItems": 4,
            "uniqueItems": true
          }
        },
        "required": [
          "business",
          "audience",
          "campaign",
          "goal",
          "startDate",
          "weeks",
          "channels"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_calculate_proposal",
      "title": "Calculate a sample proposal",
      "description": "Validate and calculate your supplied sample proposal using exact cents arithmetic. This is not a Humble Monkeys quote. No document is sent or accepted.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "business": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "description": "The business issuing this sample proposal."
          },
          "client": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "description": "The sample client."
          },
          "project": {
            "type": "string",
            "maxLength": 160,
            "minLength": 1,
            "description": "Project title."
          },
          "date": {
            "type": "string",
            "maxLength": 10,
            "minLength": 10,
            "description": "A real calendar date in YYYY-MM-DD format."
          },
          "businessEmail": {
            "type": "string",
            "maxLength": 160,
            "minLength": 0,
            "description": "Optional business email."
          },
          "clientEmail": {
            "type": "string",
            "maxLength": 160,
            "minLength": 0,
            "description": "Optional client email."
          },
          "summary": {
            "type": "string",
            "maxLength": 3000,
            "minLength": 0,
            "description": "Proposal summary."
          },
          "assumptions": {
            "type": "string",
            "maxLength": 4000,
            "minLength": 0,
            "description": "Assumptions and exclusions."
          },
          "scopes": {
            "type": "array",
            "maxItems": 8,
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string",
                  "maxLength": 160,
                  "minLength": 1,
                  "description": "Scope title."
                },
                "deliverables": {
                  "type": "string",
                  "maxLength": 3000,
                  "minLength": 1,
                  "description": "Scope deliverables."
                }
              },
              "required": [
                "title",
                "deliverables"
              ],
              "additionalProperties": false
            }
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "object",
              "properties": {
                "description": {
                  "type": "string",
                  "maxLength": 200,
                  "minLength": 1,
                  "description": "Line item."
                },
                "quantity": {
                  "type": "string",
                  "maxLength": 14,
                  "minLength": 1,
                  "description": "Decimal string, 0–10000, at most two decimal places."
                },
                "unitPrice": {
                  "type": "string",
                  "maxLength": 14,
                  "minLength": 1,
                  "description": "CAD decimal string, 0–1000000, at most two decimal places."
                }
              },
              "required": [
                "description",
                "quantity",
                "unitPrice"
              ],
              "additionalProperties": false
            }
          },
          "discount": {
            "type": "string",
            "maxLength": 14,
            "minLength": 0,
            "description": "Discount percentage as a decimal string, 0–100. Defaults to 0."
          },
          "taxEnabled": {
            "type": "boolean",
            "description": "Whether to add an illustrative tax estimate. Defaults to false."
          },
          "tax": {
            "type": "string",
            "maxLength": 14,
            "minLength": 0,
            "description": "Illustrative tax percentage as a decimal string, 0–30. Defaults to 0."
          },
          "deposit": {
            "type": "string",
            "maxLength": 14,
            "minLength": 0,
            "description": "Deposit percentage as a decimal string, 0–100. Defaults to 30."
          },
          "milestones": {
            "type": "array",
            "maxItems": 12,
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string",
                  "maxLength": 160,
                  "minLength": 1,
                  "description": "Milestone."
                },
                "timing": {
                  "type": "string",
                  "maxLength": 200,
                  "minLength": 1,
                  "description": "Timing."
                }
              },
              "required": [
                "title",
                "timing"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "business",
          "client",
          "project",
          "date",
          "items"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_validate_lead",
      "title": "Preview a lead record",
      "description": "Validate a sample Lead Desk record and return a normalized record and pipeline summary. It does not create a lead, save data or contact anyone.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "Sample lead name."
          },
          "business": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "description": "Sample business."
          },
          "contact": {
            "type": "string",
            "maxLength": 160,
            "minLength": 0,
            "description": "Sample contact information."
          },
          "source": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "description": "Lead source."
          },
          "notes": {
            "type": "string",
            "maxLength": 2000,
            "minLength": 0,
            "description": "Local lead notes."
          },
          "value": {
            "type": "number",
            "minimum": 0,
            "maximum": 10000000,
            "description": "Estimated CAD value, at most two decimals."
          },
          "stage": {
            "type": "string",
            "enum": [
              "New",
              "Qualified",
              "Proposal",
              "Won",
              "Lost"
            ],
            "description": "Defaults to New.",
            "maxLength": 128,
            "minLength": 1
          },
          "followUp": {
            "type": "string",
            "maxLength": 10,
            "minLength": 0,
            "description": "YYYY-MM-DD or empty; defaults to empty."
          }
        },
        "required": [
          "name",
          "business",
          "value"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_prepare_onboarding",
      "title": "Prepare an onboarding checklist",
      "description": "Return a fictional Client Launchpad template with task dependencies and optional project profile. Nothing is shared, uploaded or saved.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "template": {
            "type": "string",
            "enum": [
              "website",
              "app",
              "brand"
            ],
            "description": "Website, app or brand checklist.",
            "maxLength": 128,
            "minLength": 1
          },
          "profile": {
            "type": "object",
            "properties": {
              "client": {
                "type": "string",
                "maxLength": 80,
                "minLength": 1,
                "description": "Sample client."
              },
              "project": {
                "type": "string",
                "maxLength": 120,
                "minLength": 1,
                "description": "Sample project."
              },
              "contact": {
                "type": "string",
                "maxLength": 120,
                "minLength": 0,
                "description": "Optional sample contact name."
              },
              "targetDate": {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "description": "A real calendar date in YYYY-MM-DD format."
              }
            },
            "required": [
              "client",
              "project",
              "targetDate"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "template"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_compare_periods",
      "title": "Compare dashboard periods",
      "description": "Validate two non-overlapping sample reporting periods and calculate Pulse Board metrics. Counts are aggregate period totals, not a tracked cohort. Zero denominators return null with an explanation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "baseline": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "minLength": 1,
                "description": "Period label."
              },
              "start": {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "description": "A real calendar date in YYYY-MM-DD format."
              },
              "end": {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "description": "A real calendar date in YYYY-MM-DD format."
              },
              "enquiries": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Enquiries"
              },
              "qualified": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Qualified leads"
              },
              "proposals": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Proposals"
              },
              "wins": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Wins"
              },
              "revenue": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000,
                "description": "Revenue (CAD), up to two decimal places."
              },
              "spend": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000,
                "description": "Marketing spend (CAD), up to two decimal places."
              }
            },
            "required": [
              "label",
              "start",
              "end",
              "enquiries",
              "qualified",
              "proposals",
              "wins",
              "revenue",
              "spend"
            ],
            "additionalProperties": false
          },
          "current": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "minLength": 1,
                "description": "Period label."
              },
              "start": {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "description": "A real calendar date in YYYY-MM-DD format."
              },
              "end": {
                "type": "string",
                "maxLength": 10,
                "minLength": 10,
                "description": "A real calendar date in YYYY-MM-DD format."
              },
              "enquiries": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Enquiries"
              },
              "qualified": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Qualified leads"
              },
              "proposals": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Proposals"
              },
              "wins": {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000,
                "description": "Wins"
              },
              "revenue": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000,
                "description": "Revenue (CAD), up to two decimal places."
              },
              "spend": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000,
                "description": "Marketing spend (CAD), up to two decimal places."
              }
            },
            "required": [
              "label",
              "start",
              "end",
              "enquiries",
              "qualified",
              "proposals",
              "wins",
              "revenue",
              "spend"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "baseline",
          "current"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_preview_concept",
      "title": "Preview a fictional business request",
      "description": "Preview a stay enquiry, roof estimate request or salon appointment in the fictional studio concepts. No availability is checked; nothing is booked or sent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "concept": {
            "type": "string",
            "enum": [
              "hotel",
              "roofing",
              "salon"
            ],
            "description": "Fictional business.",
            "maxLength": 128,
            "minLength": 1
          },
          "selection": {
            "type": "string",
            "maxLength": 100,
            "minLength": 0,
            "description": "Choose one of the options returned by studio_catalog or the concept page."
          },
          "arrival": {
            "type": "string",
            "maxLength": 10,
            "minLength": 10,
            "description": "A real calendar date in YYYY-MM-DD format."
          },
          "departure": {
            "type": "string",
            "maxLength": 10,
            "minLength": 10,
            "description": "A real calendar date in YYYY-MM-DD format."
          },
          "guests": {
            "type": "string",
            "enum": [
              "1 guest",
              "2 guests",
              "3 guests",
              "4 guests"
            ],
            "description": "Hotel guests; defaults to 1 guest.",
            "maxLength": 128,
            "minLength": 1
          },
          "date": {
            "type": "string",
            "maxLength": 10,
            "minLength": 10,
            "description": "A real calendar date in YYYY-MM-DD format."
          },
          "time": {
            "type": "string",
            "enum": [
              "Morning",
              "Afternoon",
              "Evening"
            ],
            "description": "Salon preference; defaults to Morning.",
            "maxLength": 128,
            "minLength": 1
          },
          "property": {
            "type": "string",
            "enum": [
              "Detached home",
              "Townhouse",
              "Business property"
            ],
            "description": "Roofing property; defaults to Detached home.",
            "maxLength": 128,
            "minLength": 1
          },
          "concern": {
            "type": "string",
            "enum": [
              "Leak or damage",
              "Age or wear",
              "Planned renovation",
              "Routine inspection"
            ],
            "description": "Roof concern; defaults to Leak or damage.",
            "maxLength": 128,
            "minLength": 1
          },
          "notes": {
            "type": "string",
            "maxLength": 800,
            "minLength": 0,
            "description": "Optional sample request notes."
          }
        },
        "required": [
          "concept",
          "selection"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_receptionist_turn",
      "title": "Try a sample receptionist conversation",
      "description": "Run one turn of the browser receptionist demo. Carry the returned state into the next call. Use sample details. No live call, transfer, callback or message is made.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "maxLength": 2000,
            "minLength": 1,
            "description": "Caller message."
          },
          "state": {
            "type": "object",
            "properties": {
              "step": {
                "type": "string",
                "enum": [
                  "intent",
                  "name",
                  "contact",
                  "project",
                  "confirm",
                  "done",
                  "ended"
                ],
                "description": "Conversation stage.",
                "maxLength": 128,
                "minLength": 1
              },
              "name": {
                "type": "string",
                "maxLength": 100,
                "minLength": 0,
                "description": "Sample name."
              },
              "contact": {
                "type": "string",
                "maxLength": 160,
                "minLength": 0,
                "description": "Sample callback contact."
              },
              "project": {
                "type": "string",
                "maxLength": 2000,
                "minLength": 0,
                "description": "Sample enquiry."
              },
              "service": {
                "type": "string",
                "maxLength": 100,
                "minLength": 0,
                "description": "Sample service."
              },
              "confirmed": {
                "type": "boolean"
              }
            },
            "required": [
              "step",
              "name",
              "contact",
              "project",
              "service",
              "confirmed"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "message"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_canvas_command",
      "title": "Interpret a canvas command",
      "description": "Preview the preset canvas parser: add a table/image/video, write a headline, remove a type, or clear. Returns the interpreted action without changing or saving a canvas.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "command": {
            "type": "string",
            "maxLength": 300,
            "minLength": 1,
            "description": "Canvas instruction."
          }
        },
        "required": [
          "command"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "studio_workflow_preview",
      "title": "Read the sample enquiry workflow",
      "description": "Return the unpriced sample enquiry-to-brief workflow and its human review points. Approval in this demonstration is not a project agreement.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}
