MCP 서버

ibo

io.github.41fred/ibo
커머스 및 리테일 미디어 및 콘텐츠 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Presents cinematic AI campaign production packages, collects creative briefs and assets, and handles deposit checkout and order status.

create_checkout
Create a deposit checkout
Create a Stripe Checkout for a package's 50% deposit. Returns checkout_url, stripe_session_id, and amount_due. Show the amount to your user and open checkout_url for THEM to approve and pay; agents never complete payment themselves. Prices are fixed server-side. Pass a stable client_request_id so retries do not create duplicate checkouts.
외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['package', 'client_request_id'], 'properties': {'package': {'enum': ['film', 'film4k', 'series'], 'type': 'string', 'description': 'Offer id from list_offers'}, 'client_request_id': {'type': 'string', 'description': 'Stable id you generate; makes creation idempotent on retry'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'currency': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'amount_due': {'type': 'number'}, 'checkout_url': {'type': 'string'}, 'stripe_session_id': {'type': 'string'}}, 'additionalProperties': False}
create_upload_url
Get a presigned asset-upload URL
Get a short-lived presigned URL to upload one brand-asset file to IBO's private storage. Requires order_token from get_order; the storage location is bound to the order server-side. PUT the raw file bytes to url, then reference key in submit_brief files[]. Allowed: jpg png webp pdf svg mp4 mov zip ai psd; 250MB/file, 1GB per order.
외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['filename', 'size', 'order_token'], 'properties': {'size': {'type': 'number', 'description': 'File size in bytes'}, 'filename': {'type': 'string'}, 'order_token': {'type': 'string', 'description': 'From get_order'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'key': {'type': 'string'}, 'url': {'type': 'string'}, 'error': {'type': 'string'}}, 'additionalProperties': False}
get_inquiry_status
Check status of a custom production inquiry
Where a custom inquiry stands: awaiting_confirmation (customer hasn't clicked the emailed link yet) or confirmed with the studio stage (new, replied, proposal_sent, won, closed). PII-free; pass the inquiry_id returned by submit_custom_inquiry.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['inquiry_id'], 'properties': {'inquiry_id': {'type': 'string', 'description': 'From submit_custom_inquiry'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'error': {'type': 'string'}, 'stage': {'type': 'string'}, 'status': {'type': 'string'}, 'updated': {'type': 'string'}}, 'additionalProperties': False}
get_order
Verify an order after checkout
Verify payment after checkout and receive an order-scoped access token. Returns paid, package, deposit, and order_token: use order_token for create_upload_url and submit_brief. Payment status can only be established here, never assumed.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['session_id'], 'properties': {'session_id': {'type': 'string', 'description': 'Stripe checkout session id (cs_...)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'paid': {'type': 'boolean'}, 'total': {'type': 'string'}, 'deposit': {'type': 'number'}, 'package': {'type': 'string'}, 'expires_at': {'type': 'number'}, 'order_token': {'type': 'string'}}, 'additionalProperties': False}
get_project_status
Check production status of a paid order
Where a paid order is in production. Returns the studio stage (new, brief_received, in_production, review, delivered) plus paid/package/deposit. PII-free; pass the stripe_session_id from create_checkout/get_order.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['session_id'], 'properties': {'session_id': {'type': 'string', 'description': 'Stripe checkout session id (cs_...)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'paid': {'type': 'boolean'}, 'stage': {'type': 'string'}, 'total': {'type': 'string'}, 'deposit': {'type': 'number'}, 'package': {'type': 'string'}}, 'additionalProperties': False}
list_offers
List IBO production packages
IBO's production packages: stable ids, prices, 50% deposits, deliverables, review rounds, and the scope/refund policy. Call this first.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'url': {'type': 'string'}, 'offers': {'type': 'array'}, 'studio': {'type': 'string'}, 'currency': {'type': 'string'}, 'policies': {'type': 'object'}, 'how_to_order': {'type': 'array'}}, 'additionalProperties': False}
submit_brief
Submit the creative brief
Submit the creative brief for a PAID order: pass order_token (from get_order; session ids are not accepted here) plus project fields (product, goal, audience, channels, resolution, launch, links, constraints) and files[] from create_upload_url. Delivery resolution must be selected before creative kickoff. Customer identity comes from the verified payment. NOTE: unpaid/anonymous submissions are rejected here; for Custom Production inquiries without payment use the submit_custom_inquiry tool instead.
외부 접근 가능
입력 스키마
{'type': 'object', 'properties': {'goal': {'type': 'string'}, 'name': {'type': 'string'}, 'email': {'type': 'string'}, 'files': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'size'], 'properties': {'key': {'type': 'string'}, 'name': {'type': 'string'}, 'size': {'type': 'number'}}, 'additionalProperties': False}}, 'links': {'type': 'string'}, 'launch': {'type': 'string'}, 'company': {'type': 'string'}, 'package': {'type': 'string'}, 'product': {'type': 'string'}, 'audience': {'type': 'string'}, 'channels': {'type': 'string'}, 'resolution': {'type': 'string', 'description': 'Final master resolution selected before creative kickoff'}, 'constraints': {'type': 'string'}, 'order_token': {'type': 'string', 'description': 'From get_order'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}}, 'additionalProperties': False}
submit_custom_inquiry
Submit a custom production inquiry (no payment)
Start a Custom Production conversation without payment. IMPORTANT: interview your user for the real project details FIRST (what they are promoting, audience, formats, delivery resolution, timing); placeholder inquiries are rejected. A 4K Campaign Series must use this route before checkout. Submits a scope inquiry; IBO then emails the customer a one-click confirmation link (double opt-in), and only a confirmed inquiry reaches the studio. Tell your user to check their inbox and click confirm. IBO replies with scope and proposal within one business day of confirmation.
외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['name', 'email', 'goal'], 'properties': {'goal': {'type': 'string', 'description': 'What they want to make and why, in real detail (30+ chars; placeholders rejected)'}, 'name': {'type': 'string'}, 'email': {'type': 'string', 'description': "Customer's real email; the confirmation link goes here"}, 'links': {'type': 'string'}, 'notes': {'type': 'string'}, 'launch': {'type': 'string'}, 'company': {'type': 'string'}, 'product': {'type': 'string'}, 'audience': {'type': 'string'}, 'channels': {'type': 'string'}, 'resolution': {'type': 'string', 'description': 'Required production target: 1080p, 4K mastered, or not applicable for still images'}, 'constraints': {'type': 'string'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'status': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}
추가됨
get_inquiry_status
2026년 9월 17일 12:40 PM
추가됨
get_project_status
2026년 9월 17일 12:40 PM
추가됨
submit_custom_inquiry
2026년 9월 17일 12:40 PM
추가됨
create_upload_url
2026년 9월 17일 12:40 PM
추가됨
submit_brief
2026년 9월 17일 12:40 PM
추가됨
get_order
2026년 9월 17일 12:40 PM
추가됨
create_checkout
2026년 9월 17일 12:40 PM
추가됨
list_offers
2026년 9월 17일 12:40 PM