Koskamo

GiftRoam MCP

GiftRoam MCP allows AI agents to search for gifts, check delivery feasibility to over 200 countries, and generate secure checkout links for users. The server handles the gifting workflow without collecting sensitive user data like addresses or payment details directly.

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.

GiftRoam MCP logo, by Multifunnels Inc.Vendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Multifunnels Inc.
MCP endpoint (Streamable HTTP)
https://mcp.giftroam.com/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

6 of 6 have a description · 6 of 6 declare behavior hints · 4 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to giftroam.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for gifts by country, occasion, or budget
  • Check delivery feasibility and times for specific destinations
  • Generate secure checkout links for gift purchases

Source and maintenance

Vendor evidenceRegistry 0.3.0

Protocol and capabilities

Server
giftroam 0.3.0
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
10 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/ui": {}
  }
}

Server-provided instructions

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

GiftRoam sends gift baskets, flowers and treats to 190+ countries; a local partner in the destination country assembles and delivers. Typical flow: search_gifts (country required) → get_gift_details → optionally check_delivery when there is a deadline → create_checkout → show the summary, get the user's explicit OK, then share the checkout link (30-minute expiry). After payment the buyer receives an order token; get_order_status accepts only that token — never guess or enumerate tokens. Ask for the destination country before searching and pass ISO-3166 alpha-2 codes (FR, not France); resolve relative dates to YYYY-MM-DD; search_gifts query is product keywords only (destination and occasion have their own fields); use check_delivery whenever the user has a deadline; reuse the same idempotency_key when retrying create_checkout. This is a guest connection: list_my_orders needs the signed-in endpoint (/mcp/account); everything else works as a guest. Never collect the recipient's name, address, phone or email in the conversation — the checkout page does that. Never promise a delivery date the tools did not confirm. Prices are final and include delivery; taxes are shown at payment.

Tools

6 advertised

search_gifts — Search gifts deliverable to a country
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find gifts that can be delivered to a destination country, optionally filtered by free text, occasion, budget (minor units) and a needed-by date. Returns a shortlist with final customer prices (delivery included) and delivery days. Paginate with cursor.

search_gifts input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "country"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 120,
      "description": "Product keywords, 1-4 words (e.g. 'chocolate basket', 'red roses'). Destination, recipient and occasion are separate fields. Omit for a general browse."
    },
    "cursor": {
      "type": "string",
      "description": "Opaque cursor from a previous page."
    },
    "locale": {
      "type": "string",
      "maxLength": 12,
      "description": "Display language for results (e.g. he-IL). The query may be typed in that language."
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Destination country, ISO-3166 alpha-2 (e.g. FR)."
    },
    "occasion": {
      "type": "string",
      "maxLength": 48,
      "description": "Occasion slug from the occasions resource (e.g. birthday)."
    },
    "budget_max": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Maximum price in minor units (cents)."
    },
    "budget_min": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Minimum price in minor units (cents)."
    },
    "date_needed": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "YYYY-MM-DD; only gifts that can arrive by then."
    }
  }
}
search_gifts output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "next_step": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Present only when the call failed"
    },
    "total": {
      "type": "number"
    },
    "locale": {
      "type": "string",
      "description": "BCP-47 locale the texts are localized to"
    },
    "country": {
      "type": "object",
      "properties": {
        "iso2": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "title": {
            "type": "string"
          },
          "gift_id": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "image_url": {
            "type": "string"
          },
          "one_liner": {
            "type": "string"
          },
          "delivery_days": {
            "type": "object",
            "properties": {
              "max": {
                "type": "number"
              },
              "min": {
                "type": "number"
              }
            },
            "description": "Business-day delivery estimate range"
          },
          "display_price": {
            "type": "string",
            "description": "Final customer price incl. delivery, e.g. \"$99.95\""
          },
          "contains_alcohol": {
            "type": "string",
            "description": "yes | no | unknown"
          },
          "customer_amount_minor": {
            "type": "number",
            "description": "Price in minor units (cents)"
          }
        }
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ]
    },
    "date_warning": {
      "type": "string",
      "description": "Present when the requested needed-by date is unreachable: results are shown WITHOUT the date filter"
    },
    "display_text": {
      "type": "string",
      "description": "Human-readable one-line summary of the result"
    }
  }
}
search_gifts annotations
{
  "title": "Search gifts deliverable to a country",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_gift_details — Get gift details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full description, contents, images, customer price, estimated delivery window (EST cutoff-aware), substitution policy and restrictions for one gift in one destination country.

get_gift_details input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "gift_id",
    "country"
  ],
  "properties": {
    "locale": {
      "type": "string",
      "maxLength": 12,
      "description": "Display language for gift content (e.g. he-IL). Prices and availability are unaffected."
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Destination country, ISO-3166 alpha-2."
    },
    "gift_id": {
      "type": "string",
      "minLength": 1,
      "description": "A gift_id from search results (or the gift's URL slug)."
    }
  }
}
get_gift_details output schema
{
  "type": "object",
  "properties": {
    "gift": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "title": {
          "type": "string"
        },
        "images": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "gift_id": {
          "type": "string"
        },
        "contents": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "currency": {
          "type": "string"
        },
        "image_url": {
          "type": "string"
        },
        "one_liner": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "restrictions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "delivery_days": {
          "type": "object",
          "properties": {
            "max": {
              "type": "number"
            },
            "min": {
              "type": "number"
            }
          },
          "description": "Business-day delivery estimate range"
        },
        "display_price": {
          "type": "string",
          "description": "Final customer price incl. delivery, e.g. \"$99.95\""
        },
        "contains_alcohol": {
          "type": "string",
          "description": "yes | no | unknown"
        },
        "estimated_delivery": {
          "type": "object",
          "properties": {
            "notes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "latest": {
              "type": "string"
            },
            "earliest": {
              "type": "string"
            },
            "cutoff_passed_today": {
              "type": "boolean"
            }
          }
        },
        "substitution_policy": {
          "type": "string"
        },
        "customer_amount_minor": {
          "type": "number",
          "description": "Price in minor units (cents)"
        }
      }
    },
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "next_step": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Present only when the call failed"
    },
    "locale": {
      "type": "string",
      "description": "BCP-47 locale the texts are localized to"
    },
    "translation": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        },
        "provider": {
          "type": [
            "string",
            "null"
          ]
        },
        "contentHash": {
          "type": "string"
        },
        "sourceLocale": {
          "type": "string"
        },
        "targetLocale": {
          "type": "string"
        }
      },
      "description": "How the gift content was localized"
    },
    "display_text": {
      "type": "string",
      "description": "Human-readable one-line summary of the result"
    }
  }
}
get_gift_details annotations
{
  "title": "Get gift details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_delivery — Check delivery feasibility
Advertised by the server during the last successful anonymous check.
Advertised read-only

Is delivery to a country (optionally a city, by a date, for a specific gift) feasible? Returns earliest/latest estimate and warnings (PO box, hotel, holiday window) with a suggested action.

check_delivery input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "country"
  ],
  "properties": {
    "city": {
      "type": "string",
      "maxLength": 80,
      "description": "Destination city (used for warnings only; never store addresses in chat)."
    },
    "locale": {
      "type": "string",
      "maxLength": 12,
      "description": "Language of the conversation with the user (e.g. he-IL, fr-FR). Localizes content and messages; prices and availability are unaffected."
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Destination country, ISO-3166 alpha-2."
    },
    "gift_id": {
      "type": "string",
      "description": "Optional gift_id to use that gift's delivery window."
    },
    "date_needed": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "YYYY-MM-DD the gift must arrive by."
    }
  }
}
check_delivery output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "next_step": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Present only when the call failed"
    },
    "latest": {
      "type": "string",
      "description": "ISO date of the latest estimated delivery"
    },
    "locale": {
      "type": "string",
      "description": "BCP-47 locale the texts are localized to"
    },
    "earliest": {
      "type": "string",
      "description": "ISO date of the earliest estimated delivery"
    },
    "feasible": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "display_text": {
      "type": "string",
      "description": "Human-readable one-line summary of the result"
    },
    "business_days": {
      "type": "object",
      "properties": {
        "max": {
          "type": "number"
        },
        "min": {
          "type": "number"
        }
      }
    },
    "suggested_action": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
check_delivery annotations
{
  "title": "Check delivery feasibility",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_checkout — Create a checkout link
Advertised by the server during the last successful anonymous check.
Open-world

Create a signed, single-purpose checkout link (30-minute expiry) for one gift to one country. The schema has no recipient fields on purpose: name, address, phone, delivery details and payment are collected on the secure page. Returns an order summary with the link. Retries with the same idempotency_key return the same link.

create_checkout input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "gift_id",
    "country",
    "idempotency_key"
  ],
  "properties": {
    "locale": {
      "type": "string",
      "maxLength": 12,
      "description": "Language of the conversation with the user (e.g. he-IL, fr-FR). Localizes content and messages; prices and availability are unaffected. The checkout page opens in this language."
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Destination country, ISO-3166 alpha-2."
    },
    "gift_id": {
      "type": "string",
      "minLength": 1,
      "description": "A gift_id from search results."
    },
    "quantity": {
      "type": "number",
      "const": 1,
      "default": 1,
      "description": "Always 1 in v1."
    },
    "delivery_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Requested delivery date YYYY-MM-DD; omit for as-soon-as-possible."
    },
    "gift_card_text": {
      "type": "string",
      "maxLength": 180,
      "description": "Card message (≤180 chars) if the user already gave one."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 128,
      "minLength": 8,
      "description": "Client-generated key; retries with the same key return the same link."
    }
  },
  "additionalProperties": false
}
create_checkout output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "next_step": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Present only when the call failed"
    },
    "locale": {
      "type": "string",
      "description": "BCP-47 locale the texts are localized to"
    },
    "summary": {
      "type": "object",
      "properties": {
        "gift": {
          "type": "string"
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "price": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "gift_message": {
          "type": [
            "string",
            "null"
          ]
        },
        "delivery_date": {
          "type": "string"
        },
        "estimated_window": {
          "type": "object",
          "properties": {
            "latest": {
              "type": "string"
            },
            "earliest": {
              "type": "string"
            }
          }
        }
      }
    },
    "expires_at": {
      "type": "string"
    },
    "checkout_url": {
      "type": "string",
      "description": "Single-purpose secure checkout link on checkout.giftroam.com (30-minute expiry)"
    },
    "display_text": {
      "type": "string",
      "description": "Human-readable one-line summary of the result"
    }
  }
}
create_checkout annotations
{
  "title": "Create a checkout link",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_order_status — Get order status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Customer-facing status, ETA window and next action for an order. Looked up by the buyer's private order token, issued after payment; the token is the only credential. Never returns address, phone or payment details.

get_order_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "order_token"
  ],
  "properties": {
    "locale": {
      "type": "string",
      "maxLength": 12,
      "description": "Language of the conversation with the user (e.g. he-IL, fr-FR). Localizes content and messages; prices and availability are unaffected."
    },
    "order_token": {
      "type": "string",
      "minLength": 1,
      "description": "The order token from the buyer's confirmation email (GR-XXXXX-…)."
    }
  }
}
get_order_status output schema
{
  "type": "object",
  "properties": {
    "gift": {
      "type": "string"
    },
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "next_step": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Present only when the call failed"
    },
    "locale": {
      "type": "string",
      "description": "BCP-47 locale the texts are localized to"
    },
    "status": {
      "type": "string",
      "description": "Machine status, e.g. confirmed | on_the_way | delivered | needs_attention"
    },
    "country": {
      "type": "string"
    },
    "updated_at": {
      "type": "string"
    },
    "next_action": {
      "type": "string"
    },
    "display_text": {
      "type": "string",
      "description": "Human-readable one-line summary of the result"
    },
    "status_label": {
      "type": "string"
    },
    "delivery_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "estimated_window": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "latest": {
          "type": "string"
        },
        "earliest": {
          "type": "string"
        }
      }
    }
  }
}
get_order_status annotations
{
  "title": "Get order status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_orders — List my orders (signed-in)
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in user's GiftRoam orders: status, ETA window, gift, destination and the order token for tracking. Requires the authenticated GiftRoam connection (OAuth, scope orders:read); on a guest connection it returns auth_required. Never returns addresses, phone numbers or payment details.

list_my_orders input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1
    },
    "locale": {
      "type": "string",
      "maxLength": 12,
      "description": "Language of the conversation with the user (e.g. he-IL, fr-FR). Localizes content and messages; prices and availability are unaffected."
    }
  }
}
list_my_orders output schema
{
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "next_step": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Present only when the call failed"
    },
    "total": {
      "type": "number"
    },
    "locale": {
      "type": "string",
      "description": "BCP-47 locale the texts are localized to"
    },
    "orders": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "gift": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "created_at": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "order_token": {
            "type": "string"
          },
          "amount_minor": {
            "type": "number"
          },
          "status_label": {
            "type": "string"
          },
          "delivery_date": {
            "type": [
              "string",
              "null"
            ]
          },
          "estimated_window": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "latest": {
                "type": "string"
              },
              "earliest": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "display_text": {
      "type": "string",
      "description": "Human-readable one-line summary of the result"
    }
  }
}
list_my_orders annotations
{
  "title": "List my orders (signed-in)",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

10 advertised

GiftRoam app — GiftRoam

Advertised by the server during the last successful anonymous check.

Interactive gift results, details, checkout and order status.

GiftRoam app URI
ui://giftroam/app.html@v8

MIME type: text/html;profile=mcp-app

GiftRoam app v1 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v1 (legacy alias) URI
ui://giftroam/app.html@v1

MIME type: text/html;profile=mcp-app

GiftRoam app v2 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v2 (legacy alias) URI
ui://giftroam/app.html@v2

MIME type: text/html;profile=mcp-app

GiftRoam app v3 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v3 (legacy alias) URI
ui://giftroam/app.html@v3

MIME type: text/html;profile=mcp-app

GiftRoam app v4 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v4 (legacy alias) URI
ui://giftroam/app.html@v4

MIME type: text/html;profile=mcp-app

GiftRoam app v5 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v5 (legacy alias) URI
ui://giftroam/app.html@v5

MIME type: text/html;profile=mcp-app

GiftRoam app v6 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v6 (legacy alias) URI
ui://giftroam/app.html@v6

MIME type: text/html;profile=mcp-app

GiftRoam app v7 (legacy alias) — GiftRoam

Advertised by the server during the last successful anonymous check.

Legacy widget URI — serves the current app.

GiftRoam app v7 (legacy alias) URI
ui://giftroam/app.html@v7

MIME type: text/html;profile=mcp-app

countries — Deliverable countries

Advertised by the server during the last successful anonymous check.

Active destination countries (ISO-2, name, currency). Refreshed by the daily catalog sync.

countries URI
giftroam://countries

MIME type: application/json

occasions — Occasions

Advertised by the server during the last successful anonymous check.

Occasion slugs usable in search_gifts (birthday, anniversary, …), with seasonal flags.

occasions URI
giftroam://occasions

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

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
1288 ms
95th percentile latency
1288 ms

Maintenance history

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

  • · probe · passed · 1288 ms · metadata changed · 6 tool(s), 10 resource(s), 0 resource template(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 giftroam-mcp https://mcp.giftroam.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 giftroam-mcp --url https://mcp.giftroam.com/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start giftroam-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "giftroam-mcp": {
      "type": "http",
      "url": "https://mcp.giftroam.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 giftroam-mcp https://mcp.giftroam.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.giftroam.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": {
    "giftroam-mcp": {
      "serverUrl": "https://mcp.giftroam.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like GiftRoam 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 GiftRoam 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