{"apiVersion":"v1","directorySlug":"carhopp-mcp-39877f7d44","title":"carhopp — A driving journal — Portugal","description":"Portugal car rental guide: when to rent, where to pick up, road trips from Lisbon, Porto and Faro, and live price comparison.","pageUrl":"https://www.mcpbundles.com/skills/carhopp-mcp-39877f7d44","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.carhopp.bot/mcp","hostedMcpUrl":null,"toolCount":8,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"bot.carhopp/carhopp-mcp-39877f7d44","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_rental_locations","description":"Use this FIRST to resolve a free-text place — city, airport, train station, or hotel — into a specific pickup or drop-off location id before searching for cars (e.g. 'Barcelona', 'Lisbon airport', 'near Dubai Marina', 'alquiler en Málaga'). Returns matching locations with type, country, and coordinates so search_car_rentals uses the correct location. Use this whenever the pickup place is ambiguous or could be either a city or an airport. Data-only: it does not render a widget and does not book.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1},"query":{"type":"string","minLength":1},"locale":{"enum":["en","ru","es","de"],"type":"string"},"countryCode":{"type":"string","maxLength":2,"minLength":2}},"additionalProperties":false},"title":"Search Locations","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_rental_locations","displayName":"Search Locations"},{"name":"search_car_rentals","description":"Use this when the user wants to rent or hire a car, find a rental car / car hire, or compare car-rental prices to pick up at an airport, city, train station, or hotel for a date range. Triggers include phrasings like 'rent a car in Barcelona next weekend', 'cheap automatic SUV at Lisbon airport', 'I need a vehicle for a week in Italy', 'car for a family of 5 with luggage space', 'cheapest car rental with free cancellation', plus non-English equivalents: 'alquiler de coches' (ES), 'location de vo","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["pickupLocationId","pickupDateTime","dropoffDateTime"],"properties":{"sort":{"enum":["recommended","price_asc","rating_desc"],"type":"string"},"locale":{"enum":["en","ru","es","de"],"type":"string"},"filters":{"type":"object","properties":{"badges":{"type":"array","items":{"enum":["full_coverage","free_cancellation","free_deposit","low_deposit","instant_confirmation","unlimited_mileage"],"type":"string"}},"minBags":{"type":"integer","minimum":0},"category":{"type":"array","items":{"type":"string","minLength":1}},"maxPrice":{"type":"number","minimum":0},"minSeats":{"type":"integer","exclusiveMinimum":0},"supplierIds":{"type":"array","items":{"type":"string","minLength":1}},"transmission":{"enum":["manual","automatic"],"type":"string"}},"additionalProperties":false},"currency":{"enum":["EUR","USD","GBP"],"type":"string"},"driverAge":{"type":"integer","maximum":120,"minimum":18},"tripIntent":{"enum":["economy","family","business","coverage_first","cheap","balanced"],"type":"string"},"pickupDateTime":{"type":"string","minLength":1},"dropoffDateTime":{"type":"string","minLength":1},"pickupLocationId":{"type":"string","minLength":1},"dropoffLocationId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Search Cars","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_car_rentals","displayName":"Search Cars"},{"name":"refine_car_rentals","description":"Use this — NOT search_car_rentals — when rental-car results are already displayed in this conversation and the user narrows or re-orders the same trip: 'only SUVs', 'automatic only', 'under 300', 'cheapest first', 'with free cancellation'. Same pickup/drop-off and dates as the shown search, plus the new filters or sort. Returns data only and renders NO widget (re-rendering the widget is not supported by the host); summarize the top matching offers in text and remind the user they can also apply","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["pickupLocationId","pickupDateTime","dropoffDateTime"],"properties":{"sort":{"enum":["recommended","price_asc","rating_desc"],"type":"string"},"locale":{"enum":["en","ru","es","de"],"type":"string"},"filters":{"type":"object","properties":{"badges":{"type":"array","items":{"enum":["full_coverage","free_cancellation","free_deposit","low_deposit","instant_confirmation","unlimited_mileage"],"type":"string"}},"minBags":{"type":"integer","minimum":0},"category":{"type":"array","items":{"type":"string","minLength":1}},"maxPrice":{"type":"number","minimum":0},"minSeats":{"type":"integer","exclusiveMinimum":0},"supplierIds":{"type":"array","items":{"type":"string","minLength":1}},"transmission":{"enum":["manual","automatic"],"type":"string"}},"additionalProperties":false},"currency":{"enum":["EUR","USD","GBP"],"type":"string"},"driverAge":{"type":"integer","maximum":120,"minimum":18},"tripIntent":{"enum":["economy","family","business","coverage_first","cheap","balanced"],"type":"string"},"pickupDateTime":{"type":"string","minLength":1},"dropoffDateTime":{"type":"string","minLength":1},"pickupLocationId":{"type":"string","minLength":1},"dropoffLocationId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Refine Car Rentals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"refine_car_rentals","displayName":"Refine Car Rentals"},{"name":"get_car_rental_details","description":"Use this when the user has already seen rental-car offers and wants full details on a specific one — rental conditions, deposit, insurance/coverage, mileage policy, cancellation terms, fuel policy, or a same-class supplier comparison (e.g. 'what's the deposit on that one?', 'is insurance included?', 'show me details'). Requires searchId and offerId from a prior search_car_rentals result. Data-only: chain render_car_details with the same searchId+offerId to display the detail widget. Does not sea","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["searchId","offerId"],"properties":{"locale":{"enum":["en","ru","es","de"],"type":"string"},"offerId":{"type":"string","minLength":1},"currency":{"enum":["EUR","USD","GBP"],"type":"string"},"searchId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Get Car Details","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_car_rental_details","displayName":"Get Car Details"},{"name":"build_booking_url","description":"Internal continuation step: generate the server-built booking URL for an offer the user has explicitly chosen to book. Only call after the user has selected a specific offer and asked to proceed to booking or checkout; the widget surfaces the link via openExternal on explicit user click. Requires searchId, offerId, and sourceHost. Do not call this to search, compare, or browse cars (use search_car_rentals for that), and never generate a booking link before the user has picked an offer.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["searchId","offerId","sourceHost"],"properties":{"locale":{"enum":["en","ru","es","de"],"type":"string"},"offerId":{"type":"string","minLength":1},"currency":{"enum":["EUR","USD","GBP"],"type":"string"},"searchId":{"type":"string","minLength":1},"sourceHost":{"enum":["chatgpt","claude","demo"],"type":"string"}},"additionalProperties":false},"title":"Build Booking URL","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"build_booking_url","displayName":"Build Booking URL"},{"name":"list_car_rentals","description":"Internal pagination step for the rental-car widget: returns a window of the cached search pool for a prior search_car_rentals result, applying the widget's current filters and sort over the whole pool. Requires searchId; accepts filters, sort, offset, and limit. Data-only — does not render a widget and does not search new inventory. Not selected from user intent; the widget calls it on scroll or filter.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["searchId"],"properties":{"sort":{"enum":["recommended","price_asc","rating_desc"],"type":"string"},"limit":{"type":"integer","maximum":200,"minimum":1},"offset":{"type":"integer","minimum":0},"filters":{"type":"object","properties":{"badges":{"type":"array","items":{"enum":["full_coverage","free_cancellation","free_deposit","low_deposit","instant_confirmation","unlimited_mileage"],"type":"string"}},"minBags":{"type":"integer","minimum":0},"category":{"type":"array","items":{"type":"string","minLength":1}},"maxPrice":{"type":"number","minimum":0},"minSeats":{"type":"integer","exclusiveMinimum":0},"supplierIds":{"type":"array","items":{"type":"string","minLength":1}},"transmission":{"enum":["manual","automatic"],"type":"string"}},"additionalProperties":false},"searchId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"List Car Rentals (page)","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_car_rentals","displayName":"List Car Rentals (page)"},{"name":"render_car_details","description":"Internal render step: display the car-details widget for an offer already fetched via get_car_rental_details, using the same searchId and offerId. Not a data tool — call get_car_rental_details first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["searchId","offerId"],"properties":{"offerId":{"type":"string","minLength":1},"searchId":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Render Car Details Widget","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_car_details","displayName":"Render Car Details Widget"},{"name":"render_error_state","description":"Internal render step: display the error-state widget after a recoverable failure. Provide an error code, a user-facing message, and an optional retry hint. Not selected from user intent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["code","userMessage"],"properties":{"code":{"enum":["NO_RESULTS","INVALID_INPUT","OFFER_UNAVAILABLE","PRICE_CHANGED","BOOKING_URL_FAILED","SESSION_EXPIRED","UNKNOWN"],"type":"string"},"retryHint":{"type":"string","minLength":1},"recoverable":{"type":"boolean"},"userMessage":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Render Error State Widget","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_error_state","displayName":"Render Error State Widget"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=carhopp-A-driving-journal-Portugal&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AuY2FyaG9wcC5ib3QvbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22carhopp-A-driving-journal-Portugal%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.carhopp.bot%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22carhopp-A-driving-journal-Portugal%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.carhopp.bot%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=carhopp+%E2%80%94+A+driving+journal+%E2%80%94+Portugal&connectorUrl=https%3A%2F%2Fmcp.carhopp.bot%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"carhopp-A-driving-journal-Portugal\" --url \"https://mcp.carhopp.bot/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/carhopp-mcp-39877f7d44","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/carhopp-mcp-39877f7d44/tools/{tool}","mcpServerUrl":"https://mcp.carhopp.bot/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/carhopp-mcp-39877f7d44?live=1"}