kadro-mcp-server
Server Details
Search and book real photographers on Kadro (Iran) on a user's behalf, ending with a payment link.
- Status
- Healthy
- Uptime
- 97.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- amvaleh/kadro-mcp-server
- GitHub Stars
- 0
- Server Listing
- Kadro MCP server
TDQS
Scored across 6 tools
Each tool maps to a single, distinct step in the booking flow: search shoot types, search photographers, list packages, create reservation, get payment link, and check status. There is no meaningful overlap between tools, and the workflow dependencies make selection unambiguous.
All tool names follow a consistent lowercase snake_case verb_noun pattern: search_, get_, and create_. The verbs accurately describe the action and the nouns identify the target, making the API predictable.
Six tools is well-scoped for a booking-focused MCP server. Each tool earns its place in the user journey from discovery to payment and status checking, with no redundant or extraneous surface area.
The core booking lifecycle is fully covered: discover, select, reserve, pay, and check status. The only minor gaps are post-booking operations like cancellation or rescheduling, but these are likely outside the intended agent scope.
Available Tools
6 toolscreate_reservationCreate a guest photographer reservationAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city_id | Yes | ||
| package_id | Yes | ||
| start_time | Yes | ISO 8601 timestamp, at least 6 hours from now. | |
| shoot_detail | No | Free-text notes about the shoot for the photographer. | |
| shoot_type_id | Yes | ||
| address_detail | Yes | Human-readable address text for the shoot location. | |
| idempotency_key | No | A key you generate to make retries safe. Reuse it only when retrying the exact same request. | |
| address_latitude | Yes | ||
| photographer_uid | Yes | ||
| address_longitude | Yes | ||
| guest_display_name | No | The customer's name, if known. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation (readOnlyHint=false) and non-idempotency, but the description adds critical behavioral details beyond those: it places a 15-minute hold, charges nothing, requires no payment info, and mandates a follow-up payment step. It also discloses the authentication requirement (no login) and the idempotency safeguard. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying essential information: the core action and scope, the non-charging hold behavior and required follow-up, and the key constraints. Front-loaded with the purpose, then critical caveats. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters and no output schema, the description covers the critical flow, constraints, and next steps. It does not explain what the ID parameters refer to, but sibling tools (search_shoot_types, get_photographer_packages, search_photographers) clearly supply them, so an agent can infer the workflow. The return value is not described, but that is a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 45%, covering start_time, idempotency_key, address_detail, shoot_detail, and guest_display_name. The description reinforces start_time's 6-hour constraint and idempotency_key's purpose, which are already in the schema, so it adds little new meaning. The many un-described IDs (city_id, package_id, shoot_type_id, photographer_uid) are not explained in the description, though their purpose is inferable from sibling tool names. The description does not compensate for the missing 55% of schema parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Book a specific photographer for a specific package, date/time, and address on the user's behalf.' It uses a specific verb and resource, and distinguishes itself from sibling tools by being the only creation tool. The mention of the immediate next step (get_payment_link) further clarifies its role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: it's the tool to create a reservation, it requires no login, and it explicitly instructs to follow with get_payment_link. It also sets constraints (start_time at least 6 hours out, use idempotency_key for retries) which are actionable conditions. It does not list when-not-to-use alternatives, but the flow is so specific that an agent knows when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_linkGet the payment link for a reservationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug returned by create_reservation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavior beyond the annotations: the link is meant for the human, not the agent, and the server should never complete the payment flow. This aligns with readOnlyHint and adds human-in-the-loop context. It does not describe the response shape, but that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences carry the purpose, usage boundaries, and safety warnings with no filler. The key action and constraints are front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only retrieval tool, the description covers purpose, usage, and behavioral expectations completely. The schema fully documents the parameter, and the description tells the agent exactly what to do with the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the slug parameter is already well documented in the schema as 'The slug returned by create_reservation.' The description adds no additional parameter meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a URL for the human to open in their own browser.' It then states the exact purpose, finishing a reservation via phone verification and payment, making it clearly distinct from siblings like get_reservation_status or create_reservation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context by calling this 'the last step this server ever takes' and explicitly warns against asking for card/OTP data or opening/submitting the URL. It does not explicitly name alternative tools, but the behavioral guardrails make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_photographer_packagesGet a photographer's packages and pricesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| shoot_type_id | Yes | ||
| photographer_uid | Yes | A photographer uid from search_photographers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: it emphasizes that packages are 'real, currently bookable' and that an invalid shoot_type_id is rejected for that photographer. This gives an agent a sense of validation behavior and real-world availability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and resource, then the key behavioral note and a practical next step. No filler or repeated schema content. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with no output schema, the description conveys what is returned (packages with prices in Toman), how invalid input behaves, and how to use the result. It could mention where to obtain a valid shoot_type_id or describe the package output shape more fully, but it is adequate for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate. It clarifies that shoot_type_id filters packages and that photographer_uid identifies the photographer, but it does not say where shoot_type_id comes from or add much detail beyond the schema. It does mention the returned package id, which is useful for follow-up, but the parameter-level guidance remains incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly names the resource: currently bookable packages with prices in Toman for a specific photographer and shoot_type_id. It also distinguishes the tool from siblings like create_reservation by framing it as a read-only lookup that returns package ids for later use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use this tool: when you need a photographer's bookable packages for a shoot type. It also gives a concrete next step ('Use the returned package id with create_reservation'), which helps an agent chain the call correctly. It does not explicitly state alternatives or exclusion cases, but the sibling set and read-only framing make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reservation_statusCheck a reservation's statusARead-onlyIdempotentInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug returned by create_reservation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description goes further by defining each status value and warning that only 'confirmed' means the booking is final. This is exactly the behavioral nuance an agent needs to avoid misleading a user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then uses an 'IMPORTANT' section to convey the critical status interpretation. Every sentence carries essential information and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with no output schema, the description provides the full status vocabulary and the practical consequence of each status. This is sufficient for an agent to invoke the tool and interpret its result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'slug' parameter, and the schema already explains that it is the slug returned by create_reservation. The description adds no parameter-specific detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('check'), resource ('reservation'), and intended question ('whether paid and confirmed'), and enumerates the exact status values. This clearly differentiates it from the create and payment-link siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening sentence gives clear context for when to use the tool: after creating a reservation, to check payment and confirmation state. It does not explicitly name alternatives or exclusions, but the purpose is unambiguous enough that an agent can select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_photographersSearch Kadro photographersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city_id | No | Optional Kadro city id to narrow the search. | |
| shoot_type_id | Yes | A shoot_type_id from search_shoot_types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds useful context beyond the annotations: photographers are 'real, bookable,' and the returned uid is required for downstream calls. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first sentence fronts the purpose and filters, the second delivers the return contract and workflow dependency. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description correctly explains the return format, including uid, display name, rating, review count, and city. It also covers the input prerequisite and downstream dependency on uid, making it complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already have clear descriptions. The description restates the same parameter concepts ('from search_shoot_types', 'optionally narrowed to a city_id') without adding new parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find real, bookable photographers for a given shoot_type_id.' It also states the optional city filter and the returned identity fields, which clearly distinguish it from search_shoot_types and get_photographer_packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from search_shoot_types' establishes the prerequisite input source, and 'uid (needed for every later call)' places this tool early in the workflow. It gives clear context for when to use it, though it does not explicitly name alternative tools or list when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_shoot_typesSearch Kadro shoot typesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context beyond the schema by stating the returned items carry a numeric shoot_type_id, and frames the call as a prerequisite lookup rather than a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the main action and resource in the first sentence and a usage directive in the second. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only lookup with complete annotations, the description provides enough information to invoke it correctly: what it returns, in what form, and when to call it. No output schema is required because the return contract is clearly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema declares zero parameters, so there is nothing to document and the baseline of 4 applies. Any possible ambiguity is reduced by the description clarifying that the relevant identifier is shoot_type_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the concrete verb 'List' followed by a specific resource ('photography/videography service types Kadro offers'), with examples and the key output field. It is unambiguous what the tool does and it can be distinguished from the other search/lookup siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit condition and ordering: call first when the shoot_type_id is unknown. It does not explicitly name sibling alternatives or state when not to use it, so it falls just short of a top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- First observed
create_reservation - First observed
get_payment_link - First observed
get_photographer_packages - First observed
get_reservation_status - First observed
search_photographers - First observed
search_shoot_types
Related MCP Connectors
- LimurseOAuthai.limurse
Find, vet and budget bookable influencers, photographers and videographers for brand campaigns.
Find and book real people by skill, city and availability: doctors, developers, plumbers and more.
Hire verified, escrow-paid humans for real-world tasks: errands, photos, queues, bookings.
- actuatorOAuthcom.actuato
Hire vetted local people for real-world jobs: post, rank, hire, pay in escrow, verify with photos.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to compare and find the cheapest domestic and international flights, hotels, villas, trains and buses in Iran, with exact Toman prices, fare and cancellation rules, baggage details, seats left and hotel reviews. Also covers CIP lounges, eSIM plans, visas and tours, and is read-only, so it never books, holds seats or pays.1MIT
- AlicenseAqualityAmaintenanceEnables AI agents to search a catalog of roughly 960,000 fashion products across about 10,000 Iranian online and Instagram shops, comparing prices and discounts, checking per-color and per-size stock, browsing categories and curated listings, and finding similar items at other shops. It also lets agents assess shop trust signals such as ratings and buyer surveys, surface flash sales and discount codes, and read blog style guides, all read-only with no login or ordering.142MIT
- AlicenseNot gradedqualityAmaintenanceEnables searching and comparing product prices, sellers, and price history from Torob, Iran's price-comparison engine, including shop trust signals and physical store availability.1MIT
- AlicenseAqualityBmaintenanceEnables AI clients to search and browse Sheypoor classifieds, fetch product details, and manage account features such as bookmarks, chats, and login.212MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.