{"serverInfo":{"name":"gametheory","title":"SNHP — free negotiation math + agent memory","version":"0.1.0","description":"Free math-optimal negotiation for AI agents — your next move in any price negotiation, plus multi-issue logrolling, auctions and matching; no account, no key. When you need it: persistent agent memory (blind custody) and $2 receipted negotiation sessions. LLM-free. This card lists the CORE door (15 hero-first tools); the full/legacy surface (old names, A2A verified-peer flow, first-strike attestation) is at /mcp/pro/.","websiteUrl":"https://snhp.dev","icons":[{"src":"https://snhp.dev/favicon.svg","mimeType":"image/svg+xml","sizes":["any"]},{"src":"https://snhp.dev/favicon.ico","mimeType":"image/x-icon","sizes":["48x48","32x32","16x16"]}]},"capabilities":{"tools":{"listChanged":false}},"authentication":{"required":false,"schemes":[]},"tools":[{"name":"negotiate","description":"Your math-optimal next move in any price negotiation — free, no account or key needed.\n\nUSE THIS WHEN: you're haggling over a single PRICE across multiple back-and-\nforth rounds and want a better outcome than winging it. Validated edge: ~12%\nbetter head-to-head (measured on this recommender, n=20 paired LLM\nnegotiations, 95% CI +6.5-17.4%, p<0.0001). NOT FOR: one-shot or fixed prices\n(it'll tell you to just negotiate directly); multi-issue bundles (use\nnegotiate_bundle — it logrolls across several linked issues); or non-price\ndecisions like accept-vs-decline a job offer (just reason it through).\n\nYou provide only what you already know — no game theory:\n  side          \"sell\" or \"buy\"\n  walk_away     your reservation in dollars (seller=floor/minimum, buyer=ceiling/max)\n  target        your aspiration in dollars (seller=high, buyer=low)\n  counterparty_offers  their offers so far, in dollars, oldest first\n  rounds_left   (optional, default 8) roughly how many back-and-forths remain\n  compute_ms    (optional, default 0; EXPERIMENTAL) milliseconds of Monte-Carlo\n                rollouts to spend refining the move. 0 = instant closed form.\n                Validated to show NO realized edge over the closed form (n=400,\n                mc_validation.py) — kept off by default as a research mechanism,\n                not a quality improvement. The reply carries a \"compute\" block\n\nYou get back, in dollars:\n  {\"action\": \"counter\"|\"accept\"|\"walk\", \"recommended_price\": 5387.0,\n   \"message\": \"...the best I can do is $5,387.00\", \"fit\": {...},\n   \"expected_settlement\": 4943.5, \"confidence\": 0.62}\n\nWORKED EXAMPLE — selling a contract, floor $4,000, hope $6,000, the buyer has\nbid $4,200 then $4,500:\n  negotiate(side=\"sell\", walk_away=4000, target=6000,\n            counterparty_offers=[4200, 4500], rounds_left=6)\n  -> counter ~$5,387 with a ready-to-send message; ACCEPT once their bid crosses\n     the optimal target; WALK if they stay below your floor near the deadline.\n\nWorks against ANY counterparty with zero setup. (The verified-peer cooperation\npremium is the separate, advanced gt_a2a_* flow on the pro door.)","inputSchema":{"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"},"title":"Negotiate — your optimal next move","outputSchema":{"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","type":"object"},"annotations":{"title":"Negotiate — your optimal next move","readOnlyHint":true,"openWorldHint":false}},{"name":"negotiate_bundle","description":"Negotiate several linked issues at once by logrolling — free, no account or key needed.\n\nUSE THIS WHEN: a deal has more than one issue on the table and they trade off —\na job offer (base + equity + signing), a SaaS contract (price + seats + term +\nSLA), any package deal. It concedes on the issues you care about LESS (and the\nother side cares about MORE) to win the ones you care about most — a trade that\nbeats splitting every issue down the middle. For a single PRICE, use\nnegotiate instead.\n\nProvide `issues`: a list of {\"name\", \"options\" (the choices), \"my_utility\" (how\ngood each option is to YOU — one number per option, any scale), \"their_utility\"\n(how good each option is to THEM — their preference direction)}. Optionally\n`my_priorities` ({issue_name: weight}, how much each issue matters to you) and\n`their_offers` (their packages so far as {issue_name: option}, oldest first —\nthis is what lets it INFER their priorities). Returns {action, recommended_offer\n(issue -> option), message, my_utility, their_expected_utility,\ninferred_their_priorities, trade_logic, fit, confidence, acceptance_probability}.\n\nValidated (separately from the single-issue +12%): returns a Pareto-efficient\npackage that beats naive \"split-every-issue-down-the-middle\" bargaining by ~40%\njoint surplus (300 random 4-issue profiles). HONEST CAVEAT: the priority\nINFERENCE layered on top is weak (recovery r≈0.3) and currently adds only ~1%\n(and can be slightly NEGATIVE against some opponents) over the same engine run\nwith no inference — so the proven value today is the efficient-package search,\nnot (yet) the logrolling edge.\n\nOptional timing refinement: pass `rounds_left` (bargaining rounds remaining)\nwith `compute_ms` > 0 to spend that many ms of Monte-Carlo rollouts choosing\nWHICH package to hold for as the other side concedes over the rounds — a firmer\npackage closes later (discounted) than a generous one. 0 = the instant\nclosed-form package; the reply then carries a `compute` block. Modest by design\n(never worse than the closed form in-model; helps on a minority of deals).\n\nExample: a SaaS contract — you most want a low price_per_seat, can flex on\nseats/term/SLA. negotiate_bundle(issues=[\n  {\"name\":\"price_per_seat\",\"options\":[\"$50\",\"$40\",\"$30\"],\"my_utility\":[0,0.5,1],\"their_utility\":[1,0.5,0]},\n  {\"name\":\"sla\",\"options\":[\"99%\",\"99.9%\"],\"my_utility\":[0,1],\"their_utility\":[1,0]} ...],\n  my_priorities={\"price_per_seat\":0.55,\"sla\":0.1,...}, their_offers=[...])\n  -> a full package that gives ground on SLA to hold the price.","inputSchema":{"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"},"title":"Negotiate a bundle — logroll linked issues","outputSchema":{"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","type":"object"},"annotations":{"title":"Negotiate a bundle — logroll linked issues","readOnlyHint":true,"openWorldHint":false}},{"name":"score_deal","description":"Score how good a deal is against your floor/target — free, no account or key needed.\n\nScore a settled package against the exact Pareto frontier — the SNHP\nleaderboard metric (\"dollars left on the table\") for YOUR negotiation.\n\nArgs:\n    issues: one dict per issue: {\"name\": str, \"options\": [labels],\n        \"my_utility\": [per-option value to me], \"their_utility\":\n        [per-option value to them]} — both sides' TRUE per-option values.\n    my_weights: {issue_name: weight} — my true priorities (any scale).\n    their_weights: {issue_name: weight} — their true priorities.\n    package: the settled deal, {issue_name: option_label}.\n    notional: deal size in dollars for the dollars-left framing.\n\nReturns realized joint welfare, the frontier best, the naive middle-split\nbaseline, frontier capture, logroll capture, and dollars_left_on_table.","inputSchema":{"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.0,"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"},"title":"Score a deal against the Pareto frontier","outputSchema":{"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","type":"object"},"annotations":{"title":"Score a deal against the Pareto frontier","readOnlyHint":true,"openWorldHint":false}},{"name":"auction_bid","description":"The optimal bid when you're bidding in an auction — free, no account or key needed.\n\nUSE THIS WHEN: you're a bidder and want the bid that maximizes your expected\nsurplus without overpaying. NOT for running an auction (use\nauction_reserve) or 1:1 haggling (use negotiate).\n\nProvide: auction_format (\"first_price\" sealed bid, \"second_price_vickrey\",\nor \"english_ascending\"); my_valuation (what the item is worth to YOU, in $);\nn_competing_bidders (how many OTHER bidders, not counting you); and\ncompetitor_value_prior — a rough model of what rivals will pay, e.g.\n{\"family\":\"uniform\",\"params\":{\"low\":0,\"high\":6000}} (or\n{\"family\":\"lognorm\",\"params\":{\"mu\":8.5,\"sigma\":0.4}}). Estimate it if unknown.\nReturns {optimal_bid, expected_surplus, win_probability, dominant_strategy,\nrationale} — bid and surplus in the SAME $ you passed in.\n\nExample: a domain worth $5,000 to you, 4 rivals who'd pay up to ~$6,000, in a\nsealed first-price auction -> auction_bid(auction_format=\"first_price\",\nmy_valuation=5000, n_competing_bidders=4,\ncompetitor_value_prior={\"family\":\"uniform\",\"params\":{\"low\":0,\"high\":6000}})\n-> optimal_bid ~$4,000, win_probability ~0.48.","inputSchema":{"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.0,"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"},"title":"Optimal auction bid","outputSchema":{"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","type":"object"},"annotations":{"title":"Optimal auction bid","readOnlyHint":true,"openWorldHint":false}},{"name":"auction_reserve","description":"The revenue-optimal reserve price when you're selling — free, no account or key needed.\n\nUSE THIS WHEN: you're running an auction or sale with multiple bidders and need\nthe floor price (minimum bid you'll accept) that maximizes your expected\nrevenue. NOT for one-on-one haggling (use negotiate for that).\n\nProvide: n_bidders (how many bidders), seller_valuation (what the item is worth\nto YOU, in $), and bidder_value_prior — a rough model of what bidders will pay,\ne.g. {\"family\":\"uniform\",\"params\":{\"low\":2000,\"high\":8000}}. Estimate it if\nunknown. Returns the reserve price and expected revenue.\n\nExample: a painting, ~5 bidders, worth $1,000 to you, bidders likely pay\n$2,000–$8,000 -> auction_reserve(n_bidders=5, seller_valuation=1000,\nbidder_value_prior={\"family\":\"uniform\",\"params\":{\"low\":2000,\"high\":8000}}).","inputSchema":{"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"},"title":"Revenue-optimal reserve price","outputSchema":{"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","type":"object"},"annotations":{"title":"Revenue-optimal reserve price","readOnlyHint":true,"openWorldHint":false}},{"name":"clearance_price","description":"Best price plus markdown schedule to clear stock by a deadline — free, no account or key needed.\n\nUSE THIS WHEN: you must sell a FIXED number of units before a cutoff and\ndemand arrives over time — event tickets, perishable inventory, end-of-life\nstock. NOT for 1:1 haggling (negotiate) or auctions (auction_bid/reserve).\n\nProvide: inventory (units to sell); horizon_seconds (selling window in\nSECONDS — 14 days = 14*24*3600 = 1209600); arrival_rate_per_second (expected\nshoppers per second = expected total shoppers / horizon_seconds); and\nbuyer_arrival_prior — a rough model of willingness-to-pay, e.g.\n{\"family\":\"uniform\",\"params\":{\"low\":40,\"high\":150}}. Returns {static_price\n(one good fixed price), static_expected_revenue, dynamic_schedule (list of\n{t_seconds, recommended_price} markdown waypoints), sellthrough_rate,\nrationale} — all prices in the SAME $ as your prior.\n\nExample: 200 tickets, 14-day window, ~600 shoppers willing to pay $40-$150 ->\nclearance_price(inventory=200, horizon_seconds=1209600,\narrival_rate_per_second=600/1209600,\nbuyer_arrival_prior={\"family\":\"uniform\",\"params\":{\"low\":40,\"high\":150}})\n-> static_price ~$112, schedule marks down $114 -> ~$76 as the deadline nears.","inputSchema":{"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"},"title":"Clearance price & markdown schedule","outputSchema":{"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","type":"object"},"annotations":{"title":"Clearance price & markdown schedule","readOnlyHint":true,"openWorldHint":false}},{"name":"stable_match","description":"Match two groups by their rankings so no pair wants to swap — free, no account or key needed.\n\nA STABLE matching: USE THIS WHEN you're assigning two sides to each other by\nmutual preference — interns<->teams, students<->schools, mentors<->mentees —\nand want a result with no \"blocking pair\" (no person+slot that both prefer\neach other over what they got).\n\nProvide proposers and receivers, each a list of {\"id\": name,\n\"preferences\": [ids of the OTHER side, most-wanted first]}. Receivers may add\n\"capacity\" (default 1) to accept several. Returns {matching (name -> name),\nunmatched_proposers, blocking_pairs (empty list = provably stable),\nn_proposals}. NOTE: the result is PROPOSER-optimal, so put the side you want\nto favor in `proposers`.\n\nExample: stable_match(\n    proposers=[{\"id\":\"Ana\",\"preferences\":[\"Growth\",\"Core\"]},\n               {\"id\":\"Ben\",\"preferences\":[\"Core\",\"Growth\"]}],\n    receivers=[{\"id\":\"Growth\",\"preferences\":[\"Ben\",\"Ana\"]},\n               {\"id\":\"Core\",\"preferences\":[\"Ana\",\"Ben\"]}])\n-> matching {\"Ana\":\"Growth\",\"Ben\":\"Core\"}, blocking_pairs [].","inputSchema":{"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"},"title":"Stable matching (Gale–Shapley)","outputSchema":{"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","type":"object"},"annotations":{"title":"Stable matching (Gale–Shapley)","readOnlyHint":true,"openWorldHint":false}},{"name":"memory_save","description":"Persistent memory for your agent across sessions — save now, load in any later session.\n\nYou encrypt before saving; the store holds only ciphertext (blind custody)\nand signs a receipt over its hash — it cannot read your memory.\n\nSaving uses your prepaid wallet; a new key's 50¢ starter credit covers\nyour first saves, and loading it back (memory_load) is free. `blob_b64`\nis YOUR ciphertext as base64 — encrypt BEFORE saving; keys never transit,\ncontents are never logged, so a breach leaks only sealed boxes. Charged a\nthin flat fee ONLY on durable store (empty/oversize/unencodable is\nuncharged). ttl_seconds is clamped to [60s, 7d] and the effective\nexpires_at is returned. The receipt's content_hash is over YOUR\nciphertext, so you can prove what you stored without the store ever seeing\nplaintext.","inputSchema":{"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"},"title":"Save agent memory (blind locker)","outputSchema":{"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","type":"object"},"annotations":{"title":"Save agent memory (blind locker)","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"memory_load","description":"Load a memory you saved in an earlier session — retrieval is free.\n\nGet back an encrypted blob you parked earlier (the blind locker) by its\nclaim `ticket`. Returns {ok, blob_b64, size_bytes, expires_at} — the\nciphertext you saved, which only YOU can decrypt. A wrong owner reads as a\nmissing ticket; an expired TTL is `expired`; a lost at-rest key is\n`at_rest_key_unavailable`. Free (the save settled it).","inputSchema":{"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"},"title":"Load agent memory","outputSchema":{"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","type":"object"},"annotations":{"title":"Load agent memory","readOnlyHint":true,"openWorldHint":false}},{"name":"session_open","description":"Open a $2 receipted negotiation session: deterministic, replayable, every move signed.\n\nPAID ($2 once, from your credit balance) — the $2 covers EVERY move of\nthis negotiation (up to 10 moves, 7 days), tuned to the category. A new\nkey's 50¢ starter credit is a taste, not enough for a session — top up\nfirst. category: resale | supply | retail. side: buy | sell.\nwalk_away = your true floor (sell) / ceiling (buy) — private,\nnever crossed. Pass their_offers to get the first move back\nimmediately with the session. Subsequent moves: session_advise\nwith the session_id — no further charge.","inputSchema":{"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"},"title":"Open a $2 receipted session","outputSchema":{"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","type":"object"},"annotations":{"title":"Open a $2 receipted session","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"session_advise","description":"Your next move inside a receipted session (single-issue) — no additional charge (the $2 at session_open covered it).\n\nPass the FULL offer history each time, oldest first. Returns move, exact\nprice, ready-to-send message, and the receipt (why[], context_hash,\ndeterministic compute block).","inputSchema":{"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"},"title":"Session move — next single-price offer","outputSchema":{"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","type":"object"},"annotations":{"title":"Session move — next single-price offer","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"session_bundle","description":"Multi-issue logrolled advice inside a receipted session — no additional charge.\n\nThe logrolling tier, the thing the free tool does NOT have. Trade the\nissues you care less about for the ones you value: issues = [{name,\noptions, my_utility (per option), their_utility (your read of their\ndirection)}]; their_offers = packages they've tabled, oldest\nfirst. Returns the recommended package, trade logic, inferred\ncounterparty priorities, acceptance probability, and the receipt.\nDeterministic closed form — no rollout theater. The package is\nguaranteed to clear YOUR stated BATNA (enforced, not promised).","inputSchema":{"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"},"title":"Session move — multi-issue bundle","outputSchema":{"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","type":"object"},"annotations":{"title":"Session move — multi-issue bundle","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"session_close","description":"Close a receipted session and get the signed summary receipt.\n\nOptional — sessions also expire on their own — but closing timestamps the\noutcome, which helps the machine learn real round-counts per\ncategory. Returns the `closed` flag AND a signed session-summary\nreceipt (GAUNTLET #4) — moves count, total charged (one $2 open), and\nthe per-move context_hashes — to hand your principal. An unknown session\nor key mismatch leaves `closed` false and returns an `error` instead of\nthe receipt (indistinguishable, so a session id can't be probed).","inputSchema":{"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"},"title":"Close session & get the signed receipt","outputSchema":{"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","type":"object"},"annotations":{"title":"Close session & get the signed receipt","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"store_catalog","description":"See what's on the shelf — free, no key needed: prices, predicates, receipt scheme, and your balance.\n\nTHE STORE: one counter, one prepaid wallet, many slots. One read covers\nthe whole shelf — the commodity slots, the blind locker (agent memory),\nand the paid receipted-session SKU (folds in what nextmove_catalog used\nto report separately).\n\nEvery commodity slot settles ON DELIVERY: the wallet is debited only\nwhen a machine-checkable predicate passes — a failed fetch is never\ncharged, because here you cannot pay for nothing. Each receipt names\nthe backend that served and its EXACT wholesale cost (passthrough, no\nper-call markup); the counter's cut is a published fee on wallet\ntop-ups, not on the calls — 5% + a fixed 30¢ per transaction (the 30¢\nis the card rail's own per-transaction toll, passed through).\n\nEvery new key gets a one-time 50¢ starter credit — unconditional, no\ncard — enough to taste the shelf before funding it. Don't see the\ncapability you need? store_request logs it; unmet demand decides what\ngets stocked next. Returns the money unit (millicents, 1000 per cent),\nper-slot {tier, max_price_millicents, predicate_id, request_doc,\nserving-backend ids}, the anchor SKUs, the paid_session card, and the\ntwo pricing facts. Never returns key material.","inputSchema":{"properties":{},"title":"store_catalogArguments","type":"object"},"title":"Store catalog & wallet balance","outputSchema":{"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","type":"object"},"annotations":{"title":"Store catalog & wallet balance","readOnlyHint":true,"openWorldHint":false}},{"name":"store_request","description":"Ask for a capability we don't sell yet — free; filings are public and drive what we stock.\n\nTwo reads in one tool (absorbs the old store_request_status /\nnextmove_request): pass `request_id` to RE-QUERY a filing's status\ninstead of filing anew — returns {found, request_id, status, status_note,\nfiled_at, door, text} (found: false on an unknown id). Without a\nrequest_id it FILES a new ask and returns {request_id, status, watch,\ncheck}: every filing is logged verbatim (size-capped, stored as data,\nnever rendered raw) and gets an id you can come back to (GAUNTLET #5).\nCheck any filing with GET /v1/store/request/{id}; the public count is\nGET /v1/store/requests. Unmet demand decides what gets stocked next — the\nshelf writes itself from what agents ask for and can't get.\n\nPass watch=True WITH an api_key when filing to flag the ask for a heads-up\non a status flip (poll store_my_requests to see it — poll-based, no push);\nan anonymous watch is ignored, and the chosen flag is echoed as `watch`.","inputSchema":{"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"},"title":"Request a capability / check a filing","outputSchema":{"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","type":"object"},"annotations":{"title":"Request a capability / check a filing","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}}],"resources":[],"prompts":[],"name":"io.github.ryuxik/snhp-negotiation","description":"Free math-optimal negotiation for AI agents — your next move in any price negotiation, plus multi-issue logrolling, auctions and matching; no account, no key. When you need it: persistent agent memory (blind custody) and $2 receipted negotiation sessions. LLM-free. This card lists the CORE door (15 hero-first tools); the full/legacy surface (old names, A2A verified-peer flow, first-strike attestation) is at /mcp/pro/.","homepage":"https://snhp.dev","websiteUrl":"https://snhp.dev","iconUrl":"https://snhp.dev/favicon.svg","icons":[{"src":"https://snhp.dev/favicon.svg","mimeType":"image/svg+xml","sizes":["any"]},{"src":"https://snhp.dev/favicon.ico","mimeType":"image/x-icon","sizes":["48x48","32x32","16x16"]}],"repository":"https://github.com/ryuxik/snhp","transport":{"type":"streamable-http","url":"https://snhp.dev/mcp/"},"transport_pro":{"type":"streamable-http","url":"https://snhp.dev/mcp/pro/","description":"Full surface incl. legacy names and advanced flows (A2A verified-peer, first-strike attestation, auction design/sim, pondering sessions)."}}