Koskamo

Kratons MCP

An official MCP server operated by Kratons, a boutique destination management company. It allows AI agents to retrieve company facts, list destinations, search for experiences, view sample itineraries, read traveler reviews, and submit structured proposal requests for tailor-made trips in Spain, Portugal, and Morocco.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Kratons MCP logo, by KratonsVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Kratons
MCP endpoint (Streamable HTTP)
https://api.kratons.com/api/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

8 of 8 have a description · 8 of 8 declare behavior hints · 4 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to kratons.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Retrieve company facts and operational details
  • List available destinations and search experiences
  • View sample itineraries and traveler reviews
  • Submit structured proposal requests for custom trips

Source and maintenance

Vendor evidenceRegistry 1.1.0

Protocol and capabilities

Server
kratons-public 2.0.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
3 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Tools

8 advertised

get_company_facts — Kratons company facts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Who Kratons is: legal identity, address, contact channels, countries served, languages, services, pricing policy and how to request a proposal. Read-only.

get_company_facts input schema
{
  "type": "object",
  "properties": {}
}
get_company_facts output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "brand",
    "legalName",
    "taxId",
    "iata",
    "foundedYear",
    "basedIn",
    "description",
    "address",
    "contact",
    "web",
    "areaServed",
    "languages",
    "services",
    "positioning",
    "pricingPolicy",
    "proposalRequest",
    "agentStatement",
    "api"
  ],
  "properties": {
    "api": {
      "type": "object",
      "required": [
        "baseUrl",
        "endpoints",
        "mcpPath"
      ],
      "properties": {
        "baseUrl": {
          "type": "string"
        },
        "mcpPath": {
          "type": "string"
        },
        "endpoints": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "path",
              "title",
              "description",
              "contentType"
            ],
            "properties": {
              "path": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "method": {
                "enum": [
                  "GET",
                  "POST"
                ],
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "web": {
      "type": "object",
      "required": [
        "home",
        "homeEs",
        "logo",
        "sameAs",
        "pages"
      ],
      "properties": {
        "home": {
          "type": "string"
        },
        "logo": {
          "type": "string"
        },
        "pages": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "key",
              "title",
              "url",
              "description"
            ],
            "properties": {
              "key": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "homeEs": {
          "type": "string"
        },
        "sameAs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": true
    },
    "iata": {
      "type": "string",
      "description": "IATA accreditation number"
    },
    "brand": {
      "type": "string"
    },
    "taxId": {
      "type": "string",
      "description": "Spanish NIF / CIF"
    },
    "address": {
      "type": "object",
      "required": [
        "lines",
        "streetAddress",
        "postalCode",
        "locality",
        "region",
        "countryName",
        "countryCode"
      ],
      "properties": {
        "lines": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "region": {
          "type": "string"
        },
        "locality": {
          "type": "string"
        },
        "postalCode": {
          "type": "string"
        },
        "countryCode": {
          "type": "string"
        },
        "countryName": {
          "type": "string"
        },
        "streetAddress": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "basedIn": {
      "type": "string"
    },
    "contact": {
      "type": "object",
      "required": [
        "email",
        "phones",
        "channels"
      ],
      "properties": {
        "email": {
          "type": "string"
        },
        "phones": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "number",
              "e164",
              "country"
            ],
            "properties": {
              "e164": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "number": {
                "type": "string"
              },
              "country": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "channels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": true
    },
    "services": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "code"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "legalName": {
      "type": "string"
    },
    "areaServed": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "code"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "description": {
      "type": "object",
      "required": [
        "short",
        "long"
      ],
      "properties": {
        "long": {
          "type": "string"
        },
        "short": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "foundedYear": {
      "type": "integer"
    },
    "positioning": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "pricingPolicy": {
      "type": "object",
      "required": [
        "summary",
        "rules"
      ],
      "properties": {
        "rules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "summary": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "agentStatement": {
      "type": "string"
    },
    "proposalRequest": {
      "type": "object",
      "required": [
        "how",
        "checklist",
        "afterwards"
      ],
      "properties": {
        "how": {
          "type": "string"
        },
        "checklist": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "afterwards": {
          "type": "string"
        }
      },
      "additionalProperties": true
    }
  },
  "additionalProperties": true
}
get_company_facts annotations
{
  "title": "Kratons company facts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
list_destinations — Destinations with experiences
Advertised by the server during the last successful anonymous check.
Advertised read-only

Countries and cities where Kratons currently offers tours or tickets, with counts. Read-only.

list_destinations input schema
{
  "type": "object",
  "properties": {}
}
list_destinations output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "countries",
    "generatedAt"
  ],
  "properties": {
    "countries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "country",
          "experienceCount",
          "cities"
        ],
        "properties": {
          "cities": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "city",
                "experienceCount"
              ],
              "properties": {
                "city": {
                  "type": "string"
                },
                "experienceCount": {
                  "type": "integer"
                }
              },
              "additionalProperties": false
            }
          },
          "country": {
            "type": "string"
          },
          "experienceCount": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      }
    },
    "generatedAt": {
      "type": "string",
      "description": "ISO timestamp of the underlying query (cached for an hour)"
    }
  },
  "additionalProperties": false
}
list_destinations annotations
{
  "title": "Destinations with experiences",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
search_experiences — Search experiences
Advertised by the server during the last successful anonymous check.
Advertised read-only

Tours and tickets Kratons operates, filtered by country, city and free text. Returns { experiences: [...] } with name, type, city, country, category, duration, free-cancellation flag and a summary — never prices or suppliers (Kratons quotes one package price per trip).

search_experiences input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Free-text search on name, description and tags"
    },
    "city": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "City name, e.g. Madrid, Lisbon, Marrakech"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Max results (default 20, max 50)"
    },
    "country": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Country name, e.g. Spain, Portugal, Morocco"
    }
  },
  "additionalProperties": false
}
search_experiences output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "experiences"
  ],
  "properties": {
    "experiences": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "type",
          "city",
          "country",
          "category",
          "durationMinutes",
          "freeCancellation",
          "summary"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "Tour",
              "Ticket"
            ],
            "type": "string"
          },
          "country": {
            "$ref": "#/properties/experiences/items/properties/city"
          },
          "summary": {
            "type": "string"
          },
          "category": {
            "anyOf": [
              {
                "enum": [
                  "private",
                  "small_group",
                  "group"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "durationMinutes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "freeCancellation": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "description": "Never prices or suppliers — one package price per trip, quoted by a human"
    }
  },
  "additionalProperties": false
}
search_experiences annotations
{
  "title": "Search experiences",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
list_sample_itineraries — Sample itineraries
Advertised by the server during the last successful anonymous check.
Advertised read-only

Published sample itineraries Kratons operates, as { itineraries: [...] } (name, destination, duration, category, summary, day-by-day outline) to start a conversation from. Never prices or suppliers — every trip is quoted as one package price by a human advisor.

list_sample_itineraries input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Free text on name, summary and tags"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Max results (default 20, max 50)"
    },
    "country": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Destination filter, e.g. Portugal, Andalusia"
    }
  },
  "additionalProperties": false
}
list_sample_itineraries output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "itineraries"
  ],
  "properties": {
    "itineraries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "destination",
          "durationDays",
          "category",
          "tags",
          "summary",
          "days",
          "pricing"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "days": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "day",
                "items"
              ],
              "properties": {
                "day": {
                  "type": "integer",
                  "description": "1-based day number"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "kind",
                      "label"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          },
          "name": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pricing": {
            "type": "string",
            "description": "The pricing note: one package price per trip, no public price list"
          },
          "summary": {
            "$ref": "#/properties/itineraries/items/properties/destination"
          },
          "category": {
            "type": "string"
          },
          "destination": {
            "type": [
              "string",
              "null"
            ]
          },
          "durationDays": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_sample_itineraries annotations
{
  "title": "Sample itineraries",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_reviews — Traveller reviews
Advertised by the server during the last successful anonymous check.
Advertised read-only

Aggregate rating (1–5) and the newest traveller reviews of Kratons from Zicasso and Google, each attributed to the platform that published it, with a link to read them all. A source that cannot be read is listed as unavailable — never invented.

get_reviews input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Newest reviews to return (default 6, max 20)"
    }
  },
  "additionalProperties": false
}
get_reviews output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "ratingValue",
    "bestRating",
    "reviewCount",
    "sources",
    "reviews",
    "note",
    "generatedAt"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "reviews": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "source",
          "reviewer",
          "rating",
          "title",
          "excerpt",
          "date",
          "countries",
          "url"
        ],
        "properties": {
          "url": {
            "$ref": "#/properties/sources/items/properties/url"
          },
          "date": {
            "$ref": "#/properties/sources/items/properties/url"
          },
          "title": {
            "$ref": "#/properties/sources/items/properties/url"
          },
          "rating": {
            "type": "number"
          },
          "source": {
            "enum": [
              "Zicasso",
              "Google"
            ],
            "type": "string"
          },
          "excerpt": {
            "type": "string"
          },
          "reviewer": {
            "type": "string",
            "description": "As published by the platform"
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "source",
          "available",
          "rating",
          "bestRating",
          "reviewCount",
          "url"
        ],
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "error": {
            "type": "string"
          },
          "rating": {
            "type": [
              "number",
              "null"
            ],
            "description": "Average on the 1–5 scale"
          },
          "source": {
            "enum": [
              "Zicasso",
              "Google"
            ],
            "type": "string"
          },
          "available": {
            "type": "boolean",
            "description": "false when the platform could not be read; `error` says why"
          },
          "bestRating": {
            "type": "number",
            "const": 5
          },
          "reviewCount": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      }
    },
    "bestRating": {
      "type": "number",
      "const": 5
    },
    "generatedAt": {
      "type": "string"
    },
    "ratingValue": {
      "type": [
        "number",
        "null"
      ],
      "description": "Weighted average over the available sources, 1–5"
    },
    "reviewCount": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
get_reviews annotations
{
  "title": "Traveller reviews",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_proposal_request_status — Status of a proposal request
Advertised by the server during the last successful anonymous check.
Advertised read-only

Where a submitted proposal request stands (received, being prepared, proposal sent, confirmed, closed), looked up by the reference returned when it was submitted. Returns the stage, dates and the reply commitment; no personal data.

get_proposal_request_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "reference"
  ],
  "properties": {
    "reference": {
      "type": "string",
      "pattern": "^PR-\\d{8}-[A-Za-z0-9]{4}$",
      "description": "The reference returned by request_a_proposal, e.g. PR-20260916-U8GB"
    }
  },
  "additionalProperties": false
}
get_proposal_request_status output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "reference",
    "status",
    "statusText",
    "receivedAt",
    "lastUpdateAt",
    "slaBusinessDays",
    "nextStep"
  ],
  "properties": {
    "status": {
      "enum": [
        "received",
        "being_prepared",
        "proposal_sent",
        "confirmed",
        "closed"
      ],
      "type": "string"
    },
    "nextStep": {
      "type": "string"
    },
    "reference": {
      "type": "string"
    },
    "receivedAt": {
      "type": "string",
      "description": "ISO timestamp"
    },
    "statusText": {
      "type": "string"
    },
    "lastUpdateAt": {
      "type": "string",
      "description": "ISO timestamp"
    },
    "slaBusinessDays": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
get_proposal_request_status annotations
{
  "title": "Status of a proposal request",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
how_to_request_a_proposal — How to request a proposal
Advertised by the server during the last successful anonymous check.
Advertised read-only

The checklist a traveller or agent should send to Kratons to receive a bespoke proposal, the pricing policy, and how a human advisor follows up. Read-only.

how_to_request_a_proposal input schema
{
  "type": "object",
  "properties": {}
}
how_to_request_a_proposal output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "guide",
    "how",
    "checklist",
    "afterwards",
    "contact",
    "pricingPolicy",
    "agentStatement"
  ],
  "properties": {
    "how": {
      "type": "string"
    },
    "guide": {
      "type": "string",
      "description": "The full guide as Markdown"
    },
    "contact": {
      "type": "object",
      "required": [
        "email",
        "phones"
      ],
      "properties": {
        "email": {
          "type": "string"
        },
        "phones": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "number",
              "e164"
            ],
            "properties": {
              "e164": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "number": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "checklist": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "What a traveller or agent should include in a request"
    },
    "afterwards": {
      "type": "string",
      "description": "What happens after a request is submitted"
    },
    "pricingPolicy": {
      "type": "object",
      "required": [
        "summary",
        "rules"
      ],
      "properties": {
        "rules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "summary": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "agentStatement": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
how_to_request_a_proposal annotations
{
  "title": "How to request a proposal",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
request_a_proposal — Request a bespoke proposal
Advertised by the server during the last successful anonymous check.

Submit a structured proposal request to Kratons on behalf of a traveller or a travel agent: contact, destinations within Spain/Portugal/Morocco, dates, travellers, total budget, interests. Returns a reference. A human advisor replies by e-mail — there is no automatic booking, no online checkout and no price list. Send idempotencyKey to retry safely.

request_a_proposal input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contact",
    "trip"
  ],
  "properties": {
    "utm": {
      "type": "object",
      "properties": {
        "medium": {
          "type": "string",
          "maxLength": 100
        },
        "source": {
          "type": "string",
          "maxLength": 100
        },
        "campaign": {
          "type": "string",
          "maxLength": 100
        }
      },
      "description": "UTM parameters of the landing link, when any",
      "additionalProperties": false
    },
    "trip": {
      "type": "object",
      "required": [
        "destinations",
        "dates",
        "travelers"
      ],
      "properties": {
        "dates": {
          "type": "object",
          "properties": {
            "end": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "YYYY-MM-DD"
            },
            "month": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "description": "YYYY-MM when exact dates are not fixed"
            },
            "start": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "YYYY-MM-DD"
            },
            "flexible": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "needs": {
          "type": "string",
          "maxLength": 2000,
          "description": "Mobility or dietary needs"
        },
        "notes": {
          "type": "string",
          "maxLength": 4000,
          "description": "Anything else the advisor should know"
        },
        "nights": {
          "type": "integer",
          "maximum": 90,
          "minimum": 1
        },
        "currency": {
          "enum": [
            "EUR",
            "USD"
          ],
          "type": "string",
          "default": "EUR"
        },
        "occasion": {
          "type": "string",
          "maxLength": 200,
          "description": "Anniversary, birthday, honeymoon…"
        },
        "interests": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "default": [],
          "maxItems": 20,
          "description": "Interests and preferred pace"
        },
        "travelers": {
          "type": "object",
          "required": [
            "adults"
          ],
          "properties": {
            "ages": {
              "type": "array",
              "items": {
                "type": "integer",
                "maximum": 120,
                "minimum": 0
              },
              "maxItems": 40,
              "description": "Ages of children (and adults if relevant)"
            },
            "adults": {
              "type": "integer",
              "maximum": 40,
              "minimum": 1
            },
            "children": {
              "type": "integer",
              "default": 0,
              "maximum": 40,
              "minimum": 0
            }
          },
          "additionalProperties": false
        },
        "budgetTotal": {
          "type": "number",
          "maximum": 5000000,
          "minimum": 0,
          "description": "Approximate total budget for the WHOLE trip"
        },
        "destinations": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "maxItems": 12,
          "minItems": 1,
          "description": "Countries, regions or cities within Spain, Portugal and/or Morocco"
        },
        "hotelPreferences": {
          "type": "object",
          "properties": {
            "level": {
              "enum": [
                "3_star",
                "4_star",
                "5_star",
                "luxury",
                "boutique",
                "historic_or_parador",
                "mixed"
              ],
              "type": "string",
              "description": "Hotel level the traveller expects; 'mixed' when it may vary by city"
            },
            "names": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              "maxItems": 10,
              "description": "Specific hotels the traveller has in mind, by name"
            },
            "notes": {
              "type": "string",
              "maxLength": 500,
              "description": "Anything else about accommodation (room types, location, must-haves)"
            }
          },
          "description": "Accommodation preferences by level or by hotel name (2026-09-17)",
          "additionalProperties": false
        },
        "accommodationStyle": {
          "type": "string",
          "maxLength": 200
        }
      },
      "additionalProperties": false
    },
    "source": {
      "enum": [
        "social",
        "web",
        "agent",
        "referral",
        "other"
      ],
      "type": "string",
      "description": "Where this request originated, e.g. \"social\" when the traveller followed a link in one of Kratons' social posts"
    },
    "contact": {
      "type": "object",
      "required": [
        "name",
        "email"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1,
          "description": "Traveller's (or the person to reply to) full name"
        },
        "email": {
          "type": "string",
          "format": "email",
          "maxLength": 254,
          "description": "E-mail address a human advisor will reply to"
        },
        "phone": {
          "type": "string",
          "maxLength": 40,
          "description": "Phone / WhatsApp number with country code"
        },
        "language": {
          "enum": [
            "en",
            "es"
          ],
          "type": "string",
          "description": "Language for the reply (English or Spanish)"
        },
        "preferredChannel": {
          "enum": [
            "email",
            "phone",
            "whatsapp",
            "video_call"
          ],
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "requester": {
      "type": "object",
      "default": {
        "kind": "ai_agent"
      },
      "properties": {
        "kind": {
          "enum": [
            "ai_agent",
            "travel_agent",
            "traveller"
          ],
          "type": "string",
          "default": "ai_agent"
        },
        "agentName": {
          "type": "string",
          "maxLength": 120,
          "description": "Name of the assistant or agency submitting this"
        },
        "agentVendor": {
          "type": "string",
          "maxLength": 120,
          "description": "Vendor / platform of the assistant (e.g. OpenAI, Anthropic)"
        }
      },
      "additionalProperties": false
    },
    "socialPostId": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{24}$",
      "description": "The Kratons social post the traveller came from, when the link carried it"
    },
    "idempotencyKey": {
      "type": "string",
      "maxLength": 120,
      "description": "Send the same key to retry safely; the same reference comes back"
    }
  },
  "additionalProperties": false
}
request_a_proposal output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "reference",
    "duplicate",
    "receivedAt",
    "whatHappensNext",
    "contactForChanges",
    "missing",
    "acknowledged"
  ],
  "properties": {
    "missing": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Recommended details this request did not carry — collect them before the advisor has to ask"
    },
    "duplicate": {
      "type": "boolean",
      "description": "true when the same request was already received in the last 24 h (same reference returned)"
    },
    "reference": {
      "type": "string",
      "description": "Quote it in any follow-up; get_proposal_request_status reads it"
    },
    "receivedAt": {
      "type": "string",
      "description": "ISO timestamp"
    },
    "acknowledged": {
      "type": "string",
      "description": "One sentence echoing what was received, to confirm it to the traveller"
    },
    "whatHappensNext": {
      "type": "string"
    },
    "contactForChanges": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
request_a_proposal annotations
{
  "title": "Request a bespoke proposal",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

3 advertised

llms-txt — Kratons llms.txt

Advertised by the server during the last successful anonymous check.

The company described for LLM crawlers.

llms-txt URI
kratons://llms.txt

MIME type: text/plain

openapi — Kratons public API — OpenAPI 3.1

Advertised by the server during the last successful anonymous check.

Every public endpoint with the JSON schema of a proposal request.

openapi URI
kratons://openapi.json

MIME type: application/json

schema-jsonld — Kratons schema.org JSON-LD

Advertised by the server during the last successful anonymous check.

TravelAgency node with identifiers, address and contact points.

schema-jsonld URI
kratons://schema.jsonld

MIME type: application/ld+json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
560 ms
95th percentile latency
560 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 560 ms · metadata changed · 8 tool(s), 3 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http kratons-mcp https://api.kratons.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add kratons-mcp --url https://api.kratons.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable kratons-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "kratons-mcp": {
      "url": "https://api.kratons.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "kratons-mcp": {
      "type": "streamableHttp",
      "url": "https://api.kratons.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start kratons-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "kratons-mcp": {
      "type": "http",
      "url": "https://api.kratons.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http kratons-mcp https://api.kratons.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.kratons.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "kratons-mcp": {
      "serverUrl": "https://api.kratons.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Kratons MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Kratons MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing