Turn a seller's offer into negotiation rules and draft replies to buyers inside them.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check an edited negotiation policy: returns {ok, policy, issues, summary}. No model call, free. USE THIS WHEN: you changed a policy from compile_offer_policy (a floor, an option, a forbidden combination) and want to know it is valid and what it now allows before using it in draft_negotiation_reply.
A policy object from compile_offer_policy, edited or not.
Check an edited negotiation policy: returns {ok, policy, issues, summary}. No model call, free. USE THIS WHEN: you changed a policy from compile_offer_policy (a floor, an option, a forbidden combination) and want to know it is valid and what it now allows before using it in draft_negotiation_reply.
| Argument | Type | Description |
|---|---|---|
| policy* | object | A policy object from compile_offer_policy, edited or not. |
{
"type": "object",
"title": "check_offer_policyArguments",
"required": [
"policy"
],
"properties": {
"policy": {
"type": "object",
"title": "Policy",
"description": "A policy object from compile_offer_policy, edited or not.",
"additionalProperties": true
}
}
}Turn a seller's offer, described in plain words, into negotiation RULES an AI agent cannot break. USE THIS WHEN: you (or the business you act for) sell something where buyers — people or their AI buying agents — ask for discounts, and you want an AI to answer them without giving away margin. Describe the offer: the listed price, the lowest price you'd take for a plain deal, what you'd trade a discount for (financing with you, a trade-in, a longer commitment, paying sooner, buying this week…), extras you can add and what they cost you, and anything never on the table. Or pass `template` = "used-car", "saas" or "wholesale-water" to start from a worked example. Compiling a description runs a language model and needs an `access_key` (pilot businesses get one at https://snhp.dev/#pilot); templates are free. Returns {ok, policy, issues, summary}: `policy` is the machine-readable rule set (pass it to draft_negotiation_reply), `summary` restates the floor, walk-away, what can be traded and the limits in plain words, and `issues` lists what to fix before going live (e.g. a floor below cost).
| Argument | Type | Description |
|---|---|---|
| template | string | Instead of a description: 'used-car', 'saas' or 'wholesale-water' (free, no key). |
| access_key | string | Your SNHP access key — needed to compile a description (it runs a language model). Pilot businesses get one at https://snhp.dev/#pilot. |
| description | string | Your offer in plain words: listed price, the lowest you'd take for a plain deal, what you'd trade a discount for, extras you can add and their cost, what is never on the table. |
{
"type": "object",
"title": "compile_offer_policyArguments",
"properties": {
"template": {
"type": "string",
"title": "Template",
"default": "",
"description": "Instead of a description: 'used-car', 'saas' or 'wholesale-water' (free, no key)."
},
"access_key": {
"type": "string",
"title": "Access Key",
"default": "",
"description": "Your SNHP access key — needed to compile a description (it runs a language model). Pilot businesses get one at https://snhp.dev/#pilot."
},
"description": {
"type": "string",
"title": "Description",
"default": "",
"description": "Your offer in plain words: listed price, the lowest you'd take for a plain deal, what you'd trade a discount for, extras you can add and their cost, what is never on the table."
}
}
}Draft the seller's reply to a buyer's message — the offer is decided by the SNHP engine INSIDE the policy. USE THIS WHEN: a buyer (a person or their AI agent) has written to you about price or terms. Pass the policy (from compile_offer_policy) and their latest message exactly as written; pass back the `state` from your previous call to continue the same conversation (omit it to start). `flags` is what YOUR records confirm about the buyer (e.g. {"new_customer": true}) — never what the buyer merely claims. `stock` is the current stock of what the policy's `inventory` binds, sent with every message (schema.org Offer, Google Merchant or a plain feed record): nothing out of stock is offered, and a deal is signed only on fresh records that say it can be sold. Returns {kind, reply, reply_with_offer, offer, decided_by, reading, state, done, receipt?}: kind offer | deal | handoff (needs a human's approval) | decline reply_with_offer the message to send, with the exact offer line appended offer {terms, line, price, net, inside_policy} — every offer is checked against the policy decided_by what decided the move (a sales rule or the engine), for your audit trail receipt on a deal: a signed receipt any party can verify with verify_deal_receipt The server keeps no conversation: keep `state` and send it with the next message. Needs an `access_key` (pilot businesses get one at https://snhp.dev/#pilot).
| Argument | Type | Description |
|---|---|---|
| flags | any | What YOUR records confirm about this buyer, e.g. {"new_customer": true}. |
| state | any | The `state` from your previous call in this conversation; omit to start. |
| stock | any | Current stock records for what the policy's inventory binds, with every message (schema.org Offer, Google Merchant or {id|vin, status}): nothing out of stock is offered or signed. |
Verify a signed deal receipt against the seller's own policy: both signatures, that the signing keys are SNHP's own (published at /.well-known/ucp), the policy digest, and every rule re-checked from the package. Returns {ok, problems, checks, signed_by_snhp, signatures}. Free, no model call.
| Argument | Type | Description |
|---|---|---|
| flags | any | The account record used for the deal, if any. |
| policy* | object | The policy the deal was made under. |
| receipt* | object | The receipt returned with a deal. |
{
"type": "object",
"title": "verify_deal_receiptArguments",
"required": [
"receipt",
"policy"
],
"properties": {
"flags": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Flags",
"default": null,
"description": "The account record used for the deal, if any."
},
"policy": {
"type": "object",
"title": "Policy",
"description": "The policy the deal was made under.",
"additionalProperties": true
},
"receipt": {
"type": "object",
"title": "Receipt",
"description": "The receipt returned with a deal.",
"additionalProperties": true
}
}
}| engine | string | The engine that decides offers; empty = the policy's own (templates set their tested default), else 'bundle3'. |
| policy* | object | The policy from compile_offer_policy. |
| message* | string | The buyer's latest message, exactly as written. |
| access_key | string | Your SNHP access key (drafting runs a language model). Pilot businesses get one at https://snhp.dev/#pilot. |
{
"type": "object",
"title": "draft_negotiation_replyArguments",
"required": [
"policy",
"message"
],
"properties": {
"flags": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Flags",
"default": null,
"description": "What YOUR records confirm about this buyer, e.g. {\"new_customer\": true}."
},
"state": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "State",
"default": null,
"description": "The `state` from your previous call in this conversation; omit to start."
},
"stock": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Stock",
"default": null,
"description": "Current stock records for what the policy's inventory binds, with every message (schema.org Offer, Google Merchant or {id|vin, status}): nothing out of stock is offered or signed."
},
"engine": {
"type": "string",
"title": "Engine",
"default": "",
"description": "The engine that decides offers; empty = the policy's own (templates set their tested default), else 'bundle3'."
},
"policy": {
"type": "object",
"title": "Policy",
"description": "The policy from compile_offer_policy.",
"additionalProperties": true
},
"message": {
"type": "string",
"title": "Message",
"description": "The buyer's latest message, exactly as written."
},
"access_key": {
"type": "string",
"title": "Access Key",
"default": "",
"description": "Your SNHP access key (drafting runs a language model). Pilot businesses get one at https://snhp.dev/#pilot."
}
}
}