mcpField
M
Mahonia

Mahonia

Remote
mahonia.appMaps & Travel0Updated 2d ago

About Mahonia

Mahonia is a hiking gear-list and pack-weight tracker for hikers who want to plan, weigh, and share packing lists. Its remote MCP server lets AI assistants read shared lists and, with an edit link, make changes without an account.

Key features

  1. 01Track base, worn, and consumable weights
  2. 02Per-row units and consumable calories
  3. 03Share read-only and co-edit links
  4. 04Packing checklist mode
  5. 05Import and export list formats
  6. 06Gear catalog and reusable gear vault

Use cases

  1. 01Compare pack weights before a hike
  2. 02Co-plan a packing list with others
  3. 03Use a list as a pre-trip checklist
  4. 04Reuse gear and import an existing list

MCP support

The remote MCP server at `/mcp` provides seven tools for reading shared lists, searching the gear catalog, and editing a list when given an edit link. It does not expose the account-based gear vault.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://mahonia.app/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Tools

7
ParameterTypeRequiredDescription
share_codestringYesThe list's share code, or its share link (mahonia.app/s/CODE). Not an edit link.

Details

From the project README

Mahonia

A gear-list and pack-weight tracker for hikers. Make a packing list, see what it weighs, share it.

Lists need no sign-up: one is yours the moment you start typing, held by a private unguessable link. The gear vault is the one part that asks for an account, because "the gear I own" has to follow you across devices rather than living in one browser.

What it does

  • Weigh a pack. Base, worn and consumable totals, with the worn split (three pairs of socks, one on your feet) and a carried figure. Weights are optional — a list with none keeps its totals quiet.
  • A curated gear catalog behind the autocomplete, cited and correctable, with every value overridable per row.
  • Per-row units. Type 32.5 oz on a gram list and that row keeps ounces while the total stays in grams.
  • Calories on consumables, totalled for the list.
  • Trip dates, as calendar dates — no time, no timezone, so a trip doesn't shift when you fly.
  • Share two ways: a read-only link, and an edit link for co-planning. Either can be replaced if it gets out.
  • Packing mode — the same list as a checklist, for the night before.
  • A gear vault that fills itself as you build, so your kit is one pick away next time.
  • Import from LighterPack (share link or CSV) or a JSON backup; export as CSV, JSON or Markdown.
  • Recovery points, so an accidental delete is undoable well after the toast.

Run locally

Requires Node 24 (the pinned version — see .nvmrc).

npm install
npm run seed   # load the gear catalog into a local database
npm run dev    # http://localhost:3000

With no environment variables set, the app runs fully on your machine against a local PGlite database. Copy .env.example to .env to point at a real Postgres (Neon) and Redis (Upstash) for a production deploy.

Anything that would leave the machine degrades to the console instead of being skipped, so a fresh checkout is a working app rather than a broken one:

Unset variableWhat happens locally
RESEND_API_KEYSign-in links print to the server console instead of being emailed.
GITHUB_FEEDBACK_TOKEN / _REPO"Send feedback" (in the editor's actions menu) prints to the console and reports back that it wasn't filed.

Both fail loudly in production rather than quietly accepting input that goes nowhere.

Stack

Nuxt 4 · Vue 3 · TypeScript · Drizzle ORM · deployed on Vercel.

MCP connector

The app serves a remote MCP server at /mcp, so an AI assistant can be handed https://mahonia.app/mcp as a connector with nothing to install and no sign-in. Seven tools: read a shared list as data or Markdown, search the catalog, fetch one product's variants, and, holding an edit link, make a list, add rows and set the trip's dates and trail. A share code is the read capability and the edit link's fragment token the write one, hashed on arrival and passed only as a tool argument, so nothing new is trusted. The transport is stateless JSON-RPC over POST (MCP revisions 2025-06-18 and 2025-11-25, no sessions, no event stream, GET answers 405), hand-rolled in server/routes/mcp.post.ts with the tools in server/utils/mcp.ts; both files carry the reasoning. My Gear is deliberately out of reach: it would need an account token, which is a separate decision.

Add it to a client:

Install in Cursor Install in VS Code

  • Claude (claude.ai, Desktop, mobile): add Mahonia as a connector and choose "No sign-in". Connectors added there are available in Claude Code too.
  • Claude Code: claude mcp add --transport http --scope user mahonia https://mahonia.app/mcp
  • Gemini CLI: gemini mcp add --transport http mahonia https://mahonia.app/mcp
  • ChatGPT: Settings, Developer mode, add https://mahonia.app/mcp with "No Authentication".
  • Anything that reads an mcp.json: {"mcpServers":{"mahonia":{"url":"https://mahonia.app/mcp"}}}
  • A client that only speaks stdio: bridge with npx mcp-remote https://mahonia.app/mcp.

The server is listed in the official MCP registry as app.mahonia/mahonia; server.json is the listing, published with mcp-publisher under the domain's DNS proof.

Changelog

The changelog is GitHub Releases: one release per day that ships something, tagged by date (v2026.09.12), cut by a workflow from the entries below. When a change is user-facing, add a plain one-sentence entry as part of the same PR:

npm run changelog -- --added "Sort folders by weight."
npm run changelog -- --fixed "…" --changed "…"

Entries are grouped Added / Changed / Fixed and describe the observable change, not the implementation.

Each run writes its own file under content/changelog.d/, so entries from PRs open at the same time never collide — content/changelog.json is the settled archive, and npm run changelog:compact folds fragments into it now and then. Once a day is over (Pacific), .github/workflows/releases.yml turns it into a release; a late entry updates its day's notes.

A PR comment reminds any user-facing PR that's missing an entry — but nothing auto-fills it, so the entry is always hand-written (plain, curated prose). If a PR merges without one, that day's release just omits the change until it's backfilled. For non-user-facing work, prefix the PR title (refactor:, chore:, ci:, test:, docs:, build:) or label it skip-changelog — perf: and style: don't count, since both are things a visitor notices.

License

Code is MIT. The gear catalog data under seed/ is licensed separately — see seed/LICENSE.md.

Third-party notices for the libraries bundled into the client are in public/licenses.txt, served at /licenses.txt. The file exists because Mahonia bundles its dependencies instead of loading them from a CDN (a CDN <script> could read a list's edit token out of location.hash), which makes serving the site a redistribution of that code — and the minifier strips the banner comments those libraries ship their copyright in. Add an entry when a dependency's code starts reaching the browser; server-only packages aren't redistributed and aren't listed.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.