Kadro Mcp Server

io.github.amvalehPublished by GitHub account amvalehv1.0.1Updated Oct 24, 2026

Search and book real photographers on Kadro (Iran) on a user's behalf, ending with a payment link.

VerifiedStreamable HTTPWeb executableLocation & LifestyleBusiness & Commerce

Overview

AI-generated overview

Lets an assistant search Kadro's Iranian photographers and packages and place a guest booking hold, ending with a payment link for the user.

What you can do
  • List Kadro shoot types with their numeric ids
  • Find bookable photographers by shoot type and optional city, with rating, reviews and uid
  • List a photographer's real packages and prices in Toman for a given shoot type
  • Create a guest reservation hold for a package, date/time and address
  • Return a payment link for the user to verify their phone and pay
  • Check reservation status (awaiting payment, expired, paid awaiting confirmation, confirmed, rejected)
When to use it
Useful when a user wants to find and book a photographer in Iran through Kadro, compare packages and prices, or check whether an existing reservation has been paid or confirmed.
Requirements
The manifest lists a remote streamable HTTP endpoint with no declared authentication. The README describes a self-hosted Node.js process needing npm install, a KADRO_API_TOKEN obtained via a self-service registration script, and a port (default 3100) with an MCP endpoint at POST /mcp; Docker is also supported.
Before you install
create_reservation places a real 15-minute hold on a photographer's calendar on the user's behalf without login, so confirm details before calling it. The server never takes card numbers, OTP codes or passwords; the user must open the payment link themselves. Paid status is not the same as confirmed by the photographer. Self-hosted tokens are capped at 5 requests per day by default.

Installation

In SourceWeft

  1. Open Kadro Mcp Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.amvaleh%2Fkadro-mcp-server/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "kadro": {
      "type": "http",
      "url": "https://www.shootempire.com/kadro-mcp-relay/mcp"
    }
  }
}

README

kadro-mcp-server

[M8ven Score]

An MCP (Model Context Protocol) server that lets AI assistants search Kadro photographers/packages and book a guest reservation on a user's behalf, ending with a payment link — the assistant never touches payment or login itself. It's a thin wrapper around Kadro's Api::Agent::V1 REST API (see the Main-Rails repo, app/controllers/api/agent/v1/).

Tools

  • search_shoot_types — list service types and their ids.
  • search_photographers — find photographers for a shoot_type_id (+ optional city_id).
  • get_photographer_packages — a photographer's real packages and prices.
  • create_reservation — place a 15-minute guest hold. No payment involved.
  • get_payment_link — a URL for the human to open themselves to verify their phone and pay. This is the boundary: no tool here ever asks for or handles card details, OTP codes, or passwords.
  • get_reservation_status — check payment/confirmation status. Paid is not the same as confirmed — see the tool description.

Setup

bash
npm installcp .env.example .envnpm run register -- "your-platform-name" "[email protected]"   # prints a token# paste the printed KADRO_API_TOKEN into .envnpm run buildnpm start   # listens on :3100 (or $PORT), MCP endpoint is POST /mcp

The registration is self-service and instant, capped at a daily_limit of 5 requests/day by default (see ApiPartner in Main-Rails). Email Kadro to request a higher limit for this server's token once it's actually deployed.

Running with Docker

bash
docker build -t kadro-mcp-server .docker run -p 3100:3100 --env-file .env kadro-mcp-server

Deploying on the same server as the Rails app

This is a separate Node process from the Rails app — it does not go through Capistrano. A reasonable setup, matching this server's existing Docker usage for other services (gitlab, typesense):

  1. Build and run the Docker image above on the server (or run npm run build && npm start under a process manager like systemd or pm2).

  2. Point a path or subdomain at it through whatever already terminates TLS for kadro.co (nginx, based on the existing setup). Example nginx snippet — adjust to match the real server-block layout, this repo has no visibility into it:

    nginx
    location /mcp {  proxy_pass http://127.0.0.1:3100/mcp;  proxy_set_header Host $host;  proxy_http_version 1.1;  proxy_set_header Connection "";}
  3. The public MCP endpoint ends up at something like https://www.kadro.co/mcp or https://mcp.kadro.co/mcp — whichever this repo's operator prefers. Put that URL in public/llms.txt (Main-Rails) once it's live, alongside the plain REST API section already there.

Verifying it's alive

bash
curl https://<wherever-it's-deployed>/healthz   # -> ok

Source: README.md at commit fece373

Tools

6

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.

Takes no parameters.

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.

Parameterscity_idshoot_type_idrequired

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.

Parametersshoot_type_idrequiredphotographer_uidrequired

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.

Parameterscity_idrequiredpackage_idrequiredstart_timerequiredshoot_detailshoot_type_idrequiredaddress_detailrequiredidempotency_keyaddress_latituderequiredphotographer_uidrequiredaddress_longituderequiredguest_display_name

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'.

Parametersslugrequired

Version history

2
  1. v1.0.1LatestSep 26, 2026
  2. v1.0.0Sep 25, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts