@furlpay/travel-mcp

@furlpay/travel-mcp

Enables AI agents to autonomously search, pay, and book travel by integrating Travala's travel inventory with FurlPay's payment rails, supporting both crypto-native and legacy payment methods.

Category
访问服务器

README

@furlpay/travel-mcp — FurlPay Travels

The payment & orchestration layer for agentic travel. This MCP server composes Travala's Travel MCP (search 2.2M+ hotels + flights) with FurlPay's payment rails (pay), so an AI agent can search, budget-check, pay, and book travel autonomously.

Two payment routes, chosen per booking:

  • Travala / crypto-native → an x402 payment proof, settled in gasless USDC on Base. Accrues the 10% cbBTC developer rebate Travala pays on MCP-driven bookings.
  • Legacy Web2 merchant (Airbnb, Skyscanner…) → a single-use Visa virtual card, MCC-locked to travel and limited to the booking total.

Clone-and-run: with no keys, search and payment simulate end-to-end (no network) so you can drive the whole loop offline. Zero runtime dependencies.

Maintained by FurlPay · MIT licensed.

Use as an MCP server

{
  "mcpServers": {
    "furlpay-travels": {
      "command": "npx",
      "args": ["-y", "@furlpay/travel-mcp"],
      "env": {
        "FURLPAY_API_KEY": "fp_live_sk_...",     // omit for demo mode
        "TRAVALA_API_KEY": "...",                // omit for demo inventory
        "DUFFEL_API_KEY": "duffel_test_...",     // live flight offers (free test token, duffel.com)
        "FURLPAY_DEVELOPER_WALLET": "0xYourWallet" // receives the 7% cbBTC split
      }
    }
  }
}

Tools

Tool What it does
travel_search_stays Search Travala hotels for a city + date range
travel_search_flights Search flights for a route + date
travel_set_agent_budget Cap an agent's USDC travel spend
travel_authorize_booking Pay a booking — x402/USDC (Travala) or single-use MCC-locked Visa VCN (legacy)
travel_confirm_booking Confirm after passkey step-up
travel_cancel_booking Cancel & void the authorization
travel_list_rebates Accumulated 10% cbBTC rebates (7% dev / 3% treasury)

Trusted-agent mode (new in 0.2.0)

Visa's Trusted Agent Protocol went production-live in July 2026: agent-initiated payments carry cryptographic proof of agent identity and user consent. This server supports the same model via @furlpay/agent-trust — configure a MandateVerifier and every travel_authorize_booking call must present a mandateToken: an agent-signed intent under a user-signed spend mandate (budget cap, MCC allowlist, expiry, single-use, replay-safe).

import { TravelClient } from "@furlpay/travel-mcp";
import { AgentTrust, generateKeypair, issueMandate, createBookingToken } from "@furlpay/agent-trust";

const trust = new AgentTrust();
trust.registerUser(user.publicKeyPem);
trust.registerAgent(agent.publicKeyPem);

const travel = new TravelClient({ trust }); // bookings now REQUIRE a valid mandateToken

const mandate = issueMandate({ /* user signs: $500 cap, MCC 7011+4511, 7-day expiry */ });
const mandateToken = createBookingToken({ mandate, /* agent signs THIS exact intent */
  intent: { amountUsd: 320, source: "legacy", mcc: "7011" } });

const booking = await travel.authorizeBooking({ amountUsd: 320, source: "legacy", mandateToken });
// booking.trust = { agentKeyId, mandateId, remainingUsd }

The verifier checks the full chain — user signed the mandate, mandate names this agent, agent signed this exact amount/mcc/source, constraints hold, nonce never seen — before any x402 proof or virtual card is issued. Without a verifier configured, behavior is unchanged (back-compat).

Use as a library

import { TravelClient, MCC } from "@furlpay/travel-mcp";

const travel = new TravelClient({ developerWallet: "0xDev" });

const stays = await travel.searchStays({
  city: "London", checkIn: "2026-08-01", checkOut: "2026-08-04", maxNightlyUsd: 200,
});

travel.setAgentBudget("agent_1", 1000);

// Crypto-native route → x402/USDC on Base + 10% cbBTC rebate
const booking = await travel.authorizeBooking({
  amountUsd: stays[0].totalUsd, source: "travala", agentId: "agent_1", reference: stays[0].quoteId,
});
// booking.authorization.x402  ·  booking.rebate.developerUsd

// Legacy merchant route → single-use MCC-locked Visa VCN
const legacy = await travel.authorizeBooking({ amountUsd: 130, source: "legacy", mcc: MCC.LODGING });
// legacy.authorization.card = { last4, mccWhitelist, singleUse, limitUsd }

travel.listRebates();   // { developerTotalUsd, treasuryTotalUsd, accruals }

Live flight data (new in 0.3.0)

Set DUFFEL_API_KEY and travel_search_flights returns live real-time offers — NDC + GDS + LCC content from 300+ airlines via Duffel, cheapest first. Free test tokens (duffel_test_…) work out of the box against Duffel's sandbox inventory. Any Duffel failure falls back to Travala/demo, so the agent loop never breaks.

Why Duffel in mid-2026: Amadeus Self-Service shuts down July 17 2026, Kiwi's Tequila is closed to new partners, and Expedia/Booking gate API access behind commercial review — Duffel is the one top-1% supplier a developer can start on today with no contract.

How the routes map to reality

Route Rail Why
travala x402 → gasless USDC on Base, ~$0.01/booking The rail Travala's protocol accepts directly; earns the cbBTC rebate
legacy Single-use Visa VCN, MCC-locked (7011 lodging, 4511 airlines, 7512 car rental) Reaches Web2 travel merchants Travala doesn't cover; card can only spend on travel, up to the booking total

FurlPay's value here is the layer Travala doesn't provide: agent spend budgets, multi-token funding, VCN issuing for legacy merchants, and rebate accounting.

Run the demo

npm run example        # full search → pay → book → rebate flow, demo mode
npm start              # run the MCP server on stdio

Test

npm test               # tsc build + node --test (demo mode, no network)

The suite pins the contract: deterministic search, the x402 route's proof + exact 10%/(7/3) rebate math, the legacy route's single-use MCC-locked VCN, budget enforcement, the confirm/cancel lifecycle, rebate aggregation (excluding cancellations), and well-formed MCP tools.

Scope

This server orchestrates Travala search and FurlPay payments — it does not custody funds or settle on-chain itself; x402 settlement and card issuing happen in the FurlPay API, and inventory/fulfilment in Travala. Point it at your own accounts and it books on your behalf. Issuing travel cards and handling refunds carries money-transmission/merchant-compliance obligations — wire in FurlPay's compliance engine before going live.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选