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)
- Registration (once, on load). The page feature-detects WebMCP and registers every tool group. The agent discovers the resulting catalog.
- Invocation (per request). The agent calls a tool with a typed input. The
tool's
executefunction talks to the backend, then wraps the result in the standardok/failenvelope. - Acting on the result. The agent reads
data(and optionalmarkdown), and can useurlto 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 areYYYY-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_userpayload 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
- chatgpt
- chome
- google-chome
- mcp
- node.js
- openweb
- react
- typescript
- webmcp
Log in or sign up for Devpost to join the conversation.