Skip to main content
Glama
amvaleh

Kadro MCP server

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.

Related MCP server: Multi-Domain Booking MCP Server

Setup

npm install
cp .env.example .env
npm run register -- "your-platform-name" "you@example.com"   # prints a token
# paste the printed KADRO_API_TOKEN into .env
npm run build
npm 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

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:

    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

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Book a table, an appointment or a place in a class at a real local business. Live availability, instant confirmation, no account and no API key. Eight tools: search, fetch, get_business, check_availability, create_booking, check_booking, cancel_booking and request_listing. Guest emails in eight languages. Hosted at https://g-guest.app/api/mcp
    8
    14 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents and clients to check table availability and book restaurant reservations for a given date, time, and party size, returning either a confirmed booking or the nearest alternative slots. It also supports idempotent retries so replayed requests return the original reservation rather than double-booking a table.
    -