Feminiq Rides: Amsterdam chauffeur (female driver)

Book Amsterdam chauffeur rides, female driver option: Schiphol transfers, custom rides, tours.

사용해야 할까요

품질 및 안전성

A
설명 품질
95%
스키마 완전성
85%
이름 품질
93%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (1)

  • LOWTool 'list_services' description lacks action verblist_services에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~5,171토큰 (도구 정의)
~8.5 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 4.04%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "booking": {
      "url": "https://www.feminiqrides.nl/mcp"
    }
  }
}

원격 엔드포인트

https://www.feminiqrides.nl/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (6)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢list_services

Fixed-fare Schiphol transfers (route ids, per-car prices), private tours (tour ids, durations, per-car prices), vehicles with passenger and luggage limits, and booking rules. No side effects.

입력 스키마

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_quote(pickup, dropoff, tourIds, type, car, ...)

Exact price and rule check for one ride (no booking, no email, no payment). Returns the total, any online deposit and a quoteToken valid for 15 minutes. Per type: fixed needs routeId, direction and address; custom needs pickup and dropoff; tour needs tourIds and pickup. Fixed fares only apply inside each route's zone: error address_zone means quote a custom ride instead. Does not check driver availability.

입력 스키마

{
  "type": "object",
  "properties": {
    "pickup": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Required for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations."
    },
    "dropoff": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Required for custom rides: drop-off address."
    },
    "tourIds": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "amsterdam-city-tour",
          "countryside-tour",
          "keukenhof-tour",
          "aalsmeer-flower-auction",
          "dutch-water-defence-line",
          "giethoorn-day-trip",
          "south-holland-tour",
          "rotterdam-kinderdijk",
          "kroller-muller",
          "efteling-day-trip",
          "bruges-day-trip",
          "roermond-outlet",
          "mall-of-the-netherlands",
          "batavia-stad",
          "style-outlet-amsterdam"
        ]
      },
      "minItems": 1,
      "maxItems": 5,
      "description": "Tours only; ids from /data/tours.json."
    },
    "type": {
      "type": "string",
      "enum": [
        "fixed",
        "custom",
        "tour"
      ]
    },
    "car": {
      "type": "string",
      "enum": [
        "bmw5",
        "vclass"
      ],
      "description": "BMW 5 Series Touring (bmw5) max 4 passengers, Mercedes V-Class (vclass) max 7 passengers."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Local date in Europe/Amsterdam."
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local time in Europe/Amsterdam, between 04:00 and 20:00."
    },
    "passengers": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7
    },
    "luggageLarge": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8,
      "default": 0,
      "description": "Large check-in suitcases. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "luggageSmall": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8,
      "default": 0,
      "description": "Pieces of hand luggage. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "returnTrip": {
      "type": "object",
      "description": "Airport transfers (fixed) and custom rides only; tours fail with retour_type, and a value that is not an object fails with retour. Books the return leg as well, with the same vehicle, passengers and luggage: on a fixed route the opposite direction between the same address and Schiphol, priced as a second ride at the route price; on a custom ride from the drop-off back to the pickup, where the fare estimate covers both legs and is split evenly over them. The return must be at least one hour after the first ride (retour_order), between 04:00 and 20:00 (retour_hours), not on a blocked date (retour_date_blocked) and at most 2 years ahead (date_range); missing or invalid values fail with retour_date, retour_time or retour_datetime. There is no name card on either leg (meet_greet_unavailable). The request is stored as two linked bookings, bookingId and `<bookingId>-ret` (so bookingId may have at most 76 characters), confirmed together and paid with one payment request: 25% of the combined price of the legs, or all of it with payment=full.",
      "properties": {
        "date": {
          "type": "string",
          "format": "date",
          "description": "Local date of the return ride in Europe/Amsterdam."
        },
        "time": {
          "type": "string",
          "pattern": "^\\d{2}:\\d{2}$",
          "description": "Local pickup time of the return ride in Europe/Amsterdam, between 04:00 and 20:00, at least 1 hour after the first ride."
        },
        "flight": {
          "type": "string",
          "maxLength": 24,
          "description": "Optional flight number for the return ride."
        }
      },
      "required": [
        "date",
        "time"
      ]
    },
    "routeId": {
      "type": "string",
      "description": "Fixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to.",
      "enum": [
        "ams-spl",
        "noord-spl",
        "zaandam-spl",
        "aveen-spl",
        "dh-spl",
        "rtm-spl",
        "almere-spl",
        "almere-buiten-spl",
        "utrecht-spl",
        "eindhoven-spl"
      ]
    },
    "direction": {
      "type": "string",
      "enum": [
        "to",
        "from"
      ],
      "description": "Fixed routes only: to or from Schiphol."
    },
    "address": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Fixed routes only: the non-airport pickup/drop-off address. The fare follows the route zone of the address (postcode first, then town name; a hotel or town named without a postcode is placed by a server-side lookup, and the selected route applies if that lookup fails). An address whose Dutch postcode is in no fixed-route zone is refused with error code address_zone; book it as a single ride."
    },
    "payment": {
      "type": "string",
      "enum": [
        "deposit",
        "full"
      ],
      "default": "deposit",
      "description": "How the customer pays once the ride is confirmed: deposit = a payment request for 25% of the price, rest on the day of the ride; full = a payment request for the full price. With a returnTrip each leg gets its own payment request on these terms."
    },
    "ticketService": {
      "type": "boolean",
      "description": "Tours only: attraction ticket purchase assistance, requires 28 days' notice."
    },
    "driverName": {
      "type": "string",
      "maxLength": 60
    },
    "flight": {
      "type": "string",
      "maxLength": 24
    },
    "notes": {
      "type": "string",
      "maxLength": 1000
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "ar",
        "zh-CN"
      ]
    }
  },
  "required": [
    "type",
    "car",
    "date",
    "time",
    "passengers"
  ]
}
🔴request_booking(pickup, dropoff, tourIds, type, car, ...)

Sends the quoted ride as a booking request. Call ONLY after the customer has seen the quoted total and how they pay, and has explicitly approved it and accepted the Terms (https://www.feminiqrides.nl/terms.html). Send exactly the same ride fields as the get_quote call plus its unchanged quoteToken and the customer's contact details. Nothing is charged now. The customer first gets an email with a Confirm link (valid 24 hours); after that click Feminiq Rides confirms personally and emails a SumUp payment request. Returns groupId and groupToken; pass them as joinGroup on further rides so they are confirmed and paid together. Repeating the identical call does not create a second booking.

입력 스키마

{
  "type": "object",
  "properties": {
    "pickup": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Required for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations."
    },
    "dropoff": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Required for custom rides: drop-off address."
    },
    "tourIds": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "amsterdam-city-tour",
          "countryside-tour",
          "keukenhof-tour",
          "aalsmeer-flower-auction",
          "dutch-water-defence-line",
          "giethoorn-day-trip",
          "south-holland-tour",
          "rotterdam-kinderdijk",
          "kroller-muller",
          "efteling-day-trip",
          "bruges-day-trip",
          "roermond-outlet",
          "mall-of-the-netherlands",
          "batavia-stad",
          "style-outlet-amsterdam"
        ]
      },
      "minItems": 1,
      "maxItems": 5,
      "description": "Tours only; ids from /data/tours.json."
    },
    "type": {
      "type": "string",
      "enum": [
        "fixed",
        "custom",
        "tour"
      ]
    },
    "car": {
      "type": "string",
      "enum": [
        "bmw5",
        "vclass"
      ],
      "description": "BMW 5 Series Touring (bmw5) max 4 passengers, Mercedes V-Class (vclass) max 7 passengers."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Local date in Europe/Amsterdam."
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local time in Europe/Amsterdam, between 04:00 and 20:00."
    },
    "passengers": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7
    },
    "luggageLarge": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8,
      "default": 0,
      "description": "Large check-in suitcases. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "luggageSmall": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8,
      "default": 0,
      "description": "Pieces of hand luggage. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "returnTrip": {
      "type": "object",
      "description": "Airport transfers (fixed) and custom rides only; tours fail with retour_type, and a value that is not an object fails with retour. Books the return leg as well, with the same vehicle, passengers and luggage: on a fixed route the opposite direction between the same address and Schiphol, priced as a second ride at the route price; on a custom ride from the drop-off back to the pickup, where the fare estimate covers both legs and is split evenly over them. The return must be at least one hour after the first ride (retour_order), between 04:00 and 20:00 (retour_hours), not on a blocked date (retour_date_blocked) and at most 2 years ahead (date_range); missing or invalid values fail with retour_date, retour_time or retour_datetime. There is no name card on either leg (meet_greet_unavailable). The request is stored as two linked bookings, bookingId and `<bookingId>-ret` (so bookingId may have at most 76 characters), confirmed together and paid with one payment request: 25% of the combined price of the legs, or all of it with payment=full.",
      "properties": {
        "date": {
          "type": "string",
          "format": "date",
          "description": "Local date of the return ride in Europe/Amsterdam."
        },
        "time": {
          "type": "string",
          "pattern": "^\\d{2}:\\d{2}$",
          "description": "Local pickup time of the return ride in Europe/Amsterdam, between 04:00 and 20:00, at least 1 hour after the first ride."
        },
        "flight": {
          "type": "string",
          "maxLength": 24,
          "description": "Optional flight number for the return ride."
        }
      },
      "required": [
        "date",
        "time"
      ]
    },
    "routeId": {
      "type": "string",
      "description": "Fixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to.",
      "enum": [
        "ams-spl",
        "noord-spl",
        "zaandam-spl",
        "aveen-spl",
        "dh-spl",
        "rtm-spl",
        "almere-spl",
        "almere-buiten-spl",
        "utrecht-spl",
        "eindhoven-spl"
      ]
    },
    "direction": {
      "type": "string",
      "enum": [
        "to",
        "from"
      ],
      "description": "Fixed routes only: to or from Schiphol."
    },
    "address": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Fixed routes only: the non-airport pickup/drop-off address. The fare follows the route zone of the address (postcode first, then town name; a hotel or town named without a postcode is placed by a server-side lookup, and the selected route applies if that lookup fails). An address whose Dutch postcode is in no fixed-route zone is refused with error code address_zone; book it as a single ride."
    },
    "payment": {
      "type": "string",
      "enum": [
        "deposit",
        "full"
      ],
      "default": "deposit",
      "description": "How the customer pays once the ride is confirmed: deposit = a payment request for 25% of the price, rest on the day of the ride; full = a payment request for the full price. With a returnTrip each leg gets its own payment request on these terms."
    },
    "ticketService": {
      "type": "boolean",
      "description": "Tours only: attraction ticket purchase assistance, requires 28 days' notice."
    },
    "driverName": {
      "type": "string",
      "maxLength": 60
    },
    "flight": {
      "type": "string",
      "maxLength": 24
    },
    "notes": {
      "type": "string",
      "maxLength": 1000
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "ar",
        "zh-CN"
      ]
    },
    "quoteToken": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Signed token returned by POST /api/quote. Send unchanged only after the customer approves that quote's total and payment. It binds the normalized journey, vehicle, passengers, payment choice, return trip, options, fare, rules version and 15-minute expiry. HTTP 409 reviewRequired=true means obtain a new quote and renewed customer approval before retrying. Never supply your own price."
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phone": {
      "type": "string",
      "minLength": 7,
      "maxLength": 30,
      "description": "Customer's phone number, with country code (for example +31 6 1234 5678)."
    },
    "acceptedTerms": {
      "type": "boolean",
      "const": true,
      "description": "Must be an explicit act by the customer after reading the Terms & Conditions. Agents must not set this on a customer's behalf without their consent."
    },
    "joinGroup": {
      "type": "object",
      "description": "Optional. Adds this ride to the request group of an earlier ride, so the owner approves them together and the customer receives ONE payment request (the sum of each ride's 25%, or full price where chosen). Use the `groupId` and `groupToken` returned for the earlier request. It is ignored (the ride stands alone) when the token or email does not match, or once any ride of the group has been approved.",
      "properties": {
        "id": {
          "type": "string"
        },
        "token": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "token"
      ]
    }
  },
  "required": [
    "type",
    "car",
    "date",
    "time",
    "passengers",
    "quoteToken",
    "name",
    "email",
    "phone",
    "acceptedTerms"
  ]
}
🟢get_booking_status(bookingId, email)

Where a ride request stands: waiting for the customer's email confirmation, waiting for Feminiq Rides to confirm, payment request sent (with the payment link), confirmed, completed or cancelled. Needs the bookingId from request_booking and the customer's email.

입력 스키마

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "description": "The bookingId returned by request_booking."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "The customer's email address used for the booking (proves it is their booking)."
    }
  },
  "required": [
    "bookingId",
    "email"
  ]
}
🔴change_booking(bookingId, email, pickup, dropoff, tourIds, ...)

Changes a ride request at the customer's request (date, time, address, pickup, drop-off, passengers, luggage, car, payment choice, flight, notes). First call get_quote with the complete changed ride and get the customer's approval of the new price, then send the same ride fields with that quoteToken plus the bookingId and the customer's email. A request still waiting for the email confirmation is re-sent with a new link; a request Feminiq Rides has not confirmed yet is updated at once; a confirmed but unpaid request is withdrawn and requested anew (she confirms again and sends a new payment request). Paid bookings are passed to Feminiq Rides as a change request, which she confirms by email. The ride type (transfer, ride on request, tour) cannot change: cancel and request anew instead.

입력 스키마

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "description": "The bookingId returned by request_booking."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "The customer's email address used for the booking (proves it is their booking)."
    },
    "pickup": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Required for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations."
    },
    "dropoff": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Required for custom rides: drop-off address."
    },
    "tourIds": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "amsterdam-city-tour",
          "countryside-tour",
          "keukenhof-tour",
          "aalsmeer-flower-auction",
          "dutch-water-defence-line",
          "giethoorn-day-trip",
          "south-holland-tour",
          "rotterdam-kinderdijk",
          "kroller-muller",
          "efteling-day-trip",
          "bruges-day-trip",
          "roermond-outlet",
          "mall-of-the-netherlands",
          "batavia-stad",
          "style-outlet-amsterdam"
        ]
      },
      "minItems": 1,
      "maxItems": 5,
      "description": "Tours only; ids from /data/tours.json."
    },
    "type": {
      "type": "string",
      "enum": [
        "fixed",
        "custom",
        "tour"
      ]
    },
    "car": {
      "type": "string",
      "enum": [
        "bmw5",
        "vclass"
      ],
      "description": "BMW 5 Series Touring (bmw5) max 4 passengers, Mercedes V-Class (vclass) max 7 passengers."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Local date in Europe/Amsterdam."
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local time in Europe/Amsterdam, between 04:00 and 20:00."
    },
    "passengers": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7
    },
    "luggageLarge": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8,
      "default": 0,
      "description": "Large check-in suitcases. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "luggageSmall": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8,
      "default": 0,
      "description": "Pieces of hand luggage. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "returnTrip": {
      "type": "object",
      "description": "Airport transfers (fixed) and custom rides only; tours fail with retour_type, and a value that is not an object fails with retour. Books the return leg as well, with the same vehicle, passengers and luggage: on a fixed route the opposite direction between the same address and Schiphol, priced as a second ride at the route price; on a custom ride from the drop-off back to the pickup, where the fare estimate covers both legs and is split evenly over them. The return must be at least one hour after the first ride (retour_order), between 04:00 and 20:00 (retour_hours), not on a blocked date (retour_date_blocked) and at most 2 years ahead (date_range); missing or invalid values fail with retour_date, retour_time or retour_datetime. There is no name card on either leg (meet_greet_unavailable). The request is stored as two linked bookings, bookingId and `<bookingId>-ret` (so bookingId may have at most 76 characters), confirmed together and paid with one payment request: 25% of the combined price of the legs, or all of it with payment=full.",
      "properties": {
        "date": {
          "type": "string",
          "format": "date",
          "description": "Local date of the return ride in Europe/Amsterdam."
        },
        "time": {
          "type": "string",
          "pattern": "^\\d{2}:\\d{2}$",
          "description": "Local pickup time of the return ride in Europe/Amsterdam, between 04:00 and 20:00, at least 1 hour after the first ride."
        },
        "flight": {
          "type": "string",
          "maxLength": 24,
          "description": "Optional flight number for the return ride."
        }
      },
      "required": [
        "date",
        "time"
      ]
    },
    "routeId": {
      "type": "string",
      "description": "Fixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to.",
      "enum": [
        "ams-spl",
        "noord-spl",
        "zaandam-spl",
        "aveen-spl",
        "dh-spl",
        "rtm-spl",
        "almere-spl",
        "almere-buiten-spl",
        "utrecht-spl",
        "eindhoven-spl"
      ]
    },
    "direction": {
      "type": "string",
      "enum": [
        "to",
        "from"
      ],
      "description": "Fixed routes only: to or from Schiphol."
    },
    "address": {
      "type": "string",
      "minLength": 4,
      "maxLength": 180,
      "description": "Fixed routes only: the non-airport pickup/drop-off address. The fare follows the route zone of the address (postcode first, then town name; a hotel or town named without a postcode is placed by a server-side lookup, and the selected route applies if that lookup fails). An address whose Dutch postcode is in no fixed-route zone is refused with error code address_zone; book it as a single ride."
    },
    "payment": {
      "type": "string",
      "enum": [
        "deposit",
        "full"
      ],
      "default": "deposit",
      "description": "How the customer pays once the ride is confirmed: deposit = a payment request for 25% of the price, rest on the day of the ride; full = a payment request for the full price. With a returnTrip each leg gets its own payment request on these terms."
    },
    "ticketService": {
      "type": "boolean",
      "description": "Tours only: attraction ticket purchase assistance, requires 28 days' notice."
    },
    "driverName": {
      "type": "string",
      "maxLength": 60
    },
    "flight": {
      "type": "string",
      "maxLength": 24
    },
    "notes": {
      "type": "string",
      "maxLength": 1000
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "ar",
        "zh-CN"
      ]
    },
    "quoteToken": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Signed token returned by POST /api/quote. Send unchanged only after the customer approves that quote's total and payment. It binds the normalized journey, vehicle, passengers, payment choice, return trip, options, fare, rules version and 15-minute expiry. HTTP 409 reviewRequired=true means obtain a new quote and renewed customer approval before retrying. Never supply your own price."
    }
  },
  "required": [
    "bookingId",
    "email",
    "quoteToken",
    "type",
    "car",
    "date",
    "time",
    "passengers"
  ]
}
🔴cancel_booking(bookingId, email, reason)

Cancels a ride at the customer's explicit request. Requests Feminiq Rides has not confirmed yet and unpaid payment requests are cancelled at once (the customer gets an email). Paid bookings are passed to Feminiq Rides as a cancellation request, which she handles under the Terms (deposit returned more than 24 hours before pickup; within 24 hours the 25% deposit is kept). Needs the bookingId and the customer's email. Ask the customer to confirm before calling.

입력 스키마

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "description": "The bookingId returned by request_booking."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "The customer's email address used for the booking (proves it is their booking)."
    },
    "reason": {
      "type": "string",
      "maxLength": 300,
      "description": "Optional reason from the customer."
    }
  },
  "required": [
    "bookingId",
    "email"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 6개