Inspiration

Today, travelers ask AI first before making decisions—asking conversational agents to plan itineraries, find ethical stays, and compare transport. But for a "people-first" grassroots organization like OpenmindProjects, spending money on expensive online ads or SEO agencies to show up in those searches is impossible. Every dollar goes directly to local community education, teacher training, and IT camps in Southeast Asia.

Commercial online travel agencies (OTAs) spend millions capturing visibility. We rely strictly on organic discovery and being recommended by AIs.

We asked: If travelers are asking AI first, how can a zero-budget NGO ensure AI agents accurately discover our work and connect travelers to our community projects?

That is why WebMCP is a complete game-changer for Openmind.Travel. By exposing our platform directly to browser-native AI agents via registerTool(), we make our community catalog instantly discoverable, transparent, and actionable—leveling the playing field without spending a dime on ad budget.


What It Does

Openmind.Travel exposes clean client-side tools directly inside the browser runtime. Without handling payments or managing direct travel inventory, our WebMCP integration lets an AI agent:

  • Discover Ethical Travel: Search community-led tours, local guides, destinations, and authentic itineraries.
  • Compare Transport & Logistics: Retrieve partner flight and ground transport options (in USD by default, with multi-currency support).
  • Explore Real Impact: View UN SDG-aligned causes, track real fundraising progress, read traveler stories, and discover "impact treasures" (geocaches at project sites).
  • Reviewable Affiliate Hand-off: Generate direct, reviewable partner checkout URLs where standard affiliate commissions automatically fund local Openmind Projects initiatives.

Why WebMCP is Game-Changing for Us

1. Built for the "Ask AI First" Era

When users ask their browser AI agent to find ethical travel in Southeast Asia, WebMCP allows the agent to execute structured queries (searchTours, getImpactMetrics) directly on Openmind.Travel instead of guessing or scraping stale HTML.

2. Zero-Budget Organic Visibility

Grassroots NGOs cannot outspend multi-billion-dollar OTAs on search ads. WebMCP turns Openmind.Travel into an AI-native API layer inside the browser, securing organic recommendations through structured data quality rather than marketing spend.

3. Built-In Trust & Seamless User Experience

Action happens directly in the user's active browser tab. The AI presents clear options with reviewable affiliate links, ensuring full transparency: travelers pay normal prices on partner sites, while affiliate commissions automatically fund local learning camps.


Key Comparison

Feature / Aspect Traditional Travel Affiliate Sites Openmind.Travel via WebMCP
Visibility Strategy Multi-million dollar paid ads & aggressive SEO. Organic AI discovery via structured registerTool() APIs.
Discovery Method Manual search across dozens of browser tabs. Conversational AI discovery ("Ask AI first") with structured tool calls.
Community Impact Profits kept by corporate intermediaries. Partner affiliate commissions fund local education projects automatically.
Integration Model Fragile DOM scraping or static links. Native browser tool execution via navigator.modelContext.

Tech Stack

  • Protocol Standard: WebMCP (navigator.modelContext / registerTool())
  • Frontend Layer: React / JavaScript client runtime
  • Data Sources: Partner travel APIs (flights, transport) & Openmind Projects Community Impact Database

Tool catalog

Tools are grouped by domain and map to existing OpenmindTravel JSON endpoints.

  • Destinations — search_destinations, list_categories, list_countries, get_popular_destinations, autocomplete_airport
  • Tours — search_tours, get_tour_facets, get_tour, list_volunteer_projects, get_partner, search_suggestions
  • Guides — list_country_guides, get_country_guide, search_youtube_videos, list_airline_guides, get_airline_guide
  • Trips — plan_trip, list_trip_ideas, get_trip_idea, save_trip_idea, get_itinerary, save_itinerary
  • Flights — search_flights, get_flight_calendar
  • Transport — search_transport
  • Community — get_globie_pet, list_community_posts, search_community_posts, get_community_post
  • Give / Impact — get_impact_overview, list_impact_causes, get_impact_cause, get_impact_travel_options, list_impact_treasures, get_impact_treasure, get_impact_stories, start_donation

Result envelope

Every tool returns a consistent, agent-friendly envelope so agents parse outcomes reliably:

// Success
{ success: true, data: { /* ... */ }, markdown?: string, url?: string }

// Failure
{ success: false, error: { code: string, message: string } }

url hands a navigation side-effect to the agent (a prefilled search or a booking step), while markdown carries a human/agent-readable summary.

How we built it

Openmind.Travel (the responsible-travel platform) already existed before the submission period.

The WebMCP layer described here is the new work we built for\ this hackathon, so the platform can be used by AI agents directly in the browser.

We wrote a lightweight, dependency-free TypeScript layer that feature-detects document.modelContext and navigator.modelContext, then registers 8 tool groups against our existing Express + PostgreSQL backend. A shared http.ts helper (apiGet / apiPost) keeps requests and error envelopes consistent.

The "Give" tools reuse one source-of-truth impact data module so the rendered page and the tools never disagree on figures. Donations default to USD and produce a ready_for_user hand-off with a PayPal checkout URL.

Architecture

File Purpose
types.ts Minimal type declarations for the WebMCP browser API (ModelContext, annotations).
http.ts Shared request helpers (apiGet, apiPost) and the ok / fail result envelope.
registerTools.ts Entry point that feature-detects WebMCP and registers every tool group.
tools/ One module per domain, each exporting a register*Tools(modelContext) function.

WebMCP flow

sequenceDiagram
    autonumber
    actor User
    participant Agent as Agent (ChatGPT / Chrome)
    participant Page as OpenmindTravel page
    participant MCP as document.modelContext
    participant Tool as WebMCP tools (tools/*.ts)
    participant API as Backend API

    User->>Page: Opens the app in a WebMCP-enabled browser
    Page->>MCP: registerWebMCPTools()
    MCP-->>Page: feature-detect (modelContext available?)
    Page->>MCP: registerTool({ name, description, inputSchema, execute })
    MCP-->>Agent: exposes the tool catalog

    Agent->>MCP: invoke tool with input
    MCP->>Tool: execute(input)
    Tool->>API: apiGet / apiPost (JSON)
    API-->>Tool: JSON response
    Tool-->>MCP: ok(data, markdown, url) / fail(error)
    MCP-->>Agent: tool result envelope
    Agent-->>User: summary + optional navigation (url)
  1. Registration (once, on load). The page feature-detects WebMCP and registers every tool group. The agent discovers the resulting catalog.
  2. Invocation (per request). The agent calls a tool with a typed input. The tool's execute function talks to the backend, then wraps the result in the standard ok / fail envelope.
  3. Acting on the result. The agent reads data (and optional markdown), and can use url to trigger navigation (e.g. a prefilled search or a booking step).

Security model

We treated security as a requirement from day one: nothing is exposed to other origins by default, the backend uses a CORS allow-list, destructive actions require consent, and all tool descriptions/inputs are bounded. Every tool declares its behavior through annotation hints so the agent and browser can apply the right guardrails:

Hint Meaning Where used
readOnlyHint No mutation All read/discovery tools
destructiveHint Irreversible write create_booking (persists a booking)
idempotentHint Safe to retry save_trip_idea, save_itinerary
untrustedContentHint Returns user-generated/external data Community posts, impact stories, YouTube results
openWorldHint May access the network Tools that call the backend / external APIs

Additional constraints:

  • Character budgets — tool names ≤ 30 chars, descriptions ≤ 500 chars, parameter descriptions ≤ 150 chars, and output capped at 1.5K chars via a truncate() helper so results stay fast and predictable.
  • Input validation — schemas use additionalProperties: false, Nostr public keys/event ids match a 64-char hex pattern, airport codes match [A-Z]{3}, dates are YYYY-MM-DD, and collection limits are clamped to a safe maximum.
  • Consent — destructive tools state "Confirm with the user before calling", and hand-off tools return a ready_for_user payload for explicit review.

The whole thing is progressive enhancement: if WebMCP isn't available, it is a silent no-op and the site works exactly as before.

Challenges we ran into

  • ChatGPT & Codex outage. Elevated errors across ChatGPT and Codex (OpenAI status) kept the ChatGPT desktop tool from working reliably, so we validated WebMCP with the Model Context Tool Inspector extension instead.
  • Safe defaults vs. capability. Making every tool read-only-first and consent-gated was harder than exposing raw power — we chose safety.

Accomplishments that we're proud of

  • A working WebMCP tool suite spanning travel and social impact, not just another search wrapper.
  • Full security audit implemented — output truncation, annotation hints, strict input validation, and CORS allow-listing.
  • A single source of truth for impact data so the product never lies to users or agents.
  • Everything documented: README with a Mermaid flow diagram, security audit, and a demo script.

What we learned

  • The biggest thing we learned: letting the browser expose tools natively means an agent can act right where the user already is.
  • Responsible defaults (USD-first, confirm-before-destructive, bounded output) make agent integrations dramatically more trustworthy.
  • Keeping data in one module eliminates the drift that breaks agent trust.

What's next for WebMCP — Openmind.Travel Agent Tool

  • Live funding feeds to replace static impact figures with a real backend.
  • Book → cause attribution so a tour can trace its actual donation impact.
  • More providers (Viator, Bókun, 12Go) wired into the same tools.
  • Voice + mobile agents beyond the desktop browser.
  • Publish to WebMCP tool directories so any agent can discover us.

Built With

Share this project:

Updates

Submission history