# Omio MCP tools

> Every Omio MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/omio

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

10 tools for Omio on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Omio account
- Integration page: https://cotlet.dev/integrations/omio-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `omio_search_trips` | read | Trains, buses, flights and ferries between two places on a date, with times, duration, changes, operator and price. |
| `omio_get_trip` | read | Legs of one trip and its fare options with their conditions: exchangeable, refundable, Omio Flex. |
| `omio_list_bookings` | read | Bookings from Your Bookings with route, date, operator and status. |
| `omio_get_booking` | read | Journey, passengers, fare conditions, Omio Flex, confirmation status and price paid for one booking. |
| `omio_get_tickets` | read | The tickets Your Bookings shows for a confirmed booking. |
| `omio_get_change_options` | read | For an exchangeable fare: the travel options for a new date and the fee for each. |
| `omio_get_cancellation_quote` | read | Refund amount and non-refundable fees before you cancel, or why the fare cannot be cancelled online. |
| `omio_book_trip` | write | Book a fare on your account. You confirm the total, including the service fee, before anything is paid. |
| `omio_change_booking` | write | Switch an exchangeable ticket to another departure. You confirm the fee first. |
| `omio_cancel_booking` | write | Cancel a refundable booking, or one with Omio Flex, and get the refund Omio quotes. |

## Search trips

MCP tool: `omio_search_trips`

Access: read.

Searches Omio for one route and date. Each result has an operator, departure and arrival, duration, number of changes and the lowest price, so your agent can rank by price or travel time. Pass the trip_id of a result to get_trip for its fares.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | string | yes | Departure city or station, e.g. "Amsterdam". |
| `to` | string | yes | Arrival city or station. |
| `date` | date | yes | Departure date. |
| `return_date` | date | no | Return date for a round trip. |
| `passengers` | object | no | Count per passenger type, as in the Omio search form, e.g. { "adult": 2 }. Default: 1 adult. |
| `modes` | string[] | no | Any of train, bus, flight, ferry. Default: all. |
| `limit` | integer | no | 1 to 50. Default: 20. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_search_trips",
    "arguments": {
      "from": "Amsterdam",
      "to": "to",
      "date": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "trips": [
      {
        "trip_id": "trp_7f3k29qa",
        "mode": "train",
        "operator": "Deutsche Bahn",
        "departs": "2026-11-19T09:37:00+01:00",
        "arrives": "2026-11-19T17:05:00+01:00",
        "duration": "7h 28m",
        "changes": 1,
        "price": {
          "amount": 89,
          "currency": "EUR"
        }
      },
      {
        "trip_id": "trp_2c9d41bz",
        "mode": "bus",
        "operator": "FlixBus",
        "departs": "2026-11-19T10:15:00+01:00",
        "arrives": "2026-11-19T22:40:00+01:00",
        "duration": "12h 25m",
        "changes": 0,
        "price": {
          "amount": 54.99,
          "currency": "EUR"
        }
      },
      {
        "trip_id": "trp_5a1h88mx",
        "mode": "flight",
        "operator": "Lufthansa",
        "departs": "2026-11-19T11:20:00+01:00",
        "arrives": "2026-11-19T12:45:00+01:00",
        "duration": "1h 25m",
        "changes": 0,
        "price": {
          "amount": 142,
          "currency": "EUR"
        }
      }
    ]
  },
  "isError": false
}
```

## Get trip

MCP tool: `omio_get_trip`

Access: read.

Returns the legs of one search result and every fare option for it with the price and its conditions. Exchangeable decides whether you can change the ticket online later; refundable decides whether you can cancel it online. Pass fare_id to book_trip.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `trip_id` | string | yes | Trip ID from search_trips. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_get_trip",
    "arguments": {
      "trip_id": "trip_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "trip_id": "trp_7f3k29qa",
    "mode": "train",
    "operator": "Deutsche Bahn",
    "legs": [
      {
        "from": "Amsterdam Centraal",
        "to": "Köln Hbf",
        "departs": "2026-11-19T09:37:00+01:00",
        "arrives": "2026-11-19T12:19:00+01:00"
      },
      {
        "from": "Köln Hbf",
        "to": "München Hbf",
        "departs": "2026-11-19T12:49:00+01:00",
        "arrives": "2026-11-19T17:05:00+01:00"
      }
    ],
    "fares": [
      {
        "fare_id": "fare_2nd_refundable",
        "class": "2nd",
        "price": {
          "amount": 89,
          "currency": "EUR"
        },
        "exchangeable": false,
        "refundable": true,
        "omio_flex_available": true
      },
      {
        "fare_id": "fare_2nd_saver",
        "class": "2nd",
        "price": {
          "amount": 69,
          "currency": "EUR"
        },
        "exchangeable": false,
        "refundable": false,
        "omio_flex_available": true
      }
    ]
  },
  "isError": false
}
```

## List bookings

MCP tool: `omio_list_bookings`

Access: read.

Reads Your Bookings and returns the trips on your account, upcoming by default, with route, departure, operator and status. Use booking_id with the other booking tools.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | upcoming, past, cancelled or all. Default: upcoming. |
| `limit` | integer | no | 1 to 100. Default: 20. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_list_bookings",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "bookings": [
      {
        "booking_id": "OM58214793",
        "route": "Amsterdam Centraal to München Hbf",
        "departs": "2026-11-19T09:37:00+01:00",
        "operator": "Deutsche Bahn",
        "status": "confirmed"
      },
      {
        "booking_id": "OM61903278",
        "route": "Paris Gare du Nord to Bruxelles-Midi",
        "departs": "2026-11-18T09:13:00+01:00",
        "operator": "Eurostar",
        "status": "confirmed"
      },
      {
        "booking_id": "OM47720516",
        "route": "Madrid Atocha to València Joaquín Sorolla",
        "departs": "2026-12-03T08:20:00+01:00",
        "operator": "Renfe",
        "status": "confirmed"
      }
    ]
  },
  "isError": false
}
```

## Get booking

MCP tool: `omio_get_booking`

Access: read.

Returns one booking: the journey, travelers, fare conditions (exchangeable, refundable), whether Omio Flex was added, the confirmation status and the price paid. Your agent reads the conditions to know whether it can still change or cancel the trip.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_get_booking",
    "arguments": {
      "booking_id": "booking_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM58214793",
    "status": "confirmed",
    "route": "Amsterdam Centraal to München Hbf",
    "departs": "2026-11-19T09:37:00+01:00",
    "operator": "Deutsche Bahn",
    "passengers": [
      {
        "first_name": "Alex",
        "last_name": "Example"
      }
    ],
    "fare": {
      "class": "2nd",
      "exchangeable": false,
      "refundable": true
    },
    "omio_flex": false,
    "total": {
      "amount": 92.98,
      "currency": "EUR"
    }
  },
  "isError": false
}
```

## Get tickets

MCP tool: `omio_get_tickets`

Access: read.

Returns the ticket entries Your Bookings shows for a confirmed booking: the type of each ticket and a link to it where Omio offers one. A booking that is not confirmed has no tickets yet and the call says so.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_get_tickets",
    "arguments": {
      "booking_id": "booking_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM58214793",
    "tickets": [
      {
        "passenger": "Alex Example",
        "type": "e-ticket",
        "url": "https://www.omio.com/mybookings"
      }
    ]
  },
  "isError": false
}
```

## Get change options

MCP tool: `omio_get_change_options`

Access: read.

Returns the other travel options Omio offers for a new date on an exchangeable booking, each with the price difference and fee. Omio allows online changes only for exchangeable fares; for any other fare the call returns why the ticket cannot be changed online. Pass option_id to change_booking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |
| `date` | date | yes | New departure date. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_get_change_options",
    "arguments": {
      "booking_id": "booking_8c41d2",
      "date": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM61903278",
    "options": [
      {
        "option_id": "opt_8841",
        "departs": "2026-11-20T15:13:00+01:00",
        "arrives": "2026-11-20T16:35:00+01:00",
        "price_difference": {
          "amount": 12,
          "currency": "EUR"
        },
        "fee": {
          "amount": 5,
          "currency": "EUR"
        },
        "total": {
          "amount": 17,
          "currency": "EUR"
        }
      },
      {
        "option_id": "opt_8842",
        "departs": "2026-11-20T17:43:00+01:00",
        "arrives": "2026-11-20T19:05:00+01:00",
        "price_difference": {
          "amount": 20,
          "currency": "EUR"
        },
        "fee": {
          "amount": 5,
          "currency": "EUR"
        },
        "total": {
          "amount": 25,
          "currency": "EUR"
        }
      }
    ]
  },
  "isError": false
}
```

## Get cancellation quote

MCP tool: `omio_get_cancellation_quote`

Access: read.

Returns the refund Omio would pay if you cancelled now, with the service fee shown apart because Omio lists it as non-refundable. Omio allows online cancellation only for a refundable fare or a booking with Omio Flex; for other fares the call returns why it cannot be cancelled online. Nothing is cancelled.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_get_cancellation_quote",
    "arguments": {
      "booking_id": "OM47720516"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM47720516",
    "cancellable": true,
    "refund": {
      "amount": 42.5,
      "currency": "EUR"
    },
    "non_refundable": {
      "service_fee": 2.5,
      "currency": "EUR"
    },
    "paid": {
      "amount": 45,
      "currency": "EUR"
    }
  },
  "isError": false
}
```

## Book trip

MCP tool: `omio_book_trip`

Access: write. Confirm: waits for the user's OK before it runs.

Books the fare you pick from get_trip with Omio's checkout. The total includes Omio's service fee. If your bank asks you to approve the payment, the call returns a link for you to finish it; Cotlet never bypasses that step. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `trip_id` | string | yes | Trip ID from search_trips. |
| `fare_id` | string | yes | Fare option from get_trip. |
| `passengers` | object[] | yes | One entry per traveler: first_name, last_name, and any extra detail the travel company asks for. |
| `seat_preference` | enum | no | window, aisle or any, where the travel company offers seat choice. Default: any. |
| `add_omio_flex` | boolean | no | Add Omio Flex to the booking. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_book_trip",
    "arguments": {
      "trip_id": "trp_7f3k29qa",
      "fare_id": "fare_2nd_refundable",
      "passengers": [
        {
          "first_name": "Alex",
          "last_name": "Example"
        }
      ],
      "add_omio_flex": false
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM58214793",
    "status": "confirmed",
    "route": "Amsterdam Centraal to München Hbf",
    "departs": "2026-11-19T09:37:00+01:00",
    "operator": "Deutsche Bahn",
    "total": {
      "amount": 92.98,
      "currency": "EUR",
      "fare": 89,
      "service_fee": 3.98
    }
  },
  "isError": false
}
```

## Change booking

MCP tool: `omio_change_booking`

Access: write. Confirm: waits for the user's OK before it runs.

Switches an exchangeable ticket to the option you pick from get_change_options. The price difference and the fee are charged as shown there. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |
| `option_id` | string | yes | Travel option from get_change_options. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_change_booking",
    "arguments": {
      "booking_id": "OM61903278",
      "option_id": "opt_8841"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM61903278",
    "status": "changed",
    "departs": "2026-11-20T15:13:00+01:00",
    "charged": {
      "price_difference": 12,
      "fee": 5,
      "total": 17,
      "currency": "EUR"
    }
  },
  "isError": false
}
```

## Cancel booking

MCP tool: `omio_cancel_booking`

Access: write. Confirm: waits for the user's OK before it runs.

Cancels one booking that Omio lets you cancel online: a refundable fare, or a booking with Omio Flex, which cancels through it. The refund is the amount from get_cancellation_quote. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from list_bookings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "omio_cancel_booking",
    "arguments": {
      "booking_id": "booking_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "OM47720516",
    "status": "cancelled",
    "refund": {
      "amount": 42.5,
      "currency": "EUR"
    },
    "non_refundable": {
      "service_fee": 2.5,
      "currency": "EUR"
    }
  },
  "isError": false
}
```
