SNHP — free negotiation math + agent memory

Free game-theory negotiation advisor for agents, plus paid receipted sessions and agent memory.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
91%
이름 품질
80%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~11,532토큰 (도구 정의)
~5.5 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 9.01%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "snhp": {
      "url": "https://api.snhp.dev/mcp/"
    }
  }
}

원격 엔드포인트

https://api.snhp.dev/mcp/streamable-http

할 수 있는 일

도구 목록

도구 (15)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢negotiate(side, walk_away, target, counterparty_offers, my_previous_offers, ...)

Your math-optimal next move in any price negotiation — free, no account or key needed. USE THIS WHEN: you're haggling over a single PRICE across multiple back-and- forth rounds and want a better outcome than winging it. Validated edge: ~12% better head-to-head (measured on this recommender, n=20 paired LLM negotiations, 95% CI +6.5-17.4%, p<0.0001). NOT FOR: one-shot or fixed prices (it'll tell you to just negotiate directly); multi-issue bundles (use negotiate_bundle — it logrolls across several linked issues); or non-price decisions like accept-vs-decline a job offer (just reason it through). You provide only what you already know — no game theory: side "sell" or "buy" walk_away your reservation in dollars (seller=floor/minimum, buyer=ceiling/max) target your aspiration in dollars (seller=high, buyer=low) counterparty_offers their offers so far, in dollars, oldest first rounds_left (optional, default 8) roughly how many back-and-forths remain compute_ms (optional, default 0; EXPERIMENTAL) milliseconds of Monte-Carlo rollouts to spend refining the move. 0 = instant closed form. Validated to show NO realized edge over the closed form (n=400, mc_validation.py) — kept off by default as a research mechanism, not a quality improvement. The reply carries a "compute" block You get back, in dollars: {"action": "counter"|"accept"|"walk", "recommended_price": 5387.0, "message": "...the best I can do is $5,387.00", "fit": {...}, "expected_settlement": 4943.5, "confidence": 0.62} WORKED EXAMPLE — selling a contract, floor $4,000, hope $6,000, the buyer has bid $4,200 then $4,500: negotiate(side="sell", walk_away=4000, target=6000, counterparty_offers=[4200, 4500], rounds_left=6) -> counter ~$5,387 with a ready-to-send message; ACCEPT once their bid crosses the optimal target; WALK if they stay below your floor near the deadline. Works against ANY counterparty with zero setup. (The verified-peer cooperation premium is the separate, advanced gt_a2a_* flow on the pro door.)

입력 스키마

{
  "type": "object",
  "properties": {
    "side": {
      "description": "Which side you are: 'sell' or 'buy'.",
      "title": "Side",
      "type": "string"
    },
    "walk_away": {
      "description": "Your reservation price in dollars — the worst you'd accept (seller: your floor/minimum; buyer: your ceiling/maximum).",
      "title": "Walk Away",
      "type": "number"
    },
    "target": {
      "description": "Your aspiration price in dollars (seller: high; buyer: low).",
      "title": "Target",
      "type": "number"
    },
    "counterparty_offers": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The other side's offers so far, in dollars, oldest first. Omit if they haven't offered yet.",
      "title": "Counterparty Offers"
    },
    "my_previous_offers": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Your own offers so far, in dollars, oldest first (optional context).",
      "title": "My Previous Offers"
    },
    "rounds_left": {
      "default": 8,
      "description": "Roughly how many back-and-forth rounds remain before the deadline (default 8).",
      "title": "Rounds Left",
      "type": "integer"
    },
    "item": {
      "default": "this",
      "description": "Short label for what's being negotiated (used only in the drafted message).",
      "title": "Item",
      "type": "string"
    },
    "compute_ms": {
      "default": 0,
      "description": "EXPERIMENTAL. Milliseconds of Monte-Carlo rollouts to spend refining the move; 0 = instant closed form (validated to show no realized edge, off by default).",
      "title": "Compute Ms",
      "type": "integer"
    }
  },
  "required": [
    "side",
    "walk_away",
    "target"
  ],
  "title": "gt_negotiate_turnArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "action": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Action"
    },
    "recommended_price": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Recommended Price"
    },
    "message": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Message"
    },
    "rationale": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Rationale"
    },
    "fit": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Fit"
    },
    "expected_settlement": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expected Settlement"
    },
    "confidence": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Confidence"
    },
    "compute": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Compute"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "NegotiateOut"
}
🟢negotiate_bundle(issues, their_offers, my_priorities, my_batna, their_batna_estimate, ...)

Negotiate several linked issues at once by logrolling — free, no account or key needed. USE THIS WHEN: a deal has more than one issue on the table and they trade off — a job offer (base + equity + signing), a SaaS contract (price + seats + term + SLA), any package deal. It concedes on the issues you care about LESS (and the other side cares about MORE) to win the ones you care about most — a trade that beats splitting every issue down the middle. For a single PRICE, use negotiate instead. Provide `issues`: a list of {"name", "options" (the choices), "my_utility" (how good each option is to YOU — one number per option, any scale), "their_utility" (how good each option is to THEM — their preference direction)}. Optionally `my_priorities` ({issue_name: weight}, how much each issue matters to you) and `their_offers` (their packages so far as {issue_name: option}, oldest first — this is what lets it INFER their priorities). Returns {action, recommended_offer (issue -> option), message, my_utility, their_expected_utility, inferred_their_priorities, trade_logic, fit, confidence, acceptance_probability}. Validated (separately from the single-issue +12%): returns a Pareto-efficient package that beats naive "split-every-issue-down-the-middle" bargaining by ~40% joint surplus (300 random 4-issue profiles). HONEST CAVEAT: the priority INFERENCE layered on top is weak (recovery r≈0.3) and currently adds only ~1% (and can be slightly NEGATIVE against some opponents) over the same engine run with no inference — so the proven value today is the efficient-package search, not (yet) the logrolling edge. Optional timing refinement: pass `rounds_left` (bargaining rounds remaining) with `compute_ms` > 0 to spend that many ms of Monte-Carlo rollouts choosing WHICH package to hold for as the other side concedes over the rounds — a firmer package closes later (discounted) than a generous one. 0 = the instant closed-form package; the reply then carries a `compute` block. Modest by design (never worse than the closed form in-model; helps on a minority of deals). Example: a SaaS contract — you most want a low price_per_seat, can flex on seats/term/SLA. negotiate_bundle(issues=[ {"name":"price_per_seat","options":["$50","$40","$30"],"my_utility":[0,0.5,1],"their_utility":[1,0.5,0]}, {"name":"sla","options":["99%","99.9%"],"my_utility":[0,1],"their_utility":[1,0]} ...], my_priorities={"price_per_seat":0.55,"sla":0.1,...}, their_offers=[...]) -> a full package that gives ground on SLA to hold the price.

입력 스키마

{
  "type": "object",
  "properties": {
    "issues": {
      "description": "One dict per issue: {name, options (the choices), my_utility (value of each option to YOU), their_utility (value to THEM)} — utilities are one number per option, any scale.",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Issues",
      "type": "array"
    },
    "their_offers": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Packages the other side has tabled, oldest first, each as {issue_name: chosen_option} — lets it infer their priorities.",
      "title": "Their Offers"
    },
    "my_priorities": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "{issue_name: weight} — how much each issue matters to you (any scale). Optional.",
      "title": "My Priorities"
    },
    "my_batna": {
      "default": 0.4,
      "description": "Your best alternative to no deal, as a utility fraction in [0,1] (default 0.40); the returned package is guaranteed to beat it.",
      "title": "My Batna",
      "type": "number"
    },
    "their_batna_estimate": {
      "default": 0.4,
      "description": "Your estimate of the other side's BATNA, [0,1] (default 0.40).",
      "title": "Their Batna Estimate",
      "type": "number"
    },
    "rounds_left": {
      "default": 8,
      "description": "Bargaining rounds remaining (used with compute_ms for the timing tier; default 8).",
      "title": "Rounds Left",
      "type": "integer"
    },
    "compute_ms": {
      "default": 0,
      "description": "EXPERIMENTAL. Milliseconds of rollouts to choose WHICH package to hold as they concede; 0 = instant closed-form package.",
      "title": "Compute Ms",
      "type": "integer"
    }
  },
  "required": [
    "issues"
  ],
  "title": "gt_negotiate_bundleArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "action": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Action"
    },
    "recommended_offer": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Recommended Offer"
    },
    "message": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Message"
    },
    "my_utility": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "My Utility"
    },
    "their_expected_utility": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Their Expected Utility"
    },
    "inferred_their_priorities": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Inferred Their Priorities"
    },
    "trade_logic": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Trade Logic"
    },
    "fit": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Fit"
    },
    "confidence": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Confidence"
    },
    "acceptance_probability": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Acceptance Probability"
    },
    "compute": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Compute"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "NegotiateBundleOut"
}
🟢score_deal(issues, my_weights, their_weights, package, notional)

Score how good a deal is against your floor/target — free, no account or key needed. Score a settled package against the exact Pareto frontier — the SNHP leaderboard metric ("dollars left on the table") for YOUR negotiation. Args: issues: one dict per issue: {"name": str, "options": [labels], "my_utility": [per-option value to me], "their_utility": [per-option value to them]} — both sides' TRUE per-option values. my_weights: {issue_name: weight} — my true priorities (any scale). their_weights: {issue_name: weight} — their true priorities. package: the settled deal, {issue_name: option_label}. notional: deal size in dollars for the dollars-left framing. Returns realized joint welfare, the frontier best, the naive middle-split baseline, frontier capture, logroll capture, and dollars_left_on_table.

입력 스키마

{
  "type": "object",
  "properties": {
    "issues": {
      "description": "One dict per issue: {name, options, my_utility, their_utility} — both sides' TRUE per-option values (one number per option).",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Issues",
      "type": "array"
    },
    "my_weights": {
      "additionalProperties": true,
      "description": "{issue_name: weight} — your true priorities (any scale).",
      "title": "My Weights",
      "type": "object"
    },
    "their_weights": {
      "additionalProperties": true,
      "description": "{issue_name: weight} — their true priorities (any scale).",
      "title": "Their Weights",
      "type": "object"
    },
    "package": {
      "additionalProperties": true,
      "description": "The settled deal as {issue_name: chosen_option_label}.",
      "title": "Package",
      "type": "object"
    },
    "notional": {
      "default": 10000,
      "description": "Deal size in dollars, used for the 'dollars left on the table' framing (default 10000).",
      "title": "Notional",
      "type": "number"
    }
  },
  "required": [
    "issues",
    "my_weights",
    "their_weights",
    "package"
  ],
  "title": "score_dealArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "my_utility": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "My Utility"
    },
    "their_utility": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Their Utility"
    },
    "joint_welfare": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Joint Welfare"
    },
    "frontier_best": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Frontier Best"
    },
    "naive_split": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Naive Split"
    },
    "frontier_capture": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Frontier Capture"
    },
    "logroll_capture": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Logroll Capture"
    },
    "dollars_left_on_table": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Dollars Left On Table"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "ScoreDealOut"
}
🟢auction_bid(auction_format, my_valuation, n_competing_bidders, competitor_value_prior, reserve_price, ...)

The optimal bid when you're bidding in an auction — free, no account or key needed. USE THIS WHEN: you're a bidder and want the bid that maximizes your expected surplus without overpaying. NOT for running an auction (use auction_reserve) or 1:1 haggling (use negotiate). Provide: auction_format ("first_price" sealed bid, "second_price_vickrey", or "english_ascending"); my_valuation (what the item is worth to YOU, in $); n_competing_bidders (how many OTHER bidders, not counting you); and competitor_value_prior — a rough model of what rivals will pay, e.g. {"family":"uniform","params":{"low":0,"high":6000}} (or {"family":"lognorm","params":{"mu":8.5,"sigma":0.4}}). Estimate it if unknown. Returns {optimal_bid, expected_surplus, win_probability, dominant_strategy, rationale} — bid and surplus in the SAME $ you passed in. Example: a domain worth $5,000 to you, 4 rivals who'd pay up to ~$6,000, in a sealed first-price auction -> auction_bid(auction_format="first_price", my_valuation=5000, n_competing_bidders=4, competitor_value_prior={"family":"uniform","params":{"low":0,"high":6000}}) -> optimal_bid ~$4,000, win_probability ~0.48.

입력 스키마

{
  "type": "object",
  "properties": {
    "auction_format": {
      "description": "'first_price' (sealed), 'second_price_vickrey', or 'english_ascending'.",
      "enum": [
        "first_price",
        "second_price_vickrey",
        "english_ascending"
      ],
      "title": "Auction Format",
      "type": "string"
    },
    "my_valuation": {
      "description": "What the item is worth to YOU, in dollars.",
      "title": "My Valuation",
      "type": "number"
    },
    "n_competing_bidders": {
      "description": "How many OTHER bidders there are (not counting you).",
      "title": "N Competing Bidders",
      "type": "integer"
    },
    "competitor_value_prior": {
      "additionalProperties": true,
      "description": "Rough model of what rivals will pay, e.g. {family:'uniform', params:{low:0, high:6000}} or {family:'lognorm', params:{mu:8.5, sigma:0.4}}.",
      "title": "Competitor Value Prior",
      "type": "object"
    },
    "reserve_price": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The auction's reserve/minimum bid in dollars, if any (optional).",
      "title": "Reserve Price"
    },
    "risk_aversion": {
      "default": 1,
      "description": "Your risk aversion; 1.0 = risk-neutral (default 1.0).",
      "title": "Risk Aversion",
      "type": "number"
    }
  },
  "required": [
    "auction_format",
    "my_valuation",
    "n_competing_bidders",
    "competitor_value_prior"
  ],
  "title": "gt_auction_optimal_bidArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "optimal_bid": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Optimal Bid"
    },
    "expected_surplus": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expected Surplus"
    },
    "win_probability": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Win Probability"
    },
    "dominant_strategy": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Dominant Strategy"
    },
    "rationale": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Rationale"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "AuctionBidOut"
}
🟢auction_reserve(bidder_value_prior, n_bidders, seller_valuation)

The revenue-optimal reserve price when you're selling — free, no account or key needed. USE THIS WHEN: you're running an auction or sale with multiple bidders and need the floor price (minimum bid you'll accept) that maximizes your expected revenue. NOT for one-on-one haggling (use negotiate for that). Provide: n_bidders (how many bidders), seller_valuation (what the item is worth to YOU, in $), and bidder_value_prior — a rough model of what bidders will pay, e.g. {"family":"uniform","params":{"low":2000,"high":8000}}. Estimate it if unknown. Returns the reserve price and expected revenue. Example: a painting, ~5 bidders, worth $1,000 to you, bidders likely pay $2,000–$8,000 -> auction_reserve(n_bidders=5, seller_valuation=1000, bidder_value_prior={"family":"uniform","params":{"low":2000,"high":8000}}).

입력 스키마

{
  "type": "object",
  "properties": {
    "bidder_value_prior": {
      "additionalProperties": true,
      "description": "Rough model of what bidders will pay, e.g. {family:'uniform', params:{low:2000, high:8000}}.",
      "title": "Bidder Value Prior",
      "type": "object"
    },
    "n_bidders": {
      "description": "How many bidders you expect.",
      "title": "N Bidders",
      "type": "integer"
    },
    "seller_valuation": {
      "description": "What the item is worth to YOU, in dollars (your floor).",
      "title": "Seller Valuation",
      "type": "number"
    }
  },
  "required": [
    "bidder_value_prior",
    "n_bidders",
    "seller_valuation"
  ],
  "title": "gt_auction_optimal_reserveArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "reserve_price": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Reserve Price"
    },
    "expected_revenue": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expected Revenue"
    },
    "expected_revenue_no_reserve": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expected Revenue No Reserve"
    },
    "expected_efficiency_loss": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expected Efficiency Loss"
    },
    "rationale": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Rationale"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "AuctionReserveOut"
}
🟢clearance_price(buyer_arrival_prior, arrival_rate_per_second, inventory, horizon_seconds, n_simulations, ...)

Best price plus markdown schedule to clear stock by a deadline — free, no account or key needed. USE THIS WHEN: you must sell a FIXED number of units before a cutoff and demand arrives over time — event tickets, perishable inventory, end-of-life stock. NOT for 1:1 haggling (negotiate) or auctions (auction_bid/reserve). Provide: inventory (units to sell); horizon_seconds (selling window in SECONDS — 14 days = 14*24*3600 = 1209600); arrival_rate_per_second (expected shoppers per second = expected total shoppers / horizon_seconds); and buyer_arrival_prior — a rough model of willingness-to-pay, e.g. {"family":"uniform","params":{"low":40,"high":150}}. Returns {static_price (one good fixed price), static_expected_revenue, dynamic_schedule (list of {t_seconds, recommended_price} markdown waypoints), sellthrough_rate, rationale} — all prices in the SAME $ as your prior. Example: 200 tickets, 14-day window, ~600 shoppers willing to pay $40-$150 -> clearance_price(inventory=200, horizon_seconds=1209600, arrival_rate_per_second=600/1209600, buyer_arrival_prior={"family":"uniform","params":{"low":40,"high":150}}) -> static_price ~$112, schedule marks down $114 -> ~$76 as the deadline nears.

입력 스키마

{
  "type": "object",
  "properties": {
    "buyer_arrival_prior": {
      "additionalProperties": true,
      "description": "Rough model of buyer willingness-to-pay, e.g. {family:'uniform', params:{low:40, high:150}}.",
      "title": "Buyer Arrival Prior",
      "type": "object"
    },
    "arrival_rate_per_second": {
      "description": "Expected shoppers per SECOND (= expected total shoppers / horizon_seconds).",
      "title": "Arrival Rate Per Second",
      "type": "number"
    },
    "inventory": {
      "description": "Number of units you must sell before the cutoff.",
      "title": "Inventory",
      "type": "integer"
    },
    "horizon_seconds": {
      "description": "Selling window in SECONDS (14 days = 14*24*3600 = 1209600).",
      "title": "Horizon Seconds",
      "type": "number"
    },
    "n_simulations": {
      "default": 2000,
      "description": "Monte-Carlo sample count for the estimate (default 2000).",
      "title": "N Simulations",
      "type": "integer"
    },
    "seed": {
      "default": 42,
      "description": "RNG seed for reproducibility (default 42).",
      "title": "Seed",
      "type": "integer"
    }
  },
  "required": [
    "buyer_arrival_prior",
    "arrival_rate_per_second",
    "inventory",
    "horizon_seconds"
  ],
  "title": "gt_mechanism_posted_price_optimalArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "static_price": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Static Price"
    },
    "static_expected_revenue": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Static Expected Revenue"
    },
    "static_simulated_revenue": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Static Simulated Revenue"
    },
    "dynamic_schedule": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Dynamic Schedule"
    },
    "dynamic_value_estimate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Dynamic Value Estimate"
    },
    "sellthrough_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Sellthrough Rate"
    },
    "rationale": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Rationale"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "ClearancePriceOut"
}
🟢stable_match(proposers, receivers)

Match two groups by their rankings so no pair wants to swap — free, no account or key needed. A STABLE matching: USE THIS WHEN you're assigning two sides to each other by mutual preference — interns<->teams, students<->schools, mentors<->mentees — and want a result with no "blocking pair" (no person+slot that both prefer each other over what they got). Provide proposers and receivers, each a list of {"id": name, "preferences": [ids of the OTHER side, most-wanted first]}. Receivers may add "capacity" (default 1) to accept several. Returns {matching (name -> name), unmatched_proposers, blocking_pairs (empty list = provably stable), n_proposals}. NOTE: the result is PROPOSER-optimal, so put the side you want to favor in `proposers`. Example: stable_match( proposers=[{"id":"Ana","preferences":["Growth","Core"]}, {"id":"Ben","preferences":["Core","Growth"]}], receivers=[{"id":"Growth","preferences":["Ben","Ana"]}, {"id":"Core","preferences":["Ana","Ben"]}]) -> matching {"Ana":"Growth","Ben":"Core"}, blocking_pairs [].

입력 스키마

{
  "type": "object",
  "properties": {
    "proposers": {
      "description": "List of {id, preferences:[ids of the OTHER side, most-wanted first]}. The result is PROPOSER-optimal — put the side you want to favor here.",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Proposers",
      "type": "array"
    },
    "receivers": {
      "description": "List of {id, preferences:[...], capacity (optional, default 1)}.",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Receivers",
      "type": "array"
    }
  },
  "required": [
    "proposers",
    "receivers"
  ],
  "title": "gt_mechanism_gale_shapleyArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "matching": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Matching"
    },
    "unmatched_proposers": {
      "anyOf": [
        {
          "items": {},
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Unmatched Proposers"
    },
    "blocking_pairs": {
      "anyOf": [
        {
          "items": {},
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Blocking Pairs"
    },
    "n_proposals": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "N Proposals"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "StableMatchOut"
}
🟡memory_save(api_key, blob_b64, ttl_seconds)

Persistent memory for your agent across sessions — save now, load in any later session. You encrypt before saving; the store holds only ciphertext (blind custody) and signs a receipt over its hash — it cannot read your memory. Saving uses your prepaid wallet; a new key's 50¢ starter credit covers your first saves, and loading it back (memory_load) is free. `blob_b64` is YOUR ciphertext as base64 — encrypt BEFORE saving; keys never transit, contents are never logged, so a breach leaks only sealed boxes. Charged a thin flat fee ONLY on durable store (empty/oversize/unencodable is uncharged). ttl_seconds is clamped to [60s, 7d] and the effective expires_at is returned. The receipt's content_hash is over YOUR ciphertext, so you can prove what you stored without the store ever seeing plaintext.

입력 스키마

{
  "type": "object",
  "properties": {
    "api_key": {
      "description": "Your SNHP API key (a new key's 50c starter credit covers first saves).",
      "title": "Api Key",
      "type": "string"
    },
    "blob_b64": {
      "description": "YOUR ciphertext as base64 — encrypt BEFORE saving; the store holds only the sealed box and cannot read it.",
      "title": "Blob B64",
      "type": "string"
    },
    "ttl_seconds": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "How long to keep it, clamped to [60s, 7 days]; the effective expiry is returned (optional).",
      "title": "Ttl Seconds"
    }
  },
  "required": [
    "api_key",
    "blob_b64"
  ],
  "title": "store_parkArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "ok": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Ok"
    },
    "ticket": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Ticket"
    },
    "ticket_hash": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Ticket Hash"
    },
    "size_bytes": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Size Bytes"
    },
    "expires_at": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expires At"
    },
    "price_millicents": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Price Millicents"
    },
    "receipt": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Receipt"
    },
    "charged": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Charged"
    },
    "code": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Code"
    },
    "reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Reason"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "MemorySaveOut"
}
🟢memory_load(api_key, ticket)

Load a memory you saved in an earlier session — retrieval is free. Get back an encrypted blob you parked earlier (the blind locker) by its claim `ticket`. Returns {ok, blob_b64, size_bytes, expires_at} — the ciphertext you saved, which only YOU can decrypt. A wrong owner reads as a missing ticket; an expired TTL is `expired`; a lost at-rest key is `at_rest_key_unavailable`. Free (the save settled it).

입력 스키마

{
  "type": "object",
  "properties": {
    "api_key": {
      "description": "The same SNHP API key you saved under (a different owner reads as a missing ticket).",
      "title": "Api Key",
      "type": "string"
    },
    "ticket": {
      "description": "The claim ticket returned by memory_save.",
      "title": "Ticket",
      "type": "string"
    }
  },
  "required": [
    "api_key",
    "ticket"
  ],
  "title": "store_retrieveArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "ok": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Ok"
    },
    "blob_b64": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Blob B64"
    },
    "size_bytes": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Size Bytes"
    },
    "expires_at": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expires At"
    },
    "charged": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Charged"
    },
    "code": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Code"
    },
    "reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Reason"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "MemoryLoadOut"
}
🟢session_open(api_key, category, side, walk_away, target, ...)

Open a $2 receipted negotiation session: deterministic, replayable, every move signed. PAID ($2 once, from your credit balance) — the $2 covers EVERY move of this negotiation (up to 10 moves, 7 days), tuned to the category. A new key's 50¢ starter credit is a taste, not enough for a session — top up first. category: resale | supply | retail. side: buy | sell. walk_away = your true floor (sell) / ceiling (buy) — private, never crossed. Pass their_offers to get the first move back immediately with the session. Subsequent moves: session_advise with the session_id — no further charge.

입력 스키마

{
  "type": "object",
  "properties": {
    "api_key": {
      "description": "Your SNHP API key; $2 is debited from its credit balance (covers every move of this one negotiation).",
      "title": "Api Key",
      "type": "string"
    },
    "category": {
      "description": "Negotiation category for tuning: 'resale' | 'supply' | 'retail'.",
      "title": "Category",
      "type": "string"
    },
    "side": {
      "description": "Which side you're on: 'buy' or 'sell'.",
      "title": "Side",
      "type": "string"
    },
    "walk_away": {
      "description": "Your true reservation in dollars — floor (sell) / ceiling (buy); private, never crossed.",
      "title": "Walk Away",
      "type": "number"
    },
    "target": {
      "description": "Your aspiration price in dollars.",
      "title": "Target",
      "type": "number"
    },
    "their_offers": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The other side's offers so far, in dollars, oldest first — pass to get the first move back with the session (optional).",
      "title": "Their Offers"
    },
    "my_offers": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Your own offers so far, in dollars, oldest first (optional).",
      "title": "My Offers"
    },
    "rounds_left": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Bargaining rounds remaining for this move (optional; overrides the category default).",
      "title": "Rounds Left"
    },
    "seed": {
      "default": 0,
      "description": "RNG seed for the deterministic engine (default 0).",
      "title": "Seed",
      "type": "integer"
    }
  },
  "required": [
    "api_key",
    "category",
    "side",
    "walk_away",
    "target"
  ],
  "title": "nextmove_openArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Session Id"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Category"
    },
    "side": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Side"
    },
    "price_cents": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Price Cents"
    },
    "price_millicents": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Price Millicents"
    },
    "max_moves": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Max Moves"
    },
    "expires_at": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Expires At"
    },
    "funding": {
      "default": null,
      "title": "Funding"
    },
    "balance_after": {
      "default": null,
      "title": "Balance After"
    },
    "context_hash": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Context Hash"
    },
    "receipt": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Receipt"
    },
    "first_move": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "First Move"
    },
    "first_move_error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "First Move Error"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "how_to_pay": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "How To Pay"
    }
  },
  "title": "SessionOpenOut"
}
🟡session_advise(api_key, session_id, their_offers, my_offers, rounds_left)

Your next move inside a receipted session (single-issue) — no additional charge (the $2 at session_open covered it). Pass the FULL offer history each time, oldest first. Returns move, exact price, ready-to-send message, and the receipt (why[], context_hash, deterministic compute block).

입력 스키마

{
  "type": "object",
  "properties": {
    "api_key": {
      "description": "The API key that opened the session.",
      "title": "Api Key",
      "type": "string"
    },
    "session_id": {
      "description": "The session_id returned by session_open.",
      "title": "Session Id",
      "type": "string"
    },
    "their_offers": {
      "description": "The FULL counterparty offer history, in dollars, oldest first.",
      "items": {
        "type": "number"
      },
      "title": "Their Offers",
      "type": "array"
    },
    "my_offers": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Your own offer history, in dollars, oldest first (optional).",
      "title": "My Offers"
    },
    "rounds_left": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Bargaining rounds remaining (optional).",
      "title": "Rounds Left"
    }
  },
  "required": [
    "api_key",
    "session_id",
    "their_offers"
  ],
  "title": "nextmove_adviseArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "move": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Move"
    },
    "offer": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Offer"
    },
    "message": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Message"
    },
    "why": {
      "anyOf": [
        {
          "items": {},
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Why"
    },
    "confidence_note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Confidence Note"
    },
    "context_hash": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Context Hash"
    },
    "policy_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Policy Id"
    },
    "move_index": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Move Index"
    },
    "compute": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Compute"
    },
    "receipt": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Receipt"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "SessionAdviseOut"
}
🔴session_bundle(api_key, session_id, issues, their_offers, my_priorities, ...)

Multi-issue logrolled advice inside a receipted session — no additional charge. The logrolling tier, the thing the free tool does NOT have. Trade the issues you care less about for the ones you value: issues = [{name, options, my_utility (per option), their_utility (your read of their direction)}]; their_offers = packages they've tabled, oldest first. Returns the recommended package, trade logic, inferred counterparty priorities, acceptance probability, and the receipt. Deterministic closed form — no rollout theater. The package is guaranteed to clear YOUR stated BATNA (enforced, not promised).

입력 스키마

{
  "type": "object",
  "properties": {
    "api_key": {
      "description": "The API key that opened the session.",
      "title": "Api Key",
      "type": "string"
    },
    "session_id": {
      "description": "The session_id returned by session_open.",
      "title": "Session Id",
      "type": "string"
    },
    "issues": {
      "description": "One dict per issue: {name, options, my_utility (per option), their_utility (your read of their direction)}.",
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Issues",
      "type": "array"
    },
    "their_offers": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Packages they've tabled, oldest first, each {issue_name: option} (optional).",
      "title": "Their Offers"
    },
    "my_priorities": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "{issue_name: weight} — how much each issue matters to you (optional).",
      "title": "My Priorities"
    },
    "my_batna": {
      "default": 0.4,
      "description": "Your BATNA as a utility fraction in [0,1] (default 0.40); the package is guaranteed to clear it.",
      "title": "My Batna",
      "type": "number"
    },
    "their_batna_estimate": {
      "default": 0.4,
      "description": "Your estimate of their BATNA, [0,1] (default 0.40).",
      "title": "Their Batna Estimate",
      "type": "number"
    },
    "cooperation": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional cooperation dial in [0,1] biasing toward joint surplus.",
      "title": "Cooperation"
    }
  },
  "required": [
    "api_key",
    "session_id",
    "issues"
  ],
  "title": "nextmove_bundleArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "move": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Move"
    },
    "package": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Package"
    },
    "message": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Message"
    },
    "why": {
      "anyOf": [
        {
          "items": {},
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Why"
    },
    "confidence_note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Confidence Note"
    },
    "context_hash": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Context Hash"
    },
    "move_index": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Move Index"
    },
    "their_expected_utility": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Their Expected Utility"
    },
    "acceptance_probability": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Acceptance Probability"
    },
    "receipt": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Receipt"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "SessionBundleOut"
}
🟢session_close(api_key, session_id)

Close a receipted session and get the signed summary receipt. Optional — sessions also expire on their own — but closing timestamps the outcome, which helps the machine learn real round-counts per category. Returns the `closed` flag AND a signed session-summary receipt (GAUNTLET #4) — moves count, total charged (one $2 open), and the per-move context_hashes — to hand your principal. An unknown session or key mismatch leaves `closed` false and returns an `error` instead of the receipt (indistinguishable, so a session id can't be probed).

입력 스키마

{
  "type": "object",
  "properties": {
    "api_key": {
      "description": "The API key that opened the session.",
      "title": "Api Key",
      "type": "string"
    },
    "session_id": {
      "description": "The session_id to close.",
      "title": "Session Id",
      "type": "string"
    }
  },
  "required": [
    "api_key",
    "session_id"
  ],
  "title": "nextmove_closeArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "closed": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Closed"
    },
    "receipt": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Receipt"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "SessionCloseOut"
}
🟢store_catalog

See what's on the shelf — free, no key needed: prices, predicates, receipt scheme, and your balance. THE STORE: one counter, one prepaid wallet, many slots. One read covers the whole shelf — the commodity slots, the blind locker (agent memory), and the paid receipted-session SKU (folds in what nextmove_catalog used to report separately). Every commodity slot settles ON DELIVERY: the wallet is debited only when a machine-checkable predicate passes — a failed fetch is never charged, because here you cannot pay for nothing. Each receipt names the backend that served and its EXACT wholesale cost (passthrough, no per-call markup); the counter's cut is a published fee on wallet top-ups, not on the calls — 5% + a fixed 30¢ per transaction (the 30¢ is the card rail's own per-transaction toll, passed through). Every new key gets a one-time 50¢ starter credit — unconditional, no card — enough to taste the shelf before funding it. Don't see the capability you need? store_request logs it; unmet demand decides what gets stocked next. Returns the money unit (millicents, 1000 per cent), per-slot {tier, max_price_millicents, predicate_id, request_doc, serving-backend ids}, the anchor SKUs, the paid_session card, and the two pricing facts. Never returns key material.

입력 스키마

{
  "type": "object",
  "properties": {},
  "title": "store_catalogArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "unit": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Unit"
    },
    "millicents_per_cent": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Millicents Per Cent"
    },
    "counter_fee": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Counter Fee"
    },
    "counter_fee_pct": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Counter Fee Pct"
    },
    "request_privacy": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Request Privacy"
    },
    "keys": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Keys"
    },
    "starter_credit": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Starter Credit"
    },
    "admission": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Admission"
    },
    "slots": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Slots"
    },
    "paid_session": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Paid Session"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "StoreCatalogOut"
}
🟢store_request(text, api_key, watch, request_id)

Ask for a capability we don't sell yet — free; filings are public and drive what we stock. Two reads in one tool (absorbs the old store_request_status / nextmove_request): pass `request_id` to RE-QUERY a filing's status instead of filing anew — returns {found, request_id, status, status_note, filed_at, door, text} (found: false on an unknown id). Without a request_id it FILES a new ask and returns {request_id, status, watch, check}: every filing is logged verbatim (size-capped, stored as data, never rendered raw) and gets an id you can come back to (GAUNTLET #5). Check any filing with GET /v1/store/request/{id}; the public count is GET /v1/store/requests. Unmet demand decides what gets stocked next — the shelf writes itself from what agents ask for and can't get. Pass watch=True WITH an api_key when filing to flag the ask for a heads-up on a status flip (poll store_my_requests to see it — poll-based, no push); an anonymous watch is ignored, and the chosen flag is echoed as `watch`.

입력 스키마

{
  "type": "object",
  "properties": {
    "text": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "What capability you want that we don't stock yet (free-text). Omit when re-querying with request_id.",
      "title": "Text"
    },
    "api_key": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Your SNHP API key (optional; required only if you set watch=True).",
      "title": "Api Key"
    },
    "watch": {
      "default": false,
      "description": "Set True (with an api_key) to flag the ask for a status-flip heads-up; anonymous watches are ignored.",
      "title": "Watch",
      "type": "boolean"
    },
    "request_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pass an existing filing id to RE-QUERY its status instead of filing a new request.",
      "title": "Request Id"
    }
  },
  "title": "store_requestArguments"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "request_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Request Id"
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Status"
    },
    "watch": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Watch"
    },
    "check": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Check"
    },
    "found": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Found"
    },
    "status_note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Status Note"
    },
    "filed_at": {
      "default": null,
      "title": "Filed At"
    },
    "door": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Door"
    },
    "text": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Text"
    },
    "same_ask_count": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Same Ask Count"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "StoreRequestOut"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 15개
검증됨버전이 기록되지 않음도구 15개