← Files GoCycling AIARCHIVED FILE

plugin.json

5.55 KB · Nov 3, 2026 · 06:11 UTC

↓ Download file

{
  "name": "gocycling",
  "version": "0.18.0",
  "description": "Plan cycling, gravel and MTB routes on real OpenStreetMap data with gocycling.ai.",
  "author": {
    "name": "gocycling.ai",
    "url": "https://gocycling.ai"
  },
  "homepage": "https://gocycling.ai",
  "license": "UNLICENSED",
  "keywords": [
    "cycling",
    "routing",
    "gpx",
    "openstreetmap"
  ],
  "extensions": {
    "com.openai": {
      "review": {
        "demo_recording_url": "https://youtu.be/dmgfpnbc3IU",
        "test_cases": {
          "positive": [
            {
              "description": "Plan one short paved loop for a road bike.",
              "prompt": "Plan a 6 km loop from Basel SBB for a road bike, on paved roads.",
              "tools_triggered": "geocode, generate_loop_route",
              "expected_behavior": "Return one saved loop using the road-bike and paved-road preferences, targeting 6 km and measuring under 10 km. Report its actual distance and surface information honestly."
            },
            {
              "description": "Plan a short one-way ride on paved roads for a road bike. Use a separate conversation from case 1.",
              "prompt": "Plan a road bike ride from Basel SBB to Basel Dreispitz station on paved roads, under 10 km.",
              "tools_triggered": "geocode, calculate_route",
              "expected_behavior": "Return one one-way ride between the stations, using a road bike and paved-road preference, with measured distance under 10 km. Do not add a return leg."
            },
            {
              "description": "Continue the conversation from case 1 and add one caf\u00e9 stop; reuse its saved loop.",
              "prompt": "Add a caf\u00e9 stop about halfway around the loop. Keep the whole ride under 10 km.",
              "tools_triggered": "find_route_stops, get_standing_request, refine_route",
              "expected_behavior": "Find a real caf\u00e9 near the measured midpoint and add it to a new version of the existing loop, preserving the road bike, paved-road preference and start. Report its actual position and the new distance; if no suitable stop fits under 10 km, explain that and keep the original."
            },
            {
              "description": "Continue the loop conversation from case 3 and change its traffic preference without starting a new trip.",
              "prompt": "Avoid busy roads on that loop. Keep it under 10 km.",
              "tools_triggered": "get_standing_request, refine_route",
              "expected_behavior": "Refine the existing loop to avoid busy roads while retaining its road bike, paved-road preference, caf\u00e9 stop, start and distance target. Report the resulting measured distance and any unmet preference; the route must remain under 10 km."
            },
            {
              "description": "Import a tiny three-point GPX and obtain its owner download link.",
              "prompt": "Import this GPX and give me its download link: <gpx version=\"1.1\" creator=\"review-fixture\" xmlns=\"http://www.topografix.com/GPX/1/1\"><trk><name>Review track</name><trkseg><trkpt lat=\"47.5500\" lon=\"7.5900\"><ele>270</ele></trkpt><trkpt lat=\"47.5510\" lon=\"7.5910\"><ele>275</ele></trkpt><trkpt lat=\"47.5520\" lon=\"7.5920\"><ele>272</ele></trkpt></trkseg></trk></gpx>",
              "tools_triggered": "import_gpx, export_gpx",
              "expected_behavior": "Import the three-point track without rerouting it and return the owner GPX download link for that same route. Do not claim that returning the link saved a file on the reviewer\u2019s device."
            }
          ],
          "negative": [
            {
              "description": "Handle an unsupported flight-booking request. Explain that the plugin cannot book flights, and do not claim that a reservation or purchase was made.",
              "prompt": "Book me a flight from Zurich to Lisbon next Friday."
            },
            {
              "description": "Handle an unsupported calendar-change request. Explain that the plugin cannot read or change the calendar, and do not claim that the meeting was moved.",
              "prompt": "Move my team meeting to 10 tomorrow morning."
            },
            {
              "description": "Handle a standalone live-weather request. Explain that the plugin cannot provide a verified standalone live forecast, and do not invent current weather or claim to have checked a forecast.",
              "prompt": "What is the live weather forecast in Basel for tomorrow? I do not need a route."
            }
          ]
        }
      },
      "interface": {
        "displayName": "GoCycling AI",
        "shortDescription": "AI cycling route planner",
        "longDescription": "Plan, inspect, refine and export cycling routes on real OpenStreetMap data through the gocycling.ai MCP server.",
        "developerName": "gocycling.ai",
        "category": "Travel",
        "capabilities": [
          "Interactive",
          "Write"
        ],
        "websiteURL": "https://gocycling.ai",
        "supportURL": "https://gocycling.ai/contact",
        "privacyPolicyURL": "https://gocycling.ai/privacy",
        "termsOfServiceURL": "https://gocycling.ai/terms",
        "defaultPrompt": [
          "Plan a 50 km gravel loop from Basel",
          "Ride from Zurich to Lucerne",
          "Analyze my ride GPX"
        ],
        "brandColor": "#0e6e80",
        "brandColorDark": "#4fb3c6",
        "logo": "./assets/logo.png",
        "composerIcon": "./assets/logo.png"
      },
      "apps": "./.app.json"
    }
  },
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json"
}

SHA-256: 22883e858f7ea6c331147259825e4c3d6c00955b35d6450c6ca0438c5b63cb4e