
Create a batch flight search. Searches multiple airlines asynchronously and returns results as they come in.
Get batch offer request status and results by ID. Poll until status is complete to get all offers.
Search for flights by creating an offer request. Specify origin, destination, dates, passengers, and cabin class. Returns available offers.
List offer requests with pagination. Use cursor from page_info for next page.
Get offer request details by ID. Returns the original search parameters and any returned offers.
List offers for an offer request with pagination. Sort by totalamount or totalduration. Use cursor from page_info for next page.
Get offer details by ID. Optionally return available services like bags and seats.
Update passenger details on an offer. Set name, loyalty accounts, or identity documents before booking.
Initiate cancellation of an order. Returns refund details and expiry. Must confirm with confirmordercancellation before expiry.
List order cancellations with pagination. Optionally filter by order ID. Use cursor from page_info for next page.
Get order cancellation details by ID. Returns refund amount, status, and expiry time.
Confirm an order cancellation. Must be confirmed before expiry. This action is irreversible.
Request to change an order's flights. Specify slices to add and remove. Returns available change offers.
Get order change request details by ID. Returns available change offers.
List change offers for an order change request. Compare prices and penalties. Use cursor from page_info for next page.
Select an order change offer to proceed with. Must confirm with confirmorderchange before expiry.
Get order change details by ID. Returns change costs, new total, and confirmation status.
Confirm an order change. Optionally provide payment if the change costs extra. This action is irreversible.
Book a flight by creating an order. Requires offer IDs, payment details, and passenger information. Use list_offers to find offers first.
List orders with pagination. Filter by booking reference or awaiting payment status. Use cursor from page_info for next page.
Get order details by ID. Returns booking reference, passengers, slices, services, and payment status.
Update order metadata. Only custom metadata can be changed after booking.
Search for flights with partial offers. Returns offers grouped by slice, allowing mix-and-match of airlines per leg.
Get partial offer request details by ID. Returns partial offers grouped by slice.
Create a payment for an order. Required for orders with awaitingpayment status. Use getorder to check payment status first.
List payments with pagination. Optionally filter by order ID. Use cursor from page_info for next page.
Get payment details by ID. Returns amount, currency, type, and associated order.
List airlines with pagination. Use cursor from page_info for next page.
Get airline details by ID. Returns name, IATA code, logos, and conditions of carriage URL.
List airports with pagination. Use cursor from page_info for next page.
Get airport details by ID. Returns name, IATA/ICAO codes, city, country, coordinates, and timezone.
List aircraft types with pagination. Use cursor from page_info for next page.
Get aircraft type details by ID. Returns name and IATA code.
List cities with pagination. Use cursor from page_info for next page.
Get city details by ID. Returns name, IATA code, and country code.
Search airports and cities by name. Returns matching places for use in flight searches.
List airline loyalty programmes with pagination. Use cursor from page_info for next page.
Get loyalty programme details by ID. Returns airline name and programme name.
Get seat maps for an offer. Returns cabin layouts with rows, seats, and availability for each flight segment.
Validate Duffel API credentials by testing authentication with a lightweight API call. Returns {success, message}.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It's an MCP server that connects your agents to Duffel's travel booking API via tools. Your agents can invoke these tools to search for flights, book orders, manage itinerary changes, process cancellations, and more.
Duffel doesn't offer an MCP server purpose built for its platform, but you can use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
create_offer_request: initiates a flight search by submitting origin, destination, dates, and passenger details to Duffel. Call this at the start of any booking workflow to retrieve a set of available fare optionslist_offers: retrieves the available fares returned from a completed offer request. Use this when an agent needs to evaluate and rank flight options before selecting one to bookcreate_order: books a selected offer by creating a confirmed order with passenger details and payment. Call this when the agent is ready to finalize a booking after a fare has been chosenget_order: fetches the full details of a confirmed booking, including flight segments, passenger info, and order status. Helpful when an agent needs to surface itinerary details or verify order state before taking a downstream actioncreate_order_cancellation: initiates a cancellation request for an existing order. Use this when an agent detects a trip cancellation event in another system and needs to begin the Duffel-side processconfirm_order_cancellation: finalizes a pending cancellation and processes the refund. Call this after reviewing cancellation conditions to complete the flow and record the outcome in the booking systemSeveral factors make Merge Agent Handler's Duffel MCP server worth choosing over a custom integration or community build:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Duffel and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Duffel data directly. The first time you use a Duffel tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Duffel MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Duffel without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.
IT also provisions access by role or group via SCIM. A travel manager, for example, gets Duffel access to book and manage flights, Expensify to track and reconcile travel costs, and Slack to coordinate itinerary approvals; while a travel coordinator gets Duffel access to handle booking changes and cancellations, Google Calendar to sync trip dates with team availability, and Gmail to manage traveler communications.
Every tool call an employee's AI makes to Duffel is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now