Developers

AI tools (MCP server)

Last updated:

Use Gia’s Giraffes from Claude, ChatGPT, Cursor or Claude Code: find the right gift, check who opened theirs, and send gifts you approve, with spending limits you set. On Pro.

1.What it is

Our MCP server lets an AI assistant work with your Gia’s Giraffes account: find gifts in the catalog, look up contacts and upcoming birthdays and meetings, check whether a gift was opened or redeemed, and draft and send gifts. You talk to the assistant in plain words; it calls our tools. It’s part of Pro (including Complimentary Pro and Pro team seats).

The server URL is:

https://www.giasgiraffes.com/api/mcp

It uses the Model Context Protocol’s Streamable HTTP transport, signs you in with OAuth on our consent screen, and also accepts your API keys for developer tools (a key keeps its scope there: read only, read and draft, or read, draft and send; a test key only touches test data). Manage connections, keys, limits and usage in the Developer hub.

2.Connect Claude (web and desktop)

  1. In Claude, open Customize → Connectors, choose + Add, then Add custom connector.
  2. Name it Gia’s Giraffes and paste https://www.giasgiraffes.com/api/mcp as the URL. Leave the OAuth settings on their defaults.
  3. Choose Connect. Sign in to Gia’s Giraffes if asked, pick what Claude can do and its spending limits, then choose Allow.

On a Claude Team or Enterprise plan, an owner adds custom connectors for the organization in its connector settings first.

3.Connect ChatGPT

  1. In ChatGPT, open Settings → Apps & Connectors. If custom connectors are off, turn on Developer mode under Advanced settings (on a business workspace, an admin may need to allow it).
  2. Choose Create (or Add custom MCP server), name it Gia’s Giraffes, paste https://www.giasgiraffes.com/api/mcp and choose OAuth for authentication.
  3. Confirm, then sign in and choose Allow on our consent screen.

ChatGPT connects with OAuth only (not API keys).

4.Connect Cursor

Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

{
  "mcpServers": {
    "gias-giraffes": { "url": "https://www.giasgiraffes.com/api/mcp" }
  }
}

Open Cursor Settings → MCP; next to Gia’s Giraffes choose Connect (or Needs login) and approve on our consent screen. To use an API key instead, add a header (keep the key in an environment variable, never in a shared file):

"gias-giraffes": {
  "url": "https://www.giasgiraffes.com/api/mcp",
  "headers": { "Authorization": "Bearer ${env:GIAS_GIRAFFES_API_KEY}" }
}

5.Connect Claude Code

Add the server, then sign in from Claude Code:

claude mcp add --transport http gias-giraffes https://www.giasgiraffes.com/api/mcp

In Claude Code, run /mcp, pick gias-giraffes and choose Authenticate. Your browser opens our consent screen. Or use an API key (it then skips OAuth):

claude mcp add --transport http gias-giraffes https://www.giasgiraffes.com/api/mcp \
  --header "Authorization: Bearer $GIAS_GIRAFFES_API_KEY"

6.Tools

Every tool says whether it only reads or changes something, so your AI tool can ask before the ones that spend money.

search_catalogread only

Search the Gia's Giraffes gift catalog. Filter by words, category, price range (in cents), occasion and badges (e.g. "Small business", "woman-owned", "eco-friendly"); sort; page through results. Prices are what the sender pays if the gift is accepted; recipients never see prices.

Try: “Find thank-you gifts under $50 from small businesses.”

get_gift_detailsread only

Everything about one catalog gift: description, what's inside, details, photos, badges, occasions, shipping time and price (what you'd pay if accepted). Use an id from search_catalog.

Try: “What’s inside the second one, and how fast does it ship?”

search_contactsread only

Search your contacts (your team's shared contacts on a team) by name, email, company or title, and/or a tag. Use it to find who "Avery" is before drafting a gift.

Try: “Who’s Avery at Northwind?”

get_contactread only

One contact: emails, company, title, tags, occasions, notes, the gifts you've sent them and any scheduled sends. Never their mailing address.

Try: “What have I sent Avery before?”

list_upcoming_occasionsread only

Birthdays, anniversaries, work and client anniversaries and other dates for your contacts in a date range (default: the next 30 days; up to a year). Sorted by date.

Try: “Whose birthdays are coming up in the next two weeks?”

list_upcoming_meetingsread only

Your meetings from a connected Google or Outlook calendar (default: the next 14 days; up to 90), with who's attending, which attendees are contacts, and who you've already sent a thank-you gift. Returns connected=false if no calendar is connected.

Try: “Who did I meet with this week that I haven’t thanked yet?”

create_gift_draftwrites

Draft a gift. Nothing is sent: you get a draft_id and a full summary (recipient, gift, note, the most it can cost, the card, the connection's remaining limits). Show the summary to the user, then call send_gift. Give either budget_cents (they choose any gift up to that budget) or item_id (one gift from search_catalog). Pick the recipient with contact_id (from search_contacts) or recipient name and email.

Try: “Send Avery a $50 thank-you for the intro.” (drafts it and shows you the summary)

send_giftspends · asks first

Send a drafted gift. Requires the draft_id from create_gift_draft and confirm: true, which you should only pass after the user has seen the draft summary and said yes. Without confirm: true nothing is sent and you get the summary back. Returns what was sent (status, link). The gift is charged to the saved card only if the recipient accepts.

Try: “Looks good, send it.” (only after you’ve seen the draft)

create_gg_linkspends · asks first

Create a GG Link: one shareable URL anyone can open to claim one gift within your budget (they pick it, enter their address and accept; they never see a price). Guardrails: max_claims (required in spirit, default 10; Free plans up to 5), an optional expires_at, one claim per person (checked by email and shipping address), and optionally require_approval so each claim waits for your Approve or Skip. Each claim is charged to your saved card only when it's accepted, so the most it can cost is max_claims × budget. Counts against this connection's spending limits. Confirm with the user before creating one. For one specific person, send a gift instead (create_gift_draft, then send_gift).

Try: “Make a $40 GG Link for the 10 people at Friday’s workshop, ending next Monday, and let me approve each claim.”

get_gift_statusread only

Where a gift you sent stands: sent, opened (viewed), accepted (redeemed), shipped, delivered, cancelled or expired, with times. Takes the gift id or the code from its link. Never the recipient's address or tracking.

Try: “Did Avery open her gift?”

list_recent_giftsread only

Gifts you sent, newest first, with status, whether they were opened (viewed) and redeemed, and how they were sent. Filter by status or by redeemed / not yet redeemed.

Try: “Which gifts from this month haven’t been redeemed?”

get_spend_summaryread only

What your gifting cost and did over a period: gifts sent, opened, accepted, spend (charged net of refunds), open budgets that could still be charged, and cost per accepted gift, by source. Also this connection's limits and what's left of them.

Try: “How much have I spent on gifts in the last 90 days?”

Example: “Send Avery a $50 thank-you”

  1. The assistant finds Avery with search_contacts.
  2. It calls create_gift_draft with her contact, budget_cents: 5000 and your note. Nothing is sent. It shows you the summary: who, what (her choice of gifts up to $50), the note, the most it can cost, and the card.
  3. You say “send it”. It calls send_gift with the draft id and confirm: true. Avery gets her gift by email; you’re charged only if she accepts.
  4. Later: “Did Avery redeem it?” → get_gift_status.

7.Safety and spending limits

  • Nothing sends without a draft. send_gift needs a draft id and confirm: true; without it, it sends nothing and returns the summary. Drafts expire after 24 hours.
  • Read-only connections. On the consent screen you can give a tool read-only access: it can search and look things up but can’t draft, send or create links.
  • Spending limits per connection, per gift, per day and per month (new connections start at $100 a gift, $300 a day and $1000 a month). They count what gifts could cost (their budgets), so they hold before anyone redeems; a GG Link counts as claims × budget. Each send reserves its amount atomically, so several sends at once can’t together go over a limit. Change them on the consent screen or later in Settings.
  • Teams. Owners can cap what each member sends through AI tools a month (Team page). Monthly team budgets and approvals apply as in the app: a gift over budget waits for approval.
  • Your card stays with us. Gifts use your saved card (or your team card) and are charged only if accepted. If you have no card, the tool gives you a link to add one in the app; AI tools never see or collect card details.
  • Recipients never see prices. Gifts are sent by email or as a link you share; AI tools don’t send texts.
  • Each connection can make 60 requests a minute. Every tool call is logged (which tool, a summary of what was asked, the result), and gifts show “Sent via Claude” (or the tool’s name) in your gifts list and Reports.
  • A connection only ever sees your own data (and your team’s shared contacts).

8.See and revoke connections

Settings → Developers → AI tools lists every tool that signed in with OAuth, with when it was last used, what it has spent, its limits and recent activity. Choose Revoke to disconnect one; it stops working immediately. A tool connected with an API key isn’t listed there: manage and revoke the key in Settings → Developers → API keys (its request counts are on the Usage tab), and it stops working the moment the key is revoked.

If your plan leaves Pro, connected tools get an upgrade message instead of results until you’re back on Pro. Questions: hello@giasgiraffes.com.