night-margin-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| analyze_portfolioA | The margin guard for Wheelhouse pricing. Computes a short-term rental portfolio's net after turnover costs (cleaning, laundry, travel): net per available night, leak (net-negative bookings), and the best and worst properties. Read-only — never changes any prices. from/to are optional — without them the window defaults to the last 30 + next 90 days. |
| compare_strategiesA | Simulates two pricing strategies and compares them to the baseline on net after turnover costs: A fills gap nights at a discount (default 40% off the property's ADR), B drops bookings below a minimum stay and raises the remaining prices (default min 3 nights, +10%). Shows gross, net, net/night, occupancy, turnovers, and leak per scenario — revealing when gross-optimizing fill is a net loss. Strategy A assumes every gap night sells at the discounted price — an upper bound, not a forecast. Read-only simulation — never changes any prices. from/to are optional — without them the window defaults to the last 30 + next 90 days. |
| gap_night_checkA | Checks whether filling a single gap night is worth it: computes the floor price (turnover cost + travel + minimum margin MIN_MARGIN, adjustable with the risk preset) from the median of the property's actual cost rows and compares the candidate price against it → FILL if price ≥ floor, otherwise SKIP. The verdict reports both the floor clearance and the actual net after turnover costs. If the date is already booked, reports which booking covers it. Read-only — never changes any prices. |
| propose_decisionsA | Proposes concrete pricing decisions in euros: finds upcoming gap nights where the current price recommendation is below your cost floor (turnover + travel + MIN_MARGIN, adjustable with the risk preset) and proposes fixing those nights at the floor so they can't sell below cost. Proposals are saved to the local decision log (NM_STATE_DIR, default ~/.night-margin). Window defaults to the next 30 days. Proposing never changes prices — prices change only when a decision is applied with apply_decision and explicit confirmation. |
| apply_decisionA | Applies a proposed pricing decision to Wheelhouse for real (writes fixed custom rates for the decision's gap nights). This tool DOES change prices — but only with explicit confirm=true; it defaults to a dry run that shows the exact payload without writing anything. The prior custom rates are snapshotted to the decision log before writing, so every applied decision can be undone with revert_decision. Requires WHEELHOUSE_API_KEY. |
| revert_decisionA | Reverts an applied pricing decision: deletes the custom rates it wrote in Wheelhouse and restores any prior custom rates from the snapshot taken before the write. This tool DOES change prices — but only with explicit confirm=true; without it you get a preview. Requires WHEELHOUSE_API_KEY. |
| set_targetA | Sets a monthly gross revenue target for a property (saved locally to NM_STATE_DIR, default ~/.night-margin). Shows the month's booked gross so far when it can be computed. analyze_portfolio then reports progress toward any targets whose month overlaps the analysis window. |
| check_alertsA | Read-only proactive check: (1) upcoming gap nights priced below your cost floor (recommended risk preset — same data as propose_decisions, but this tool never saves proposals to the decision log), and (2) new bookings since the last check, each shown net of turnover costs. Never writes prices. Sends a notification if a channel is configured (NM_TELEGRAM_BOT_TOKEN + NM_TELEGRAM_CHAT_ID, or NM_WEBHOOK_URL) and send is not false — without a channel configured, nothing is sent and the text report is returned as usual. Also available as |
| review_historyA | Season review: mirrors your OWN past monthly Wheelhouse KPIs back at you — per month, your revenue, an ESTIMATED turnover cost, estimated net, and what fraction of gross the cleaning ate (turnover share), plus occupancy and ADR. Turnover cost is estimated from monthly averages (occupied nights ÷ average length of stay × AVG_TURNOVER_COST), not measured per booking, and is labeled as an estimate. It describes what already happened over your real history; it does NOT forecast, does NOT recommend or rank strategies, and does NOT say what you 'should have' done or what another strategy 'would have' earned. Window defaults to all available history (usually only a handful of months per listing — it states the real span, never 'last year' or '5 years' unless the data actually covers it). Read-only — never changes any prices and never writes any state. Requires WHEELHOUSE_API_KEY. |
| margin_copilotA | Margin Copilot: reads the same figures as propose_decisions, groups the gap nights priced below your cost floor into per-property money-moves, ranks them by below-floor exposure (biggest first), and weighs the options for each — Hold, Guard the floor (recommended), and where it applies, raise the minimum stay — with one marked recommended. The only euro figures are computed (below-floor exposure, floor levels); it does NOT invent a '30-day net' or option deltas that would require guessing fill probability, and it never claims an unsold night as a gain. Read-only — it never writes prices or state. Staging a recommended move routes to propose_decisions → apply_decision, where every write is previewed and needs an explicit confirm. Requires WHEELHOUSE_API_KEY (uses live price recommendations). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mikki321/night-margin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server