Server data from the Official MCP Registry
Search hotels worldwide, compare live room rates, book and pay securely, and cancel bookings.
About
Search hotels worldwide, compare live room rates, book and pay securely, and cancel bookings.
Remote endpoints: streamable-http: https://mcp.fortrip.ai/
Security Report
Valid MCP server (2 strong, 3 medium validity signals). No known CVEs in dependencies. ⚠️ Package registry links to a different repository than scanned source. Imported from the Official MCP Registry. Trust signals: trusted author (3/3 approved). 1 finding(s) downgraded by scanner intelligence.
Endpoint verified · Requires authentication · 2 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Permissions Required
This plugin requests these system permissions. Most are normal for its category.
How to Install & Connect
Available as Local & Remote
This plugin can run on your machine or connect to a hosted endpoint. during install.
Documentation
View on GitHubFrom the project's GitHub README.
Fortrip
Fortrip's public agent surface in one repository: the fortrip command-line
tool for hotel search, live offers and orders, the contract that every agent
surface shares, and the store listings that point agents at Fortrip. Hotels
only for now.
Everything here talks to Fortrip API v1, https://api.fortrip.ai/v1, or to the
hosted MCP server, https://mcp.fortrip.ai/, as a Fortrip user who has signed
in with OAuth in the browser.
Using Fortrip
-
From a shell, or an agent with one:
npx -y fortrip <command>. People start withnpx -y fortrip login. Agents sign in through theloginUrla command prints when it exits 3. The CLI's README has the commands, sign-in and exit codes. -
In an MCP client: connect the hosted server
https://mcp.fortrip.ai/if the client supports remote servers with OAuth, or run the local bridge,npx -y fortrip mcp. The CLI's README has the config for Claude Desktop, Cursor, Codex and Claude Code. The Claude and OpenAI plugins use the hosted server. -
In Claude Code, as a plugin (the hosted server plus Fortrip's skill):
/plugin marketplace add FortripEngineering/fortrip /plugin install fortrip@fortrip -
As a skill, for agents that can run shell commands but don't have Fortrip's MCP tools:
npx skills add FortripEngineering/fortrip --skill fortrip-cli
Layout
| Path | What it is | How it's published |
|---|---|---|
packages/contract | The contract of Fortrip API v1: limits, paths, request and response schemas, error codes, field rules, the specs of the MCP tools and CLI commands, and the agent guide, written once and rendered for the MCP server, the Claude skill and the CLI | npm: @fortrip/agent-contract, from a v* tag on main, together with fortrip |
packages/cli | The fortrip CLI: hotel search, live offers, orders and payment links from a shell, the local MCP bridge (fortrip mcp) | npm: fortrip, from a v* tag on main, together with @fortrip/agent-contract |
plugins/claude | Claude plugin (hosted MCP server + static skill, generated) | Submitted in the developer portal; .claude-plugin/marketplace.json at the root lets Claude Code add this repo as a marketplace |
plugins/openai | ChatGPT / Codex plugin | Zip uploaded in the OpenAI portal |
plugins/registry | MCP Registry entry | The Publish Fortrip to MCP Registry workflow |
skills/fortrip-cli | Skill for agents with a shell (generated) | npx skills add FortripEngineering/fortrip --skill fortrip-cli reads it from main |
scripts | Repo-wide scripts: generate.ts renders the skills, validate.mjs checks the listings |
Development
Node.js 22 or newer and pnpm 11.
pnpm install
pnpm test # tests of every package, and of the scripts
pnpm generate # renders the skills from the contract
pnpm generate --check # fails with a diff when a generated file is stale
pnpm build && pnpm validate # checks the store listings
pnpm typecheck and pnpm build run for every package too. CI runs
typecheck, tests and the build on Node.js 22 and 24, and on 24 also
pnpm generate --check, pnpm validate and claude plugin validate --strict
on ., plugins/claude and skills.
Generated files
The skills (SKILL.md and references/planning.md in
plugins/claude/skills/fortrip and skills/fortrip-cli) and the contract's
src/guide-data.generated.ts are generated. Never edit them: change the
guide's fragments in packages/contract/guide/*.md (or a skill's front
matter in scripts/generate.ts), run pnpm generate and commit the result.
The fragments say which surface states what, and the Claude skill, the MCP
instructions and the CLI's guide all render from them, so they cannot drift
apart.
Publishing
Claude plugin
plugins/claude is a plugin with two parts:
.mcp.jsonpoints at the hosted MCP server. On claude.ai and in Cowork it shows up on the plugin's Connectors tab, where users sign in with their Fortrip account (OAuth); Claude Code connects to it directly.skills/fortrip/is the generated skill that tells Claude how to use the tools: call order, occupancy per room, prices and currency, confirming before the payment link, and errors.references/planning.mdcovers flexible dates, budgets, split stays and several destinations.
The skill is self-contained: the directory doesn't allow a plugin to fetch
instructions at runtime (Software Directory Policy §2F), and its validator
blocks unpinned npx launchers, so the CLI skill stays outside
plugins/claude. pnpm validate fails if a file under it mentions npx,
fortrip@latest or get_planning_guide.
Submit the plugins/claude folder in the
developer portal. Check it with:
claude plugin validate --strict plugins/claude
claude plugin validate --strict .
The second command checks .claude-plugin/marketplace.json at the repository
root. It lists plugins/claude as a plugin, which lets npx skills add find
the plugin's skill next to skills/fortrip-cli, and lets Claude Code add this
repository as a marketplace.
Claude Code keeps users on the version in plugin.json, so bump it whenever
anything in plugins/claude changes, regenerated skill text included: patch
for wording, minor for new behaviour or components, major for changes that
break how people use it. The directory takes the listing icon from the first
submission only.
CLI skill
skills/fortrip-cli is the CLI's guide as a static skill: the agent reads the
commands, call order, sign-in and what to show the user before a payment link
from the skill itself. It needs Node.js 22 or newer and isn't part of the
Claude directory plugin.
npx skills add FortripEngineering/fortrip --skill fortrip-cli
OpenAI plugin
plugins/openai/plugin.json holds the listing copy and review test cases, and
mcp.json the hosted server URL. mcp.json follows the Agent Plugins schema
(type: streamable-http), while plugins/claude/.mcp.json follows Claude's
(type: http); both point at the same server. Build the upload:
cd plugins/openai && rm -f ../../fortrip-openai.zip && zip -rX ../../fortrip-openai.zip plugin.json mcp.json assets
Upload the zip in the OpenAI portal. The portal verifies the domain through
https://mcp.fortrip.ai/.well-known/openai-apps-challenge, served by mcp.fortrip.ai.
MCP Registry
plugins/registry/server.json lists Fortrip as
io.github.FortripEngineering/fortrip, with two ways to connect: the hosted
server (remotes) and the npm package fortrip, run as fortrip mcp
(packages; the mcpName in packages/cli/package.json must equal the
entry's name). The entry is published by its own workflow, Publish Fortrip to
MCP Registry (.github/workflows/publish-mcp-registry.yml), which runs only
from main and waits for a human to approve the mcp-registry environment.
To publish a change, bump version (a version can't go down), set
packages[].version to the CLI version on npm, merge to main and run the
workflow. After a CLI release, run it once npm has the new version.
To deprecate an old version, or make it active again, run Set an MCP
Registry version's status (.github/workflows/mcp-registry-status.yml)
with the version, the status and, when deprecating, a message (the publisher
takes none for active). It has the same main-only,
approval-gated setup. A personal mcp-publisher login github can't do this:
it only gets io.github.<user>/*, so the org namespace comes through this
repository's OIDC identity.
The Registry binds the server URL to one name, so a rename means deleting the old entry before publishing the new one.
Releasing
fortrip and @fortrip/agent-contract are released together, at the same
version.
-
In a PR, set
versionto the newX.Y.Zin bothpackages/cli/package.jsonandpackages/contract/package.json(npm version X.Y.Z --no-git-tag-versionin each package's directory), setpackages[].versioninplugins/registry/server.jsonto it too, and runpnpm generateand commit what it changes. Merge the PR intomainonce CI passes. -
Tag the merge commit on
mainand push the tag:git checkout main && git pull git tag vX.Y.Z && git push origin vX.Y.Z -
A human approves the
npm-publishenvironment. The workflowpublish.ymlthen publishes both packages to npm through trusted publishing (npm's OIDC sign-in from GitHub Actions, so no npm token is stored in GitHub), which gives them provenance. -
Once npm has the new version, run the MCP Registry workflow (above).
The workflow refuses a tag that isn't vX.Y.Z or vX.Y.Z-rc.N, that differs
from the version in either package.json, or that isn't on main. Its
build job runs typecheck, tests and the build and packs both tarballs; its
publish job, in the npm-publish environment, publishes those tarballs
(@fortrip/agent-contract first) without installing or building anything. A
release candidate, tagged vX.Y.Z-rc.N, is published under the next
dist-tag, so npm install doesn't pick it up. Rerunning the publish job after
a partial publish skips what is already on npm.
Docs
packages/docs is the Fumadocs site behind docs.fortrip.ai.
pnpm --filter ./packages/docs dev # local dev server
pnpm --filter ./packages/docs test # its tests
Production docs follow the live server, not main. A docs deploy is a
docs-* tag, and the order is:
- Tag
vX.Y.Z(npm, see Releasing above). - Ship the server release that pins that contract to production.
- Push the tag
docs-X.Y.Z. - A human approves the
docs-productionenvironment. The workflowdeploy-docs.ymlthen builds and deploys to Vercel.
The workflow refuses to deploy unless all of these hold at the tagged commit:
- the contract's version is a plain
X.Y.Z, not an rc; packages/contract/srcis unchanged since the tagvX.Y.Zof that version;- the changelog has the version's entry, dated, and no entry says "Not released yet.".
The tag name itself is free-form. So once main has moved on from the live
release (contract changes, or a new undated changelog entry), a docs deploy
can't go out from main: cut a short branch from the live v* tag, make the
docs-only fix there, tag docs-X.Y.Z-<n> on that branch and push the tag,
and also merge the fix to main. A docs-only fix needs no npm release and no
changelog entry.
Before tagging a stable release, replace the version's "Not released yet." with
"Released YYYY-MM-DD." in packages/docs/content/docs/changelog.mdx, or the
changelog gate fails.
One-time setup, by the owner:
- A Vercel project with Root Directory
packages/docs, framework Next.js, "Include files outside the root directory" left on (the build readspackages/contractandpackages/cli/package.json) and preview deployments on.packages/docs/vercel.jsonturns off Git deployments ofmain: production would otherwise followmainand skip the approval. Other branches still get previews. On the first real run, confirm a push tomaincreates no production deployment. Importing the project deploysmainonce anyway; the firstdocs-*deploy replaces it. - The
docs.fortrip.aidomain on that project, and Vercel Analytics enabled. - The GitHub environment
docs-production, with the same required reviewers asnpm-publish("Prevent self-review" off, as there, so whoever pushes the tag can approve), deployment branches and tags limited to the tag patterndocs-*, and the secretsVERCEL_TOKEN,VERCEL_ORG_IDandVERCEL_PROJECT_ID. - On the first deploy, confirm
vercel buildsucceeds withoutVERCEL_TOKEN: the workflow gives the token only tovercel pullandvercel deploy, since the build runs the dependencies' code.
License
Apache License 2.0. Copyright 2026 FortripAI, Inc. (see NOTICE). Releases before 2.0.0 were published under the MIT License. This license does not grant access to the hosted Fortrip service, hotel inventory, or third-party data.
Trademarks
"Fortrip" and the Fortrip logo are trademarks of FortripAI, Inc. The Apache License 2.0 does not grant permission to use the trade names, trademarks, service marks or product names of FortripAI, Inc., except as required for reasonable and customary use in describing the origin of the software and reproducing the content of the NOTICE file (section 6).
Reviews
No reviews yet
Be the first to review this server!
More Developer Tools MCP Servers
Rea
Freeby Morluto · Developer Tools
Reverse engineer anything from your terminal or agent with one CLI and MCP server.
Paperclip
Freeby Paperclipai · Developer Tools
Trending hip-hop artist momentum scores across four cultural dimensions.
Fetch
Freeby Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
Git
Freeby Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
Toleno
Freeby Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
MCP Marketplace
Freeby mcp-marketplace · Developer Tools
Search and install MCP servers from inside your AI client.
