btw

Agentic group buying. Agents pool demand into chains that clear at a group price. Waitlist is open.

我該用這個嗎

品質與安全性

A
說明品質
85%
結構描述完整度
87%
命名品質
84%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(6)

  • LOWTool 'release' description lacks action verb在 release 中
  • LOWTool 'leave' description lacks action verb在 leave 中
  • LOWTool 'park' description lacks action verb在 park 中
  • LOWTool 'get_chain' description lacks action verb在 get_chain 中
  • LOWTool 'join_chain' description lacks action verb在 join_chain 中
  • LOWTool 'park_intent' description lacks action verb在 park_intent 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~3,694Token(工具定義)
~1.2 KB典型回應大小
顯著的注意力影響(128k 上下文的 2.89%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "btw": {
      "url": "https://btw.space/mcp?utm_source=mcp-registry"
    }
  }
}

遠端端點

https://btw.space/mcp?utm_source=mcp-registrystreamable-http

它能做什麼

工具清單

工具(19)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢my_agent(email)

What your human's btw agent is watching, with a status on each thing: watching (counting the other agents), group forming (enough want it that btw is talking to the brand), or live (there's a price and a deadline, hold a spot). Takes their email. The list opens once they've clicked the confirm link btw emailed them the first time you called.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡waitlist(email, want, platform, referral)

Old style: put your human on the list to hear when the next product goes live. Prefer want with a link, or hold on what's live. Needs their email. Optionally say what they want to buy and which agent platform you are.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "description": "your human's email",
      "type": "string"
    },
    "want": {
      "description": "what your human wants to buy, plainly",
      "type": "string",
      "maxLength": 200
    },
    "platform": {
      "description": "your agent platform, like claude, grok, chatgpt, other",
      "type": "string",
      "maxLength": 40
    },
    "referral": {
      "description": "a friend's referral code or link, if you came through one",
      "type": "string",
      "maxLength": 120
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_chains

Every product btw has run or queued: the live one, what's up next by wants, and what filled or closed. Use status for the live one.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡hold(email, chain, max_price_usd, name, ref, ...)

Hold your human a spot on the live product. Needs their email. Returns the price this spot locks and a link where they save a card; the spot is held once they do. The first spots lock at the early price; every spot after locks at the group price. The result says which one this spot got. Nothing is charged now. If the product fills, the deposit is charged and applied to their purchase; they pay the balance to the brand. If it doesn't fill, nobody pays. Stripe test mode. Test cards only, no real money moves.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email"
    },
    "chain": {
      "description": "a product slug; leave it out for what's live",
      "type": "string"
    },
    "max_price_usd": {
      "description": "optional cap on the deposit in dollars",
      "type": "number"
    },
    "name": {
      "description": "first name and last initial, shown on the product page",
      "type": "string",
      "maxLength": 40
    },
    "ref": {
      "description": "a referral code from another buyer's link, the r= part",
      "type": "string",
      "maxLength": 16
    },
    "invite_code": {
      "description": "not needed any more",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡join(email, chain, max_price_usd, name, ref, ...)

The old name for hold. Hold your human a spot on the live product. Needs their email. Returns the price this spot locks and a link where they save a card; the spot is held once they do. The first spots lock at the early price; every spot after locks at the group price. The result says which one this spot got. Nothing is charged now. If the product fills, the deposit is charged and applied to their purchase; they pay the balance to the brand. If it doesn't fill, nobody pays. Stripe test mode. Test cards only, no real money moves.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email"
    },
    "chain": {
      "description": "a product slug; leave it out for what's live",
      "type": "string"
    },
    "max_price_usd": {
      "description": "optional cap on the deposit in dollars",
      "type": "number"
    },
    "name": {
      "description": "first name and last initial, shown on the product page",
      "type": "string",
      "maxLength": 40
    },
    "ref": {
      "description": "a referral code from another buyer's link, the r= part",
      "type": "string",
      "maxLength": 16
    },
    "invite_code": {
      "description": "not needed any more",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢status(chain, email)

What's live: the product, its list and group price, how many buyers unlock the price, how many are committed, how many want it, spots left, and the deadline if one is set. Give a slug to ask about another product, and an email to also see that person's spot.

輸入結構描述

{
  "type": "object",
  "properties": {
    "chain": {
      "description": "a product slug; leave it out for what's live",
      "type": "string"
    },
    "email": {
      "description": "check this person's spot",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴release(chain, email, commitment_id)

Release a held spot. Needs the product slug, the email that holds it, and the commitment id from hold or status. Nothing is charged for a released spot.

輸入結構描述

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "minLength": 1,
      "description": "product slug"
    },
    "email": {
      "type": "string",
      "minLength": 3
    },
    "commitment_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "chain",
    "email",
    "commitment_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴leave(chain, email, commitment_id)

The old name for release. Release a held spot. Needs the product slug, the email that holds it, and the commitment id from hold or status. Nothing is charged for a released spot.

輸入結構描述

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "minLength": 1,
      "description": "product slug"
    },
    "email": {
      "type": "string",
      "minLength": 3
    },
    "commitment_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "chain",
    "email",
    "commitment_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪park(description, max_price_usd, email)

Old style: park what your human wants in plain words with the most they'd pay. Prefer want with a link.

輸入結構描述

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "what your human wants, plainly"
    },
    "max_price_usd": {
      "type": "number",
      "description": "the most they'd pay, in dollars"
    },
    "email": {
      "description": "optional, so we can say when a chain opens",
      "type": "string"
    }
  },
  "required": [
    "description",
    "max_price_usd"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡want(url, asin, asins, type, name, ...)

Add something to your human's btw agent. Takes a link or an ASIN plus their email; a new email gets an agent. A hotel link becomes a stay (give month, and nights if known), a subscription link becomes software (give plan), anything else is gear. Or set type and the fields outright: stay needs hotel and month, home needs job and zip, software needs product and plan. Their agent starts watching it and the reply says how many other agents already want it. If you already read a page yourself, pass asins instead of a link. btw doesn't buy from Amazon. The link is how we know what you want; the group price comes from the brand.

輸入結構描述

{
  "type": "object",
  "properties": {
    "url": {
      "description": "a product, hotel, or subscription link",
      "type": "string",
      "maxLength": 2000
    },
    "asin": {
      "description": "an Amazon ASIN, 10 letters and digits",
      "type": "string",
      "maxLength": 20
    },
    "asins": {
      "description": "ASINs you read off a page yourself, up to 100",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 20
      }
    },
    "type": {
      "description": "skip auto-detection and say the type",
      "type": "string",
      "enum": [
        "gear",
        "stay",
        "home",
        "software",
        "gym"
      ]
    },
    "name": {
      "description": "gym: the gym or studio name",
      "type": "string",
      "maxLength": 80
    },
    "hotel": {
      "description": "stay: hotel name or link",
      "type": "string",
      "maxLength": 200
    },
    "month": {
      "description": "stay: month as YYYY-MM",
      "type": "string",
      "maxLength": 7
    },
    "nights": {
      "description": "stay: nights, if known",
      "type": "integer",
      "minimum": 1,
      "maximum": 60
    },
    "job": {
      "description": "home: solar, home-battery, ev-charger, heat-pump, roof, windows, sauna-install, other",
      "type": "string",
      "maxLength": 40
    },
    "zip": {
      "description": "home: five digit US zip",
      "type": "string",
      "maxLength": 10
    },
    "note": {
      "description": "home or stay: a short note",
      "type": "string",
      "maxLength": 200
    },
    "product": {
      "description": "software: product name or link",
      "type": "string",
      "maxLength": 200
    },
    "plan": {
      "description": "software: individual, family, team, other",
      "type": "string",
      "maxLength": 20
    },
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email, same as the waitlist"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡sync_wishlist(url, asins, email)

Read a public wishlist and add every item to your human's btw agent. Amazon wishlists and Steam wishlists. Takes the list link plus their email; a new email gets an agent. Returns the items found and how many other agents want each one. If the server can't read the list, the reply says so; then open the list yourself and pass the ASINs, or call want once per product link. btw doesn't buy from Amazon. The link is how we know what you want; the group price comes from the brand.

輸入結構描述

{
  "type": "object",
  "properties": {
    "url": {
      "description": "the list link. Amazon: open the list, tap Share, copy the link. Steam: the profile's wishlist page",
      "type": "string",
      "maxLength": 2000
    },
    "asins": {
      "description": "ASINs you read off the list yourself, up to 100",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 20
      }
    },
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email, same as the waitlist"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢want_stay(hotel, month, nights, note, email)

Your human wants a hotel in a given month. Takes the hotel (name or link), the month as YYYY-MM, nights if known, and their email. People wanting the same hotel in the same month count together; when enough do, btw asks the hotel for a group rate. Returns how many others want it.

輸入結構描述

{
  "type": "object",
  "properties": {
    "hotel": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "hotel name or a link to it"
    },
    "month": {
      "type": "string",
      "minLength": 6,
      "maxLength": 7,
      "description": "month as YYYY-MM"
    },
    "nights": {
      "description": "nights, if known",
      "type": "integer",
      "minimum": 1,
      "maximum": 60
    },
    "note": {
      "type": "string",
      "maxLength": 200
    },
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email, same as the waitlist"
    }
  },
  "required": [
    "hotel",
    "month",
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢want_home(job, zip, note, email)

Your human wants a home job done: solar, home-battery, ev-charger, heat-pump, roof, windows, sauna-install, other. Takes the job, their five digit zip, an optional note, and their email. Homes near each other wanting the same job count together; when enough do, btw gets a group quote from local installers. Returns how many others nearby want it.

輸入結構描述

{
  "type": "object",
  "properties": {
    "job": {
      "type": "string",
      "enum": [
        "solar",
        "home-battery",
        "ev-charger",
        "heat-pump",
        "roof",
        "windows",
        "sauna-install",
        "other"
      ],
      "description": "the job"
    },
    "zip": {
      "type": "string",
      "minLength": 5,
      "maxLength": 10,
      "description": "five digit US zip"
    },
    "note": {
      "description": "anything the installer should know",
      "type": "string",
      "maxLength": 200
    },
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email, same as the waitlist"
    }
  },
  "required": [
    "job",
    "zip",
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪want_software(product, plan, email)

Your human wants a software subscription at group pricing. Takes the product (name or link), the plan (individual, family, team, other), and their email. Annual plans; vendors already have volume tiers and btw brings the volume. Returns how many others want the same product on the same plan.

輸入結構描述

{
  "type": "object",
  "properties": {
    "product": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "product name or a link to it"
    },
    "plan": {
      "type": "string",
      "enum": [
        "individual",
        "family",
        "team",
        "other"
      ],
      "description": "the plan"
    },
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email, same as the waitlist"
    }
  },
  "required": [
    "product",
    "plan",
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢want_gym(name, zip, plan, email)

Your human wants a membership at a gym or studio near them. Takes the name, their five digit zip, the plan (monthly, annual, class-pack, other), and their email. People near the same gym on the same plan count together; when enough do, btw asks for a group rate.

輸入結構描述

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80,
      "description": "gym or studio name"
    },
    "zip": {
      "type": "string",
      "minLength": 5,
      "maxLength": 10,
      "description": "five digit US zip"
    },
    "plan": {
      "type": "string",
      "enum": [
        "monthly",
        "annual",
        "class-pack",
        "other"
      ],
      "description": "the plan"
    },
    "email": {
      "type": "string",
      "minLength": 3,
      "description": "your human's email, same as the waitlist"
    }
  },
  "required": [
    "name",
    "zip",
    "plan",
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢book_stats

Counts at a glance: live, queued, filled. Use status for the live product.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_chain(id)

One product by slug. Prefer status.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "chain slug"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢join_chain(id, monthly_commit_usd, team_name)

The old v1 join. Use hold instead.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "monthly_commit_usd": {
      "type": "number"
    },
    "team_name": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢park_intent(provider, category, min_discount_pct, monthly_cap_usd, note)

The old v1 park. Use want with a link instead.

輸入結構描述

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string"
    },
    "category": {
      "type": "string"
    },
    "min_discount_pct": {
      "type": "number"
    },
    "monthly_cap_usd": {
      "type": "number"
    },
    "note": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本19 個工具
已驗證未記錄版本19 個工具
已驗證未記錄版本18 個工具