Koskamo

The Happy Hamper MCP

Official MCP server for The Happy Hamper laundry service in St. George, Utah. Enables AI assistants to check address availability, view pricing, and manage laundry pickups and subscriptions for authenticated users.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

The Happy Hamper MCP logo, by The Happy HamperVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by The Happy Hamper
You need:Account tools ask the customer to log in, or create an account, on our site.
MCP endpoint (Streamable HTTP)
https://www.thehappyhamper.com/mcp
Vendor documentation

What you can do with it

  • Check if laundry pickup is available at a specific address
  • View subscription and one-time pickup pricing
  • Book, pause, change, or cancel laundry pickups
  • Manage laundry preferences and address notes

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
com.thehappyhamper/laundry 1.0.0
MCP protocol
2025-06-18
Tools
19 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

The Happy Hamper picks up laundry in the St George, Utah area, washes, dries and folds it, and brings it back within two business days (deliveries Monday to Friday). Customers put their laundry out in 13-gallon kitchen bags (each about two loads), tied closed, by 8:00 AM on pickup day; they don't need to be home. Subscriptions come every week or every other week on their area's pickup day; one-time pickups can be on any weekday. Prices change over time, so get them from get_service_info or check_address rather than from memory. Amounts in fields ending in Cents are US cents, before sales tax. When we pick up, we hold the pickup's price on the customer's card, and charge it when we bring the laundry back. To set someone up: 1. check_address: whether we pick up there, and the pickup days and prices. If we don't, offer join_waitlist. 2. The account tools need the customer to connect their Happy Hamper account: logging in, or creating an account, on our site. Your app asks them the first time you call one. 3. add_address, with Address notes (a gate code, where the bags will be, where to leave the clean laundry), and set_laundry_preferences. 4. get_pickup_options for that address. Tell the customer the day, how often, the first pickup date, when it comes back, and the price. 5. add_card: give the customer the link. They add their card on our site; never ask for card details. 6. start_subscription, or book_one_time_pickup. Always get the customer's go-ahead before booking, changing or canceling anything, and tell them what it costs first. Customers choose text messages on our website; there's no tool for them. For anything else, send them to https://www.thehappyhamper.com/account.

Tools

19 advertised

get_service_info — What we charge and where
Advertised by the server during the last successful anonymous check.
Advertised read-only

The areas we pick up in, the current prices (in cents, before tax) and the subscriber discount, and the first day a pickup can be booked.

get_service_info input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_service_info annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
check_address — Check an address
Advertised by the server during the last successful anonymous check.
Advertised read-only

Whether we pick up at an address, and if we do, its pickup options: each day and how often (every week or every other week), the first pickup, when it comes back, and the prices with any subscriber discount.

check_address input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "line1",
    "city",
    "state",
    "postalCode"
  ],
  "properties": {
    "city": {
      "type": "string"
    },
    "line1": {
      "type": "string",
      "description": "Street address, e.g. 123 Main St"
    },
    "state": {
      "type": "string",
      "description": "e.g. UT"
    },
    "postalCode": {
      "type": "string",
      "description": "ZIP code"
    }
  }
}
check_address annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
join_waitlist — Join the waitlist
Advertised by the server during the last successful anonymous check.

Leave an email for an address we don't pick up at yet; we email them when we do.

join_waitlist input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "email",
    "line1",
    "city",
    "state",
    "postalCode"
  ],
  "properties": {
    "city": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "line1": {
      "type": "string",
      "description": "Street address, e.g. 123 Main St"
    },
    "state": {
      "type": "string",
      "description": "e.g. UT"
    },
    "postalCode": {
      "type": "string",
      "description": "ZIP code"
    }
  }
}
join_waitlist annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
get_account — Their account
Advertised by the server during the last successful anonymous check.
Advertised read-only

The customer's profile, addresses (with their ids), Laundry preferences, whether a card is saved, subscriptions and one-time bookings, and upcoming pickups. Needs the customer's Happy Hamper login.

get_account input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_account annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
update_profile — Change their name or phone
Advertised by the server during the last successful anonymous check.

Change the customer's name or phone number. Needs the customer's Happy Hamper login.

update_profile input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "phone": {
      "type": "string",
      "maxLength": 40,
      "description": "A US phone number"
    }
  }
}
update_profile annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
add_address — Add an address
Advertised by the server during the last successful anonymous check.

Save a pickup or dropoff address. The reply's serviceZoneId is null when we don't pick up there. Needs the customer's Happy Hamper login.

add_address input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "line1",
    "city",
    "state",
    "postalCode"
  ],
  "properties": {
    "city": {
      "type": "string"
    },
    "note": {
      "type": "string",
      "maxLength": 500,
      "description": "Address notes: a gate code, where the bags will be, where to leave the clean laundry"
    },
    "label": {
      "type": "string",
      "maxLength": 120,
      "description": "e.g. \"Home\""
    },
    "line1": {
      "type": "string",
      "description": "Street address, e.g. 123 Main St"
    },
    "line2": {
      "type": "string",
      "maxLength": 200,
      "description": "Apartment or unit"
    },
    "state": {
      "type": "string",
      "description": "e.g. UT"
    },
    "postalCode": {
      "type": "string",
      "description": "ZIP code"
    }
  }
}
add_address annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
update_address — Change an address
Advertised by the server during the last successful anonymous check.

Change an address's label or Address notes, or its street (only until a pickup has been booked there). Needs the customer's Happy Hamper login.

update_address input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "addressId"
  ],
  "properties": {
    "city": {
      "type": "string"
    },
    "note": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Address notes"
    },
    "label": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "line1": {
      "type": "string"
    },
    "line2": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "state": {
      "type": "string"
    },
    "addressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "postalCode": {
      "type": "string"
    }
  }
}
update_address annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
set_laundry_preferences — Set Laundry preferences
Advertised by the server during the last successful anonymous check.

The detergent and scent every load is washed with, unless a subscription or pickup says otherwise. Needs the customer's Happy Hamper login.

set_laundry_preferences input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "detergent",
    "scent"
  ],
  "properties": {
    "scent": {
      "anyOf": [
        {
          "enum": [
            "fresh_linen",
            "island_breeze",
            "amberwood",
            "warm_vanilla"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "null = unscented"
    },
    "detergent": {
      "enum": [
        "regular",
        "athletic",
        "free_clear"
      ],
      "type": "string",
      "description": "free_clear is fragrance-free, and takes no scent"
    }
  }
}
set_laundry_preferences annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
get_pickup_options — Pickup options at an address
Advertised by the server during the last successful anonymous check.
Advertised read-only

The subscriptions the customer can start at one of their addresses: each option's serviceZoneScheduleId, day, how often, first pickup (nextDate), when it comes back (backDate), and prices with their discount. Needs the customer's Happy Hamper login.

get_pickup_options input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "addressId"
  ],
  "properties": {
    "addressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
get_pickup_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
quote_one_time_pickup — Price a one-time pickup
Advertised by the server during the last successful anonymous check.
Advertised read-only

What a one-time pickup at one of their addresses would cost on a date, whether that date can be booked, and when it would come back. Needs the customer's Happy Hamper login.

quote_one_time_pickup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "addressId",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "YYYY-MM-DD"
    },
    "addressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
quote_one_time_pickup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
add_card — Add a card
Advertised by the server during the last successful anonymous check.
Advertised read-only

A link where the customer adds their card on our site; booking needs one. You can't take card details yourself. Needs the customer's Happy Hamper login.

add_card input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
add_card annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
start_subscription — Start a subscription
Advertised by the server during the last successful anonymous check.

Regular pickups on an option from get_pickup_options. Get the customer's go-ahead on the day and price first. Needs the customer's Happy Hamper login.

start_subscription input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "addressId",
    "serviceZoneScheduleId",
    "bags"
  ],
  "properties": {
    "bags": {
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 2
        }
      ],
      "description": "Bags each pickup is booked with: 1 or 2 (the 1-bag or 2-bag price)"
    },
    "bagCount": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Bags every pickup has, extra ones included (extras cost more)"
    },
    "addressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Pickup address"
    },
    "discountCode": {
      "type": "string",
      "maxLength": 30
    },
    "dropoffAddressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Where it comes back; the pickup address if left out"
    },
    "serviceZoneScheduleId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
start_subscription annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
book_one_time_pickup — Book a one-time pickup
Advertised by the server during the last successful anonymous check.

One pickup on a date (check it with quote_one_time_pickup first). Get the customer's go-ahead on the price first. Needs the customer's Happy Hamper login.

book_one_time_pickup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "addressId",
    "date",
    "bags"
  ],
  "properties": {
    "bags": {
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 2
        }
      ],
      "description": "Bags each pickup is booked with: 1 or 2 (the 1-bag or 2-bag price)"
    },
    "date": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "YYYY-MM-DD"
    },
    "express": {
      "type": "boolean",
      "description": "24-hour turnaround, for a fee"
    },
    "addressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Pickup address"
    },
    "discountCode": {
      "type": "string",
      "maxLength": 30
    },
    "dropoffAddressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
book_one_time_pickup annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
change_subscription — Change a subscription's day, address or bags
Advertised by the server during the last successful anonymous check.

Moves a subscription to another option, address or number of bags: it starts again, with its pickups booked right away, each at the price for its date. Needs the customer's Happy Hamper login.

change_subscription input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subscriptionId"
  ],
  "properties": {
    "bags": {
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 2
        }
      ],
      "description": "Bags each pickup is booked with: 1 or 2 (the 1-bag or 2-bag price)"
    },
    "addressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "New pickup address"
    },
    "subscriptionId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "dropoffAddressId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "serviceZoneScheduleId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
change_subscription annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
update_subscription — Pause, resume, cancel or adjust a subscription
Advertised by the server during the last successful anonymous check.
Advertised destructive

Pause (until a date, or until resumed), resume or cancel a subscription, or change its bag count, Job notes, or detergent and scent. Canceling also cancels its upcoming pickups. Needs the customer's Happy Hamper login.

update_subscription input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "subscriptionId"
  ],
  "properties": {
    "wash": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "detergent",
            "scent"
          ],
          "properties": {
            "scent": {
              "anyOf": [
                {
                  "enum": [
                    "fresh_linen",
                    "island_breeze",
                    "amberwood",
                    "warm_vanilla"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "null = unscented"
            },
            "detergent": {
              "enum": [
                "regular",
                "athletic",
                "free_clear"
              ],
              "type": "string",
              "description": "free_clear is fragrance-free, and takes no scent"
            }
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Detergent and scent; null goes back to their Laundry preferences"
    },
    "action": {
      "enum": [
        "pause",
        "resume",
        "cancel"
      ],
      "type": "string"
    },
    "bagCount": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Bags every pickup has, extra ones included (extras cost more)"
    },
    "jobNotes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 280
        },
        {
          "type": "null"
        }
      ],
      "description": "Job notes for every pickup; blank clears them"
    },
    "pausedUntil": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "With pause: pickups start again on this date (YYYY-MM-DD)"
    },
    "cancelReason": {
      "type": "string",
      "maxLength": 500
    },
    "subscriptionId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
update_subscription annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
update_pickup — Change an upcoming pickup
Advertised by the server during the last successful anonymous check.

Change one upcoming pickup before we collect it: its bag count, Job notes, 24-hour turnaround, or detergent and scent. Needs the customer's Happy Hamper login.

update_pickup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pickupId"
  ],
  "properties": {
    "wash": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "detergent",
            "scent"
          ],
          "properties": {
            "scent": {
              "anyOf": [
                {
                  "enum": [
                    "fresh_linen",
                    "island_breeze",
                    "amberwood",
                    "warm_vanilla"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "null = unscented"
            },
            "detergent": {
              "enum": [
                "regular",
                "athletic",
                "free_clear"
              ],
              "type": "string",
              "description": "free_clear is fragrance-free, and takes no scent"
            }
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Detergent and scent; null goes back to their Laundry preferences"
    },
    "express": {
      "type": "boolean",
      "description": "24-hour turnaround, for a fee"
    },
    "bagCount": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Bags every pickup has, extra ones included (extras cost more)"
    },
    "jobNotes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 280
        },
        {
          "type": "null"
        }
      ]
    },
    "pickupId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
update_pickup annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
cancel_pickup — Cancel a pickup
Advertised by the server during the last successful anonymous check.
Advertised destructive

Cancel one upcoming pickup (a subscription carries on). Before 8:00 AM on the day, nothing is charged. Needs the customer's Happy Hamper login.

cancel_pickup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pickupId"
  ],
  "properties": {
    "pickupId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
cancel_pickup annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
uncancel_pickup — Bring back a canceled pickup
Advertised by the server during the last successful anonymous check.

Bring back a pickup canceled by mistake, as it was (until 1:00 AM on its day). Needs the customer's Happy Hamper login.

uncancel_pickup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "pickupId"
  ],
  "properties": {
    "pickupId": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  }
}
uncancel_pickup annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
list_past_pickups — Past pickups
Advertised by the server during the last successful anonymous check.
Advertised read-only

The customer's last 20 finished pickups, newest first. Needs the customer's Happy Hamper login.

list_past_pickups input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list_past_pickups annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
410 ms
95th percentile latency
410 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 410 ms · metadata changed · 19 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http the-happy-hamper-mcp https://www.thehappyhamper.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add the-happy-hamper-mcp --url https://www.thehappyhamper.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable the-happy-hamper-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "the-happy-hamper-mcp": {
      "url": "https://www.thehappyhamper.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "the-happy-hamper-mcp": {
      "type": "streamableHttp",
      "url": "https://www.thehappyhamper.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start the-happy-hamper-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "the-happy-hamper-mcp": {
      "type": "http",
      "url": "https://www.thehappyhamper.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http the-happy-hamper-mcp https://www.thehappyhamper.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "the-happy-hamper-mcp": {
      "url": "https://www.thehappyhamper.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "the-happy-hamper-mcp": {
      "serverUrl": "https://www.thehappyhamper.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like The Happy Hamper MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run The Happy Hamper MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing