Skip to main content
Glama

HeySale — AI Website Salesperson

Create a website salesperson

create_website_salesperson
Idempotent

Give any public website an AI salesperson that talks to its visitors, answers questions about the business, and captures leads. Use this when someone wants to add a salesperson, live chat, a sales assistant or a chatbot alternative to a site. Provide the website address; the salesperson reads the site itself. The response always includes an explicit salesperson_id — keep it, because every other HeySale tool needs it — plus the one-line install script and a claim_url to give the website owner. Safe to call twice for the same website. To try HeySale without touching a real website, use website_url https://hey.sale/mcp-test — that creates an isolated, disposable test salesperson on HeySale's own reviewer sandbox.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
campaignNo
website_urlYesThe public website address, e.g. https://example.com
business_nameNoThe business name, if known.
integration_sourceNoThe AI platform making this call, e.g. claude, chatgpt, cursor, lovable, replit.
external_project_idNoA stable id for the calling project, so repeat calls reuse the same salesperson.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNo
reusedNoTrue when an existing salesperson for that website was returned instead of a new one.
statusYesBuild state of the salesperson, e.g. analyzing, building, ready, failed.
successYes
ownershipYes
expires_atNo
environmentNo
next_actionNoPlain-language next step for the caller.
preview_urlNo
salespersonYes
website_urlYes
free_minutesNo
installationYes
salesperson_idYes
salesperson_nameYes
test_environmentNo
integration_sourceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "environment": {
      +      "type": "string"
      +    },
      +    "expires_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "free_minutes": {
      +      "type": "number"
      +    },
      +    "installation": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "async": {
      +          "type": "boolean"
      +        },
      +        "detection": {
      +          "type": "string"
      +        },
      +        "installation_status": {
      +          "description": "What HeySale's own telemetry currently sees.",
      +          "enum": [
      +            "detected",
      +            "not_detected",
      +            "domain_mismatch",
      +            "unknown"
      +          ],
      +          "type": "string"
      +        },
      +        "placement": {
      +          "type": "string"
      +        },
      +        "review_install_url": {
      +          "description": "Sandbox only: expiring link that installs the test salesperson.",
      +          "type": "string"
      +        },
      +        "script": {
      +          "description": "The one-line script to add to the website before the closing body tag.",
      +          "type": "string"
      +        },
      +        "type": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "integration_source": {
      +      "type": "string"
      +    },
      +    "next_action": {
      +      "description": "Plain-language next step for the caller.",
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "ownership": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "claim_url": {
      +          "description": "One-time link the website owner uses to claim the salesperson. Absent once claimed.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "manage_url": {
      +          "description": "Where the owner manages the salesperson. Present once claimed.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "status": {
      +          "description": "Whether a HeySale account owns this salesperson yet.",
      +          "enum": [
      +            "unclaimed",
      +            "claimed"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status"
      +      ],
      +      "type": "object"
      +    },
      +    "preview_url": {
      +      "type": "string"
      +    },
      +    "reused": {
      +      "description": "True when an existing salesperson for that website was returned instead of a new one.",
      +      "type": "boolean"
      +    },
      +    "salesperson": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "domain": {
      +          "type": "string"
      +        },
      +        "id": {
      +          "description": "The salesperson_id.",
      +          "type": "string"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "website_url": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "name"
      +      ],
      +      "type": "object"
      +    },
      +    "salesperson_id": {
      +      "type": "string"
      +    },
      +    "salesperson_name": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "Build state of the salesperson, e.g. analyzing, building, ready, failed.",
      +      "type": "string"
      +    },
      +    "success": {
      +      "type": "boolean"
      +    },
      +    "test_environment": {
      +      "type": "boolean"
      +    },
      +    "website_url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "success",
      +    "salesperson",
      +    "salesperson_id",
      +    "salesperson_name",
      +    "website_url",
      +    "status",
      +    "ownership",
      +    "installation"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / integration_source / description
      Previous value: -"The platform making this call, e.g. lovable."New value: +"The AI platform making this call, e.g. claude, chatgpt, cursor, lovable, replit."
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which already state idempotent and non-destructive), the description adds meaningful behavior information: the response always includes a salesperson_id required by all other HeySale tools, the install script and claim_url, that it is safe to call multiple times for the same site, and that using https://hey.sale/mcp-test creates an isolated disposable test instance. These are concrete operational details an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, front-loaded with the core purpose, and organized logically from 'what it does' to 'when to use' to 'what to expect in the response' to 'safety/test considerations'. It consists of six sentences, and each one adds meaningful information—no redundancy. It is slightly longer than absolutely necessary but fully deserves its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers usage, output highlights, and the idempotent/safe test behavior. Since an output schema exists, it doesn't need to spell out every return field, but it still highlights the most critical ones. It also gives a workable test scenario, which is important for a tool that interacts with external websites. Minor gaps such as exact permissions or authentication details exist but are not required for calling the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 80%, the schema already documents most parameters adequately. The description adds only a slight clarification that website_url should be a public address and that the salesperson reads the site itself, but it doesn't elaborate on campaign or external_project_id beyond what the schema provides. Given the high schema coverage, the value added here is minimal and the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific, action-oriented explanation: 'Give any public website an AI salesperson that talks to its visitors, answers questions about the business, and captures leads.' It clearly distinguishes itself from sibling tools like check_salesperson_status or configure_salesperson by focusing on creation and including actionable output details (salesperson_id, install script, claim_url).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Use this when someone wants to add a salesperson, live chat, a sales assistant or a chatbot alternative to a site.' It also provides a safe test URL for trying without a real website. While it doesn't explicitly mention 'don't use this for existing salespersons—use configure instead', the context is clear that this is for creation and the sibling tool names make the alternatives obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.