MCP Server

kadro-mcp-server

io.github.amvaleh/kadro-mcp-server
Commerce & Retail Media & Content Public & reachable MCP 2025-11-25

What this MCP does

Searches and books photographers in Iran, provides package pricing and reservation status, and generates a payment link for the user to complete payment.

create_reservation
Create a guest photographer reservation
Book a specific photographer for a specific package, date/time, and address on the user's behalf — no login required. This only places a 15-minute hold; it does NOT charge any money and does NOT require or accept any payment information. Immediately follow this with get_payment_link and give that URL to the human — they open it themselves to verify their phone number and pay. start_time must be an ISO 8601 timestamp at least 6 hours in the future. Pass a stable idempotency_key if you might retry this call, so a retry can't create a second reservation.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shoot_type_id', 'package_id', 'city_id', 'photographer_uid', 'start_time', 'address_latitude', 'address_longitude', 'address_detail'], 'properties': {'city_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'package_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'start_time': {'type': 'string', 'description': 'ISO 8601 timestamp, at least 6 hours from now.'}, 'shoot_detail': {'type': 'string', 'description': 'Free-text notes about the shoot for the photographer.'}, 'shoot_type_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'address_detail': {'type': 'string', 'description': 'Human-readable address text for the shoot location.'}, 'idempotency_key': {'type': 'string', 'description': 'A key you generate to make retries safe. Reuse it only when retrying the exact same request.'}, 'address_latitude': {'type': 'number'}, 'photographer_uid': {'type': 'string'}, 'address_longitude': {'type': 'number'}, 'guest_display_name': {'type': 'string', 'description': "The customer's name, if known."}}}
get_payment_link
Get the payment link for a reservation
Get a URL for the human to open in their own browser to finish this reservation: verify their phone number by SMS code and pay. This is the last step this server ever takes — never ask the user for a card number, OTP code, or password, and never try to open, submit, or complete this URL yourself. Just hand the URL to the user.
Read only Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The slug returned by create_reservation.'}}}
get_photographer_packages
Get a photographer's packages and prices
List the real, currently bookable packages (with prices, in Toman) a specific photographer offers for a given shoot_type_id. Rejects the shoot_type_id if that photographer doesn't actually offer it. Use the returned package id with create_reservation.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['photographer_uid', 'shoot_type_id'], 'properties': {'shoot_type_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'photographer_uid': {'type': 'string', 'description': 'A photographer uid from search_photographers.'}}}
get_reservation_status
Check a reservation's status
Check whether a reservation has been paid and confirmed. IMPORTANT: status values are 'awaiting_payment', 'expired', 'paid_awaiting_photographer_confirmation', 'confirmed', and 'rejected'. 'paid_awaiting_photographer_confirmation' means the customer paid but the photographer has not yet accepted the booking and could still decline or ask to reschedule — do not tell the user their booking is final until status is exactly 'confirmed'.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The slug returned by create_reservation.'}}}
search_photographers
Search Kadro photographers
Find real, bookable photographers for a given shoot_type_id (from search_shoot_types), optionally narrowed to a city_id. Returns each photographer's uid (needed for every later call), display name, rating, review count, and city.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shoot_type_id'], 'properties': {'city_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Optional Kadro city id to narrow the search.'}, 'shoot_type_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'A shoot_type_id from search_shoot_types.'}}}
search_shoot_types
Search Kadro shoot types
List the photography/videography service types Kadro offers (e.g. wedding, industrial, portrait), each with a numeric shoot_type_id. Call this first if you don't already know the id for the kind of shoot the user wants.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Changed
get_reservation_status
Sept. 28, 2026, 2:40 a.m.
Changed
get_payment_link
Sept. 28, 2026, 2:40 a.m.
Changed
create_reservation
Sept. 28, 2026, 2:40 a.m.
Changed
get_photographer_packages
Sept. 28, 2026, 2:40 a.m.
Changed
search_photographers
Sept. 28, 2026, 2:40 a.m.
Changed
search_shoot_types
Sept. 28, 2026, 2:40 a.m.
Added
get_reservation_status
Sept. 26, 2026, 2:40 a.m.
Added
get_payment_link
Sept. 26, 2026, 2:40 a.m.
Added
create_reservation
Sept. 26, 2026, 2:40 a.m.
Added
get_photographer_packages
Sept. 26, 2026, 2:40 a.m.
Added
search_photographers
Sept. 26, 2026, 2:40 a.m.
Added
search_shoot_types
Sept. 26, 2026, 2:40 a.m.