Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Mit Google anmelden, um Bewertungen zu schreiben.Prototyp · alle 30 Min. aktualisiert
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

Trips

von peterbartschVersion 1.3.5i★ 0iComputer oder Cloud
Name in der Registryus.thistripbtw/trips

So installierst du es

What it does

Hand someone a complete trip as a private, editable map link. No account, no API key, no card.

  • Connects Computer oder Cloud
  • Account or key No key needed
  • Category Reisen, Karten & Wetter

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

5/5 Prüfungen bestanden · Was du fragst, läuft über den Server des Anbieters (thistripbtw.us) · ✓ Befehle geprüft am 13. Nov. 2026

Zuerst: Welche KI nutzt du?

Wähle deine App, dann erscheinen die Schritte unten.

Klappt mit Claude · etwa 2 Min.

Kein Schlüssel, nichts zu installieren · Einmal auf claude.ai oder in der Desktop-App einrichten, dann im Chat nutzen · kostenlose Konten können 1 hinzufügen · bei Team/Enterprise fügt ein Owner ihn hinzu

  1. Öffne die Connectors-Seite von Claude

    CustomizeConnectors

    CustomizeConnectors1Add2https://…3Add4
  2. Klicke „Add“ → „Custom“ → „Web“ und fülle diese 2 Felder aus

    Kopiere jeden Wert in das gleichnamige Feld in Claude und klicke Continue

    Name · NameTrips
    Remote MCP server URL · Adressehttps://thistripbtw.us/mcp

    Klicke auf der von Claude erkannten Anmelde-Seite auf Continue · wähle bei Authentication, was der Anbieter angibt (Sign in now, Sign in when needed oder No sign in), dann Add

  3. Im Chat einschalten

    +ConnectorsTrips

  4. Ausprobieren

    Nutze Trips und sag mir, was du für mich tun kannst; zeig mir dann eine Sache

    ✓ Wenn Claude sagt, dass es Trips nutzt, oder ein Werkzeug von Trips in der Antwort zeigt, bist du verbunden

Menünamen am 11. Nov. 2026 mit der Hilfe von Anthropic abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen

Klappt mit ChatGPT je nach Tarif

Volles MCP: ChatGPT Business, Enterprise oder Edu im Web · Pro: verbindet mit Lese-/Abrufrechten, Werkzeuge, die Daten ändern, gehen evtl. nicht · Plus: in der Doku nicht bestätigt; siehst du auf der Plugins-Seite eine Option für eigene MCP-Server, kannst du es versuchen · nur Web

  1. In ChatGPT im Web die Seite zum Hinzufügen von MCP öffnen

    Plugins+Add custom MCP server

    ChatGPTPlugins1+2https://…3Create4
  2. Name und Adresse eintragen

    Namen eingeben, Adresse unter Connection einfügen, Risikohinweis abhaken und Create as a plugin klicken

    Name · NameTrips
    Connection · Adressehttps://thistripbtw.us/mcp
  3. Trips im Chat auswählen

    Neuen Chat öffnen und vor dem Tippen Trips aus deinen Plugins wählen

  4. Ausprobieren

    Nutze Trips und sag mir, was du für mich tun kannst; zeig mir dann eine Sache

    ✓ Wenn ChatGPT sagt, dass es Trips nutzt, oder ein Werkzeug von Trips in der Antwort zeigt, bist du verbunden

Menünamen am 11. Nov. 2026 mit der Hilfe von OpenAI abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen

Klappt mit Claude Code · etwa 2 Min.

Kein Schlüssel, nichts zu installieren

  1. Terminal öffnen

    Mac: Command+Leertaste drücken und Terminal tippen · Windows: PowerShell öffnen

  2. Diesen Befehl einfügen und Enter drücken

    claude mcp add --transport http --scope user trips https://thistripbtw.us/mcp
  3. /mcp in Claude Code eingeben

    Trips sollte in der Liste als verbunden erscheinen

  4. Ausprobieren

    Nutze Trips und sag mir, was du für mich tun kannst; zeig mir dann eine Sache

    ✓ Wenn Claude Code sagt, dass es Trips nutzt, oder ein Werkzeug von Trips in der Antwort zeigt, bist du verbunden

Menünamen am 11. Nov. 2026 mit der Hilfe von Anthropic abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen

Klappt mit Cursor · etwa 2 Min.

Kein Schlüssel, nichts zu installieren

  1. Mit diesem Button Cursor öffnen

    In Cursor öffnen

    Cursor fragt nach einer Bestätigung; klicke Install

  2. KI-Chat in Cursor im Agent-Modus öffnen

  3. Ausprobieren

    Nutze Trips und sag mir, was du für mich tun kannst; zeig mir dann eine Sache

    ✓ Wenn Cursor sagt, dass es Trips nutzt, oder ein Werkzeug von Trips in der Antwort zeigt, bist du verbunden

Menünamen am 11. Nov. 2026 mit der Hilfe von Cursor abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen

Klappt mit VS Code · etwa 2 Min.

Kein Schlüssel, nichts zu installieren

  1. Mit diesem Button VS Code öffnen

    In VS Code öffnen

    VS Code fragt nach einer Bestätigung; klicke Install

  2. KI-Chat in VS Code im Agent-Modus öffnen

  3. Ausprobieren

    Nutze Trips und sag mir, was du für mich tun kannst; zeig mir dann eine Sache

    ✓ Wenn VS Code sagt, dass es Trips nutzt, oder ein Werkzeug von Trips in der Antwort zeigt, bist du verbunden

Menünamen am 11. Nov. 2026 mit der Hilfe von VS Code abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen

Andere Apps mit MCP, etwa Windsurf, Zed oder Gemini CLI, fügen Server unterschiedlich hinzu. Sieh in der App-Liste nach

Alle Apps mit MCP ansehen →

Adresse für Apps, die über das Web verbinden

Adressehttps://thistripbtw.us/mcp

JSON-Einstellungen stehen unten unter „Für Entwickler“

Hängst du fest? Frag Leute, die Trips nutzen💬 Diskussion →
Für Entwickler: Terminal-Befehle und JSON-Einstellungen

Über das Web

Claude Code

claude mcp add --transport http --scope user trips https://thistripbtw.us/mcp

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "trips": {
      "url": "https://thistripbtw.us/mcp"
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "trips": {
      "type": "http",
      "url": "https://thistripbtw.us/mcp"
    }
  }
}

Auf deinem Computer installiert

Claude Code

claude mcp add --scope user trips -- npx -y thistripbtw-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "trips": {
      "command": "npx",
      "args": [
        "-y",
        "thistripbtw-mcp"
      ]
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "trips": {
      "command": "npx",
      "args": [
        "-y",
        "thistripbtw-mcp"
      ]
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "trips": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "thistripbtw-mcp"
      ]
    }
  }
}

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Auf einen Blick

Downloads pro Wochei
90/Wo.
Bestätigte Domain
✓ thistripbtw.us
Verbindung
Computer oder Cloud
Transport
stdio, streamable-http
Neueste Versioni
1.3.5
In der Registry veröffentlichti
30. Sept. 2026
Code zuletzt geänderti
9. Nov. 2026
Entwickler
peterbartsch
Pakete
npm: thistripbtw-mcp
Registry-Status
Aktiv

Welche Apps ihn nutzen können

Basierend darauf, wie sich dieser Server verbindet, und auf der eigenen Doku jeder App, geprüft am 10. Nov. 2026.

Verbinden sich über das Internet in

ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast

Laufen auf deinem Computer in

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

Alle Apps, mit Vor- und Nachteilen →

Was er kann

Tool-Namen und -Beschreibungen genau so, wie der Server sie am 13. Nov. 2026 gemeldet hat. Geschrieben hat sie der Entwickler, nicht wir; wir zeigen sie als reinen Text.

  • build_trip_link

    Start here for any trip, road trip or itinerary. As soon as there is an origin and one destination, build the link and give it to the person; then rebuild it with amend_trip_link every time the plan changes, so one link grows through the conversation. It opens as a private, edita

  • find_place

    Turn a place name into coordinates for build_trip_link — towns, cities, airports (IATA or name), parks, trailheads. Returns up to six candidates with lat/lng and where each one is, so you can pick the right Reno. This is the ONLY step that needs coordinates and you should not gue

  • amend_trip_link

    Update a trip link you already built — add legs, change one leg's fields, replace them all, rename, or drop one — and get the new link back. Use this instead of building a fresh link every time the plan changes, so the person holds one link that grows. To change ONE leg (its lodg

  • read_trip_link

    Use when someone gives you a this trip, btw link and you need to know what is actually in it — to summarise the plan, answer a question about it, add a stop, or convert it to something else. Decodes the itinerary the link carries: origin, every leg in order, modes, dates, who is

  • read_kept_trip

    Use when someone gives you a KEPT this trip, btw link — one that looks like https://thistripbtw.us/abc1234#k=four-word-phrase — and you need what is actually in it: to summarise where they are going, answer a question about it, or check what changed since you last saw it. Returns

  • add_to_kept_trip

    Add a stop to a trip the person has KEPT (a link with #k=), on their behalf. Use when they say 'add X to the trip', 'we're stopping at Y on the way', 'put the hotel on it'. Needs their EDIT phrase — a view phrase can read but not write, and the tool says so. Writes exactly one st

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 15. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde über die Domain thistripbtw.us bestätigt (die Registry prüft, wem die Domain gehört)

  • ✓ Bestanden

    Wird noch gepflegt

    Code zuletzt geändert: vor 6 Tagen

  • ✓ Bestanden

    Hat eine Lizenz

    Nutzt MIT

  • ✓ Bestanden

    Endpunkt antwortet

    Antwort in 218 ms (HTTP 200)

  • – Nicht zutreffend

    Anmeldung mit OAuth

    Keine Anmeldung nötig

  • ✓ Bestanden

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Wir haben 6 Tool-Beschreibungen gelesen und keine versteckten Anweisungen an die KI gefunden

Diskussion

Fragen, Tipps teilen oder melden, dass etwas nicht geht. Sortiert nach „hilfreich“.

Noch keine Beiträge. Stell die erste Frage oder teile einen Tipp.

Beiträge hier stammen von Nutzern, nicht vom PopNx-Team.

Mit Google anmelden, um zu posten

Nutzerbewertungen

Noch keine Bewertungen

Mit Google anmelden, um zu bewerten

Im Vergleich mit anderen in Reisen, Karten & Wetteri

  • Mehr Sterne als 0 % der anderen 1891 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 39 % der anderen 1891 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 1891 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist Trips sicher?

Er hat 5 von 5 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.

Läuft er auf meinem Computer oder in der Cloud?

Beides geht: Installiere ihn auf deinem Computer oder verbinde dich mit der Cloud-Version.

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt vor 6 Tagen geändert, und die neueste Version (1.3.5) kam vor 2 Monaten in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL und funktioniert daher auch in Apps mit Remote-MCP, etwa ChatGPT im Web (volles MCP ab Business; Pro nur lesend).

Was kann ich stattdessen nutzen?

In derselben Kategorie: LetsFG — Flights & Hotels, Google Maps MCP Server, Mu

Andere in derselben Kategorie

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

LetsFG — Flights & Hotels

Search and book flights and hotels: hundreds of airlines, plus bookable hotel rates.

von LetsFGWeit verbreitet↓ 204/Wo.★ 2272Aktualisiert vor 2 Monaten

Computer oder Cloud

Google Maps MCP Server

18 Google Maps tools for AI agents — geocode, search, directions, weather, and more.

von cablateWachsend↓ 1257/Wo.★ 498Aktualisiert vor 2 Monaten

Läuft auf deinem Computer

Mu

News, web search, mail, markets, weather, places, files, calendar, contacts. 67 tools, one endpoint.

von microWachsend★ 439Aktualisiert vor 3 Monaten

Läuft in der Cloud✓ micro.mu

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

thistripbtw-mcp

Persistent, shareable travel workspaces for AI agents.

Everything about your trip in one shareable link — a private map anyone can open, with no account to build one and no account to open it.

An MCP server that hands someone that link, grows it as the plan changes, and reads it back. Six tools, and the first one is the point: build the link as soon as there is an origin and one destination, then amend it every time the plan moves. One resolves a place name to coordinates, one turns legs into a URL, one changes a URL you already built, one decodes a URL into the legs, one reads a trip the person has bought, and one adds a stop to it. The person opens it and their trip is already drawn on a real map — free, editable, theirs.

→ [What to say](https://thistripbtw.us/recipes) — the phrasing that triggers each tool, with the links those calls produced.

→ [thistripbtw.us](https://thistripbtw.us) — the human side, and the thing that pays for this. The server is free and asks for nothing; the site's one-time paid tiers fund it rather than an ad business or your data.

*Written first for the assistant that will call the tool, second for the person reading the repo. If you are that person: the site's source is thistripbtw (AGPL-3.0). This server is MIT and standalone on purpose — embed it wherever you like.*

Why it exists

An AI assistant generally cannot create an account or enter card details. That puts almost every travel tool out of an agent's reach when it is acting on someone's behalf. This one asks for nothing, so it stays reachable.

Connect

A URL, if your client takes one. Nothing to install, nothing to keep updated:

https://thistripbtw.us/mcp

Streamable HTTP, no key, no sign-up to start. That is the whole configuration.

A note on gateways. Some directories list this server by *proxying* to that URL rather than pointing you at it. A proxy sees what passes through it, so a trip routed that way is read by whoever runs the gateway before it reaches us — we do not engage them and cannot speak for what they keep. Use the URL directly, or run the file yourself, if that matters to you.

Or run it locally from npm. Node 18+, no dependencies, nothing to keep updated:

claude mcp add thistripbtw -- npx -y thistripbtw-mcp

Or fetch the one file and run that, if you would rather read the code than trust either a host or a package registry. This is the whole install:

curl -O https://thistripbtw.us/mcp/thistripbtw-mcp.mjs

claude mcp add thistripbtw -- node ./thistripbtw-mcp.mjs

Claude Desktop config

{

"mcpServers": { "thistripbtw": { "command": "npx", "args": ["-y", "thistripbtw-mcp"] } } }

Swap to "command": "node" with "args": ["/absolute/path/to/thistripbtw-mcp.mjs"] if you fetched the file instead.

Check it before you trust it — the self-test touches no network and needs no config:

npx -y thistripbtw-mcp --selftest

Both paths carry the same six tools and produce byte-identical links. The hosted one is tested against this file on every build — same tool list, same output — so the two cannot drift apart.

Step-by-step, with a worked example in JavaScript and Python: [thistripbtw.us/tutorials](https://thistripbtw.us/tutorials)

The tools

Start with the link, not after the plan. The description that shipped through 1.2.0 opened *"Use when someone has planned… a trip"*, and a model read that as a finishing step: it researched for four turns and built the link last, when the person asked. That is on us, not the model. 1.3.0 rewrote every description so the trigger is in the first eighty characters — all a deferred tool gets to show — and added the two tools that make "first" natural: find_place, so coordinates are looked up rather than remembered, and amend_trip_link, so one link grows through a conversation instead of a new one being thrown away each turn.

`find_place` — a place name in, up to six candidates out, each with coordinates and where it is, so you can pick the right Reno. Towns, cities, airports by name or IATA code, parks. This is the only step that needs the network besides the kept-trip tools; it asks thistripbtw.us, which answers from its own cache in front of a paced OpenStreetMap lookup. A place name is not personal data, and nothing about the person is sent.

`amend_trip_link` — a draft link plus changes, a new link back. add appends legs, update changes fields on one leg ([{leg: 2, set: {lodging: "Red Cliffs Lodge"}}], null clears a field), legs replaces them all, remove drops leg N, name and origin do what they say. No network, no password: the trip is inside the link. Tell the person the new link replaces the old one.

`add_to_kept_trip` — one stop, added to a trip the person has KEPT, on their behalf: *"add the hotel to the trip"*, *"we're stopping at Fisher Towers on the way."* Needs their EDIT phrase; a view phrase can read and is told it cannot write. Same network rule as read_kept_trip below, and the same warning: the link is a credential.

`read_trip_link` — a link in, the itinerary out. Origin, every leg in order, modes, dates, who is on which leg, flights and lodging. It returns the trip in the shape build_trip_link *accepts*, so reading a trip, changing one thing and building a new link is three lines and no translation. Nothing is fetched — the trip is inside the link, so this works offline like everything else here. Only draft links (#d=) carry a trip; a kept trip's /{slug}/#k= fragment is a password and its contents live on the server, which the tool says rather than failing obscurely.

`read_kept_trip` — a KEPT trip's link in, its itinerary out. Use it when somebody hands you https://thistripbtw.us/abc1234#k=four-word-phrase and you need what is in it. Returns the stops in order with dates, modes, lodging, notes, any hand-drawn path, and the track each belongs to — which vehicle or person, because a trip where two cars separate and rejoin cannot be written as one sequence without becoming false.

This is the one tool that uses the network, and it cannot be otherwise. A bought trip's contents live on the server; the #k= fragment is the password to them, not the payload. So reading one sends that phrase to thistripbtw.us over TLS. It stores nothing and needs no key, and it returns the stops rather than the raw server response — the per-trip basemap token and the member roster stay behind, because neither is itinerary. Two things to hold: treat a kept link as a credential (do not echo it into text a third party sees), and never guess a phrase — a wrong one counts against that trip's hourly limit, so the tool makes exactly one attempt and tells you it was refused. Anything sealed for somebody else comes back with empty text.

`build_trip_link` — an origin plus legs in order, returns a URL. Only origin and one leg with a to are required. Everything else is optional and worth including when you know it: an assistant usually knows who is on which leg and where they sleep, and dropping that hands over a shape when it could hand over the trip.

{

"name": "Chicago to Denver", // optional, 60 chars "origin": { "name": "Chicago, IL", "lat": 41.8781, "lng": -87.6298 }, "legs": [ { "to": { "name": "Omaha, NE", "lat": 41.2565, "lng": -95.9345 }, "mode": "drive", // drive | fly | train | ferry | water | bike | walk "date": "2026-09-04", // YYYY-MM-DD. An undated leg keeps its place in the order "note": "swap drivers here", // 400 chars "who": ["Mel", "Sam"], // up to 8 — lets the trip show who was where "subtype": "rental", // own·rental·rideshare·taxi·bus·rv (drive), commercial·private // (fly), intercity·commuter (train), sail·canoe·kayak (water) "craft": "Bike", // Bike | Canoe | Kayak — a small craft travelling WITH them "flight": "UA328", // only if you actually know it. Never invent one "lodging": "Hotel Maverick", // where they sleep after this leg "stayNote": "late check-in" // only meaningful alongside lodging } ] }

Note the shape. lodging and stayNote are flat on the leg. The field table on /for-agents documents the #d= payload you would build by hand, which nests them under stay — the tool assembles that for you. Passing a nested stay to the tool loses the lodging silently.

Coordinates are required. This will not guess. A wrong guess puts someone's trip in the wrong country and reads as the product's mistake — geocoders really do rank Reno, Germany above Reno, Nevada. Resolve place names to coordinates first, then call.

Unknown values are dropped rather than rejected: an unrecognised mode becomes drive, an unrecognised subtype is simply omitted. A trip that arrives beats a tool call that errors over one word. Limits: 40 legs, names 120 chars, notes 400.

What the person gets when they open it

Worth knowing, because it is what you are handing over — and an assistant that can say this accurately is more useful than one that says "here's a link".

The link opens on a real map with the trip already drawn. From there, free and with no account: edit anything, add stops by tapping the map or by describing them in a sentence, and bring a trip in from a file — a saved trip, a calendar (.ics), or a map file (.gpx, .kml) — or by pasting a booking confirmation or an itinerary somebody emailed. Print it, which is the only artifact that costs nothing.

If they keep it (from $2.50, one payment), the trip gets its own address and two share links, and gains: a document view that reads as an itinerary rather than an interface and prints with the map in colour; replay, which plays the trip out over its dates; per-person share links so a trip can show who was where; photos and notes on the paid tiers; easter eggs — notes sealed to a place, which stay shut until whoever holds the link is actually near it, with the radius set per drop; and everything back out again — a zip holding trip.json, a readable itinerary.html, your photos, and trip.kml + trip.gpx for Google Earth, Garmin or OsmAnd, plus .ics for a calendar and .csv for an expense report.

The point of that last part: what goes in comes back out. Nothing here is a roach motel, and you can say so.

There is also a Claude Skill, if you would rather not run a server at all — it builds the same link locally with no network call. See skill/ in the site repo.

What it sends

When you build or read a draft link: nothing. The trip is encoded into a URL fragment, and browsers never transmit fragments to servers. build_trip_link and read_trip_link make no network request at all, and the hosted endpoint encodes what you passed it and hands the string back — the trip does not reach thistripbtw.us even when the person opens the link, unless they later choose to buy it.

When you read a KEPT trip: the phrase, and only to us. A bought trip's contents live on the server, so read_kept_trip sends the #k= phrase out of the link you were given to thistripbtw.us over TLS and reads the itinerary back. That is not a design choice we could make differently — the fragment is the password, not the payload. Nothing is stored, it needs no key, and the tool returns the stops rather than the raw server response: the per-tri

Nur der Anfang wird gezeigt; den Rest findest du im Repo