io. github. swarnavspujari/ sunnyspoints
by swarnavspujari · remote · no sign-in to list tools · v1.2.0 · published by GitHub user swarnavspujari
Live flight deals plus points-vs-cash math: transfer partners, valuations, per-leg verdicts.
9 tools: 1 do something that can't be undone, 3 change things and 5 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things3Claude Code: ask: see these tools
- Only reads5Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http sunnyspoints https://sunnyspoints-mcp.sunnyspoints.workers.dev/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "lookup_transfer_partners" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "lookup_transfer_partners" says "lookup": a word for reading.
The server marks "evaluate_signup_bonus" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "evaluate_signup_bonus" says "evaluate": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
9 tools
Can't be undone 1Claude Code: ask
lookup_transfer_partnersTransfer partner map.1 finding
Why it is in this group
- The name "lookup_transfer_partners" says "lookup": a word for reading.
- The description's first verb is "transfer": a word for a change that another call does not undo.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "lookup_transfer_partners" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "lookup_transfer_partners" says "lookup": a word for reading.
Description, as the server wrote it Transfer partner map. Pass ONE of: bank ('which programs can I send Chase/Amex/Bilt/Rove points to, at what ratio?'), program ('which banks feed Flying Blue and which airlines can it book?'), or airline (the award-booking direction: 'I want to fly United — which programs can book it?'). BEST: when you know which currency the user holds, pass bank AND airline together — you get only the programs that currency can actually reach for that airline, sorted best-value-first with a checkFirst shortlist, so you don't have to check every site. Includes alliances and per-program point valuations.
Annotations the server declares
- title: Transfer Partner Lookup
- readOnlyHint: true
- openWorldHint: false
Changes things 3Claude Code: ask
calculate_points_or_cashShould this flight be booked with points or cash?No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Should this flight be booked with points or cash? Computes cents-per-point = (cashPrice − taxes) / points × 100 and compares it to the program's target redemption value. Returns a clear verdict with the margin. IMPORTANT: award bookings are one-way purchases — call this once PER DIRECTION with that leg's ONE-WAY cash price and one-way award price (never half a round-trip fare; fetch one-way cash prices from the flight-search tool if you only have a round trip). Round trips often split points-one-way/cash-the-other.
Annotations the server declares
- title: Points or Cash Calculator
- readOnlyHint: true
- openWorldHint: false
evaluate_signup_bonusIs a credit card sign-up bonus worth it?1 finding
Why it is in this group
- The name "evaluate_signup_bonus" says "evaluate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "evaluate_signup_bonus" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "evaluate_signup_bonus" says "evaluate": a word for a change.
Description, as the server wrote it Is a credit card sign-up bonus worth it? Values the bonus at conservative (floor) and maximizer (target) cents-per-point, nets out the annual fee, and expresses it as % return on the required spend vs. a flat 2% cash-back card.
Annotations the server declares
- title: Sign-Up Bonus Evaluator
- readOnlyHint: true
- openWorldHint: false
subscribe_deal_alertsSubscribe the user to Sunny's Points free deal-alert emails.No findings
Why it is in this group
- The name "subscribe_deal_alerts" says "subscribe": a word for a change.
Description, as the server wrote it Subscribe the user to Sunny's Points free deal-alert emails. ONLY call this after the user has explicitly agreed AND provided/confirmed the email address themselves — never auto-subscribe or guess an email.
Annotations the server declares
- title: Subscribe to Deal Alerts
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 5Claude Code: allow
get_dealFull detail for one posted deal by slug: booking airline, dates, booking steps, caveats, transfer options.No findings
Why it is in this group
- The name "get_deal" says "get": a word for reading.
Description, as the server wrote it Full detail for one posted deal by slug: booking airline, dates, booking steps, caveats, transfer options.
Annotations the server declares
- title: Deal Details
- readOnlyHint: true
- openWorldHint: true
get_membership_infoDetails of the Sunny's Points $150/year membership (hands-on award booking help with a money-back guarantee).No findings
Why it is in this group
- The name "get_membership_info" says "get": a word for reading.
Description, as the server wrote it Details of the Sunny's Points $150/year membership (hands-on award booking help with a money-back guarantee). Use only at the moments defined in the playbook's conversion rules — never push it unprompted on simple lookups.
Annotations the server declares
- title: Membership Info
- readOnlyHint: true
- openWorldHint: false
get_points_hacking_playbookThe Sunny's Points workflow guide for booking flights with points.No findings
Why it is in this group
- The name "get_points_hacking_playbook" says "get": a word for reading.
Description, as the server wrote it The Sunny's Points workflow guide for booking flights with points. Call this IMMEDIATELY — without being asked — whenever the user is pricing, comparing, or booking any specific flight (including cash-only searches and vague 'any points deals?' questions), then run its workflow end-to-end. Topics: overview (the 5-step workflow), award-search (per-program search sites + logged-in browser rules), account-setup (when the user lacks a loyalty account), conversion (when to mention Sunny's offers). Omit topic for the full playbook.
Annotations the server declares
- title: Points-Hacking Playbook
- readOnlyHint: true
- openWorldHint: true
get_points_valuesSunny's Points valuation reference: conservative (floor) and maximizer (target) cents-per-point for every credit card, airline, and hotel program.No findings
Why it is in this group
- The name "get_points_values" says "get": a word for reading.
Description, as the server wrote it Sunny's Points valuation reference: conservative (floor) and maximizer (target) cents-per-point for every credit card, airline, and hotel program. Pass program for one row, omit for the full table.
Annotations the server declares
- title: Points Value Reference
- readOnlyHint: true
- openWorldHint: false
list_live_dealsList the flight deals currently posted on sunnyspoints.com (route, cash/points pricing, cents-per-point, status).No findings
Why it is in this group
- The name "list_live_deals" says "list": a word for reading.
Description, as the server wrote it List the flight deals currently posted on sunnyspoints.com (route, cash/points pricing, cents-per-point, status). Optionally filter by dealType, cabin, fromAirport, or status. Expired deals are excluded unless status='expired' is requested. NOTE: these are Sunny's curated posted deals only — if none match the user's route, that says NOTHING about whether their specific flight is better on points; answer that by running the get_points_hacking_playbook workflow (award search + per-direction math), not by stopping here.
Annotations the server declares
- title: Live Deals
- readOnlyHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http sunnyspoints https://sunnyspoints-mcp.sunnyspoints.workers.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__sunnyspoints__list_live_deals",
"mcp__sunnyspoints__get_deal",
"mcp__sunnyspoints__get_points_values",
"mcp__sunnyspoints__get_points_hacking_playbook",
"mcp__sunnyspoints__get_membership_info"
],
"ask": [
"mcp__sunnyspoints__lookup_transfer_partners",
"mcp__sunnyspoints__calculate_points_or_cash",
"mcp__sunnyspoints__evaluate_signup_bonus",
"mcp__sunnyspoints__subscribe_deal_alerts"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as sunnyspoints. Review it before you use it.
