Koskamo

Feminiq Rides MCP

An official MCP server for Feminiq Rides, an Amsterdam chauffeur service. It allows AI agents to list available services, get exact price quotes, request bookings, check booking status, and modify or cancel existing reservations without requiring user sign-in.

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.

Feminiq Rides MCP logo, by Feminiq RidesVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Feminiq Rides
MCP endpoint (Streamable HTTP)
https://www.feminiqrides.nl/mcp
Vendor documentation

What you can do with it

  • List available routes, tours, and vehicle prices
  • Get exact price quotes for specific rides
  • Request and confirm chauffeur bookings
  • Check status or cancel existing bookings

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
feminiqrides 1.0.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {},
  "resources": {},
  "extensions": {
    "io.modelcontextprotocol/ui": {}
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Feminiq Rides is a chauffeur service in Amsterdam run by a qualified female executive chauffeur (BMW 5 Series Touring, Mercedes V-Class). Prices are per vehicle in EUR including 9% VAT. Flow: list_services to pick a route, tour or car; get_quote for the exact price; show the customer the total, how they pay and the Terms (https://www.feminiqrides.nl/terms.html); only after they approve and accept the Terms, call request_booking with the SAME ride fields, the quoteToken and their real name, email and phone. The customer then confirms the request with the link emailed to them. Every ride is a request first and nothing is charged when it is sent. Feminiq Rides confirms availability personally and then emails a SumUp payment request for 25% (or the full price with payment full). The booking is final once that payment is received. To book several rides with one payment, pass the groupId and groupToken of the first request as joinGroup on the next ones. Never invent prices, never accept the Terms for the customer, never pay for them. get_quote results show as a card with a Request button in clients that support it. get_booking_status, change_booking and cancel_booking need the bookingId from request_booking and the customer's email; change or cancel only at the customer's explicit request.

Tools

6 advertised

list_services — List Feminiq Rides services and prices
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_services input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_services annotations
{
  "title": "List Feminiq Rides services and prices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_quote — Get a price for a ride
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_quote input schema
{
  "type": "object",
  "required": [
    "type",
    "car",
    "date",
    "time",
    "passengers"
  ],
  "properties": {
    "car": {
      "enum": [
        "bmw5",
        "vclass"
      ],
      "type": "string",
      "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."
    },
    "lang": {
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "ar",
        "zh-CN"
      ],
      "type": "string"
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local time in Europe/Amsterdam, between 04:00 and 20:00."
    },
    "type": {
      "enum": [
        "fixed",
        "custom",
        "tour"
      ],
      "type": "string"
    },
    "notes": {
      "type": "string",
      "maxLength": 1000
    },
    "flight": {
      "type": "string",
      "maxLength": 24
    },
    "pickup": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "description": "Required for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations."
    },
    "address": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "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."
    },
    "dropoff": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "description": "Required for custom rides: drop-off address."
    },
    "payment": {
      "enum": [
        "deposit",
        "full"
      ],
      "type": "string",
      "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."
    },
    "routeId": {
      "enum": [
        "ams-spl",
        "noord-spl",
        "zaandam-spl",
        "aveen-spl",
        "dh-spl",
        "rtm-spl",
        "almere-spl",
        "almere-buiten-spl",
        "utrecht-spl",
        "eindhoven-spl"
      ],
      "type": "string",
      "description": "Fixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to."
    },
    "tourIds": {
      "type": "array",
      "items": {
        "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"
        ],
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Tours only; ids from /data/tours.json.",
      "uniqueItems": true
    },
    "direction": {
      "enum": [
        "to",
        "from"
      ],
      "type": "string",
      "description": "Fixed routes only: to or from Schiphol."
    },
    "driverName": {
      "type": "string",
      "maxLength": 60
    },
    "passengers": {
      "type": "integer",
      "maximum": 7,
      "minimum": 1
    },
    "returnTrip": {
      "type": "object",
      "required": [
        "date",
        "time"
      ],
      "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."
        }
      },
      "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."
    },
    "luggageLarge": {
      "type": "integer",
      "default": 0,
      "maximum": 8,
      "minimum": 0,
      "description": "Large check-in suitcases. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "luggageSmall": {
      "type": "integer",
      "default": 0,
      "maximum": 8,
      "minimum": 0,
      "description": "Pieces of hand luggage. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "ticketService": {
      "type": "boolean",
      "description": "Tours only: attraction ticket purchase assistance, requires 28 days' notice."
    }
  }
}
get_quote annotations
{
  "title": "Get a price for a ride",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
request_booking — Send a booking request
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

request_booking input schema
{
  "type": "object",
  "required": [
    "type",
    "car",
    "date",
    "time",
    "passengers",
    "quoteToken",
    "name",
    "email",
    "phone",
    "acceptedTerms"
  ],
  "properties": {
    "car": {
      "enum": [
        "bmw5",
        "vclass"
      ],
      "type": "string",
      "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."
    },
    "lang": {
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "ar",
        "zh-CN"
      ],
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local time in Europe/Amsterdam, between 04:00 and 20:00."
    },
    "type": {
      "enum": [
        "fixed",
        "custom",
        "tour"
      ],
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "notes": {
      "type": "string",
      "maxLength": 1000
    },
    "phone": {
      "type": "string",
      "maxLength": 30,
      "minLength": 7,
      "description": "Customer's phone number, with country code (for example +31 6 1234 5678)."
    },
    "flight": {
      "type": "string",
      "maxLength": 24
    },
    "pickup": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "description": "Required for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations."
    },
    "address": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "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."
    },
    "dropoff": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "description": "Required for custom rides: drop-off address."
    },
    "payment": {
      "enum": [
        "deposit",
        "full"
      ],
      "type": "string",
      "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."
    },
    "routeId": {
      "enum": [
        "ams-spl",
        "noord-spl",
        "zaandam-spl",
        "aveen-spl",
        "dh-spl",
        "rtm-spl",
        "almere-spl",
        "almere-buiten-spl",
        "utrecht-spl",
        "eindhoven-spl"
      ],
      "type": "string",
      "description": "Fixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to."
    },
    "tourIds": {
      "type": "array",
      "items": {
        "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"
        ],
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Tours only; ids from /data/tours.json.",
      "uniqueItems": true
    },
    "direction": {
      "enum": [
        "to",
        "from"
      ],
      "type": "string",
      "description": "Fixed routes only: to or from Schiphol."
    },
    "joinGroup": {
      "type": "object",
      "required": [
        "id",
        "token"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "token": {
          "type": "string"
        }
      },
      "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."
    },
    "driverName": {
      "type": "string",
      "maxLength": 60
    },
    "passengers": {
      "type": "integer",
      "maximum": 7,
      "minimum": 1
    },
    "quoteToken": {
      "type": "string",
      "maxLength": 2048,
      "minLength": 1,
      "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."
    },
    "returnTrip": {
      "type": "object",
      "required": [
        "date",
        "time"
      ],
      "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."
        }
      },
      "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."
    },
    "luggageLarge": {
      "type": "integer",
      "default": 0,
      "maximum": 8,
      "minimum": 0,
      "description": "Large check-in suitcases. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "luggageSmall": {
      "type": "integer",
      "default": 0,
      "maximum": 8,
      "minimum": 0,
      "description": "Pieces of hand luggage. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "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."
    },
    "ticketService": {
      "type": "boolean",
      "description": "Tours only: attraction ticket purchase assistance, requires 28 days' notice."
    }
  }
}
request_booking annotations
{
  "title": "Send a booking request",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
get_booking_status — Check a booking's status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_booking_status input schema
{
  "type": "object",
  "required": [
    "bookingId",
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "format": "email",
      "description": "The customer's email address used for the booking (proves it is their booking)."
    },
    "bookingId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "description": "The bookingId returned by request_booking."
    }
  }
}
get_booking_status annotations
{
  "title": "Check a booking's status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
change_booking — Change a booking
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

change_booking input schema
{
  "type": "object",
  "required": [
    "bookingId",
    "email",
    "quoteToken",
    "type",
    "car",
    "date",
    "time",
    "passengers"
  ],
  "properties": {
    "car": {
      "enum": [
        "bmw5",
        "vclass"
      ],
      "type": "string",
      "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."
    },
    "lang": {
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "ar",
        "zh-CN"
      ],
      "type": "string"
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local time in Europe/Amsterdam, between 04:00 and 20:00."
    },
    "type": {
      "enum": [
        "fixed",
        "custom",
        "tour"
      ],
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "The customer's email address used for the booking (proves it is their booking)."
    },
    "notes": {
      "type": "string",
      "maxLength": 1000
    },
    "flight": {
      "type": "string",
      "maxLength": 24
    },
    "pickup": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "description": "Required for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations."
    },
    "address": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "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."
    },
    "dropoff": {
      "type": "string",
      "maxLength": 180,
      "minLength": 4,
      "description": "Required for custom rides: drop-off address."
    },
    "payment": {
      "enum": [
        "deposit",
        "full"
      ],
      "type": "string",
      "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."
    },
    "routeId": {
      "enum": [
        "ams-spl",
        "noord-spl",
        "zaandam-spl",
        "aveen-spl",
        "dh-spl",
        "rtm-spl",
        "almere-spl",
        "almere-buiten-spl",
        "utrecht-spl",
        "eindhoven-spl"
      ],
      "type": "string",
      "description": "Fixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to."
    },
    "tourIds": {
      "type": "array",
      "items": {
        "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"
        ],
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Tours only; ids from /data/tours.json.",
      "uniqueItems": true
    },
    "bookingId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "description": "The bookingId returned by request_booking."
    },
    "direction": {
      "enum": [
        "to",
        "from"
      ],
      "type": "string",
      "description": "Fixed routes only: to or from Schiphol."
    },
    "driverName": {
      "type": "string",
      "maxLength": 60
    },
    "passengers": {
      "type": "integer",
      "maximum": 7,
      "minimum": 1
    },
    "quoteToken": {
      "type": "string",
      "maxLength": 2048,
      "minLength": 1,
      "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."
    },
    "returnTrip": {
      "type": "object",
      "required": [
        "date",
        "time"
      ],
      "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."
        }
      },
      "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."
    },
    "luggageLarge": {
      "type": "integer",
      "default": 0,
      "maximum": 8,
      "minimum": 0,
      "description": "Large check-in suitcases. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "luggageSmall": {
      "type": "integer",
      "default": 0,
      "maximum": 8,
      "minimum": 0,
      "description": "Pieces of hand luggage. The BMW takes at most 3; more needs the V-Class (error code luggage)."
    },
    "ticketService": {
      "type": "boolean",
      "description": "Tours only: attraction ticket purchase assistance, requires 28 days' notice."
    }
  }
}
change_booking annotations
{
  "title": "Change a booking",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
cancel_booking — Cancel a booking
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

cancel_booking input schema
{
  "type": "object",
  "required": [
    "bookingId",
    "email"
  ],
  "properties": {
    "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."
    },
    "bookingId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "description": "The bookingId returned by request_booking."
    }
  }
}
cancel_booking annotations
{
  "title": "Cancel a booking",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

quote-card — Feminiq Rides quote card

Advertised by the server during the last successful anonymous check.

quote-card URI
ui://feminiqrides/quote-card-v1.html

MIME type: text/html;profile=mcp-app

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
698 ms
95th percentile latency
698 ms

Maintenance history

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

  • · probe · passed · 698 ms · metadata changed · 6 tool(s), 1 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 feminiq-rides-mcp https://www.feminiqrides.nl/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 feminiq-rides-mcp --url https://www.feminiqrides.nl/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable feminiq-rides-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "feminiq-rides-mcp": {
      "url": "https://www.feminiqrides.nl/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "feminiq-rides-mcp": {
      "type": "streamableHttp",
      "url": "https://www.feminiqrides.nl/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start feminiq-rides-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "feminiq-rides-mcp": {
      "type": "http",
      "url": "https://www.feminiqrides.nl/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 feminiq-rides-mcp https://www.feminiqrides.nl/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "feminiq-rides-mcp": {
      "url": "https://www.feminiqrides.nl/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": {
    "feminiq-rides-mcp": {
      "serverUrl": "https://www.feminiqrides.nl/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Feminiq Rides 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 Feminiq Rides 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