MCP 서버

btw

space.btw/btw
커머스 및 리테일 결제 및 핀테크 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Supports group-buying demand collection, product and service wants, waitlists, spot holds, releases, wishlist syncing, and conditional deposits.

book_stats
Book stats
Counts at a glance: live, queued, filled. Use status for the live product.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
get_chain
Get one chain
One product by slug. Prefer status.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'minLength': 1, 'description': 'chain slug'}}}
hold
Hold a spot
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'ref': {'type': 'string', 'maxLength': 16, 'description': "a referral code from another buyer's link, the r= part"}, 'name': {'type': 'string', 'maxLength': 40, 'description': 'first name and last initial, shown on the product page'}, 'chain': {'type': 'string', 'description': "a product slug; leave it out for what's live"}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email"}, 'invite_code': {'type': 'string', 'description': 'not needed any more'}, 'max_price_usd': {'type': 'number', 'description': 'optional cap on the deposit in dollars'}}}
join
Hold a spot (old name)
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'ref': {'type': 'string', 'maxLength': 16, 'description': "a referral code from another buyer's link, the r= part"}, 'name': {'type': 'string', 'maxLength': 40, 'description': 'first name and last initial, shown on the product page'}, 'chain': {'type': 'string', 'description': "a product slug; leave it out for what's live"}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email"}, 'invite_code': {'type': 'string', 'description': 'not needed any more'}, 'max_price_usd': {'type': 'number', 'description': 'optional cap on the deposit in dollars'}}}
join_chain
Join a chain (old name)
The old v1 join. Use hold instead.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'id': {'type': 'string'}, 'team_name': {'type': 'string'}, 'monthly_commit_usd': {'type': 'number'}}}
leave
Release a spot (old name)
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['chain', 'email', 'commitment_id'], 'properties': {'chain': {'type': 'string', 'minLength': 1, 'description': 'product slug'}, 'email': {'type': 'string', 'minLength': 3}, 'commitment_id': {'type': 'string', 'minLength': 1}}}
list_chains
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
my_agent
My agent
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'email': {'type': 'string', 'minLength': 3, 'description': "your human's email"}}}
park
Park a want
Old style: park what your human wants in plain words with the most they'd pay. Prefer want with a link.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['description', 'max_price_usd'], 'properties': {'email': {'type': 'string', 'description': 'optional, so we can say when a chain opens'}, 'description': {'type': 'string', 'maxLength': 200, 'minLength': 3, 'description': 'what your human wants, plainly'}, 'max_price_usd': {'type': 'number', 'description': "the most they'd pay, in dollars"}}}
park_intent
Park a standing order (old name)
The old v1 park. Use want with a link instead.
읽기 전용
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'note': {'type': 'string'}, 'category': {'type': 'string'}, 'provider': {'type': 'string'}, 'monthly_cap_usd': {'type': 'number'}, 'min_discount_pct': {'type': 'number'}}}
release
Release a spot
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['chain', 'email', 'commitment_id'], 'properties': {'chain': {'type': 'string', 'minLength': 1, 'description': 'product slug'}, 'email': {'type': 'string', 'minLength': 3}, 'commitment_id': {'type': 'string', 'minLength': 1}}}
status
Chain status
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'chain': {'type': 'string', 'description': "a product slug; leave it out for what's live"}, 'email': {'type': 'string', 'description': "check this person's spot"}}}
sync_wishlist
Import a wishlist
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'url': {'type': 'string', 'maxLength': 2000, 'description': "the list link. Amazon: open the list, tap Share, copy the link. Steam: the profile's wishlist page"}, 'asins': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20}, 'maxItems': 100, 'description': 'ASINs you read off the list yourself, up to 100'}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email, same as the waitlist"}}}
waitlist
Join the waitlist
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'want': {'type': 'string', 'maxLength': 200, 'description': 'what your human wants to buy, plainly'}, 'email': {'type': 'string', 'description': "your human's email"}, 'platform': {'type': 'string', 'maxLength': 40, 'description': 'your agent platform, like claude, grok, chatgpt, other'}, 'referral': {'type': 'string', 'maxLength': 120, 'description': "a friend's referral code or link, if you came through one"}}}
want
Add to my agent
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'job': {'type': 'string', 'maxLength': 40, 'description': 'home: solar, home-battery, ev-charger, heat-pump, roof, windows, sauna-install, other'}, 'url': {'type': 'string', 'maxLength': 2000, 'description': 'a product, hotel, or subscription link'}, 'zip': {'type': 'string', 'maxLength': 10, 'description': 'home: five digit US zip'}, 'asin': {'type': 'string', 'maxLength': 20, 'description': 'an Amazon ASIN, 10 letters and digits'}, 'name': {'type': 'string', 'maxLength': 80, 'description': 'gym: the gym or studio name'}, 'note': {'type': 'string', 'maxLength': 200, 'description': 'home or stay: a short note'}, 'plan': {'type': 'string', 'maxLength': 20, 'description': 'software: individual, family, team, other'}, 'type': {'enum': ['gear', 'stay', 'home', 'software', 'gym'], 'type': 'string', 'description': 'skip auto-detection and say the type'}, 'asins': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20}, 'maxItems': 100, 'description': 'ASINs you read off a page yourself, up to 100'}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email, same as the waitlist"}, 'hotel': {'type': 'string', 'maxLength': 200, 'description': 'stay: hotel name or link'}, 'month': {'type': 'string', 'maxLength': 7, 'description': 'stay: month as YYYY-MM'}, 'nights': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'stay: nights, if known'}, 'product': {'type': 'string', 'maxLength': 200, 'description': 'software: product name or link'}}}
want_gym
Want a gym or studio membership
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'zip', 'plan', 'email'], 'properties': {'zip': {'type': 'string', 'maxLength': 10, 'minLength': 5, 'description': 'five digit US zip'}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': 'gym or studio name'}, 'plan': {'enum': ['monthly', 'annual', 'class-pack', 'other'], 'type': 'string', 'description': 'the plan'}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email, same as the waitlist"}}}
want_home
Want a home job
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job', 'zip', 'email'], 'properties': {'job': {'enum': ['solar', 'home-battery', 'ev-charger', 'heat-pump', 'roof', 'windows', 'sauna-install', 'other'], 'type': 'string', 'description': 'the job'}, 'zip': {'type': 'string', 'maxLength': 10, 'minLength': 5, 'description': 'five digit US zip'}, 'note': {'type': 'string', 'maxLength': 200, 'description': 'anything the installer should know'}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email, same as the waitlist"}}}
want_software
Want a subscription
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['product', 'plan', 'email'], 'properties': {'plan': {'enum': ['individual', 'family', 'team', 'other'], 'type': 'string', 'description': 'the plan'}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email, same as the waitlist"}, 'product': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'product name or a link to it'}}}
want_stay
Want a stay
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', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['hotel', 'month', 'email'], 'properties': {'note': {'type': 'string', 'maxLength': 200}, 'email': {'type': 'string', 'minLength': 3, 'description': "your human's email, same as the waitlist"}, 'hotel': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'hotel name or a link to it'}, 'month': {'type': 'string', 'maxLength': 7, 'minLength': 6, 'description': 'month as YYYY-MM'}, 'nights': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'nights, if known'}}}
변경됨
sync_wishlist
2026년 9월 27일 2:50 AM
변경됨
want
2026년 9월 27일 2:50 AM
추가됨
my_agent
2026년 9월 27일 2:50 AM
변경됨
park_intent
2026년 9월 19일 2:48 AM
변경됨
join_chain
2026년 9월 19일 2:48 AM
변경됨
get_chain
2026년 9월 19일 2:48 AM
변경됨
book_stats
2026년 9월 19일 2:48 AM
변경됨
park
2026년 9월 19일 2:48 AM
변경됨
leave
2026년 9월 19일 2:48 AM
추가됨
release
2026년 9월 19일 2:48 AM
변경됨
status
2026년 9월 19일 2:48 AM
변경됨
join
2026년 9월 19일 2:48 AM
추가됨
hold
2026년 9월 19일 2:48 AM
변경됨
list_chains
2026년 9월 19일 2:48 AM
변경됨
waitlist
2026년 9월 19일 2:48 AM
추가됨
park_intent
2026년 9월 17일 12:55 PM
추가됨
join_chain
2026년 9월 17일 12:55 PM
추가됨
get_chain
2026년 9월 17일 12:55 PM
추가됨
book_stats
2026년 9월 17일 12:55 PM
추가됨
want_gym
2026년 9월 17일 12:55 PM
추가됨
want_software
2026년 9월 17일 12:55 PM
추가됨
want_home
2026년 9월 17일 12:55 PM
추가됨
want_stay
2026년 9월 17일 12:55 PM
추가됨
sync_wishlist
2026년 9월 17일 12:55 PM
추가됨
want
2026년 9월 17일 12:55 PM
추가됨
park
2026년 9월 17일 12:55 PM
추가됨
leave
2026년 9월 17일 12:55 PM
추가됨
status
2026년 9월 17일 12:55 PM
추가됨
join
2026년 9월 17일 12:55 PM
추가됨
list_chains
2026년 9월 17일 12:55 PM