find_nearby_experiences
Discover shows, events, and experiences near your location on tickadoo. Use this tool when sharing your location or seeking nearby activities.
Instructions
Find shows, events and experiences near a geographic location on tickadoo®. Use when a user shares their location or asks for things to do near them.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | Latitude | |
| longitude | Yes | Longitude | |
| radius_km | No | Search radius in km (default 25) | |
| language | No | Language code | en |
Implementation Reference
- src/shared/server.ts:130-164 (handler)Registration and implementation handler for the 'find_nearby_experiences' MCP tool. It uses `getProductsByLocation` to retrieve experiences and formats the output for the user.
server.tool( "find_nearby_experiences", "Find shows, events and experiences near a geographic location on tickadoo®. Use when a user shares their location or asks for things to do near them.", { latitude: z.number().describe("Latitude"), longitude: z.number().describe("Longitude"), radius_km: z.number().optional().default(25).describe("Search radius in km (default 25)"), language: z.string().optional().default("en").describe("Language code"), }, READ_ONLY_TOOL_ANNOTATIONS, async ({ latitude, longitude, radius_km, language }) => { try { const products = await getProductsByLocation(latitude, longitude, radius_km, language); if (!products.length) { return createTextResponse(`No experiences within ${radius_km}km. Try increasing the radius or searching a specific city.`); } const rankedProducts = sortProductsForDisplay(products); const topProducts = rankedProducts.slice(0, 12); return createTextResponse( `${buildShownResultsLabel(topProducts.length, products.length, "nearby")}\n\n${topProducts.map(product => formatProduct(product)).join("\n\n")}`, { structuredContent: { latitude, longitude, radiusKm: radius_km, totalExperiences: products.length, experiences: topProducts.map(product => productStructuredData(product)), }, }, ); } catch (error) { return createTextResponse(`Error: ${getErrorMessage(error)}`, { isError: true }); } },