Present Picker
Server Details
Gift recommendations matched to the person, the occasion, and your budget.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- wdlcmu/the-present-picker
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
get_gift is clearly distinct (single-item detail fetch), but pick_gift and search_gifts both return filtered lists of gift ideas over largely the same filter dimensions (interest, keyword, recipient, budget), and both even open with the identical tagline 'Picked for them, not the store.' The descriptions do explain the difference (curated ranked picks with lead_pick/answer_text vs. flat bank-order search), but an agent must read carefully to choose correctly.
All three tools follow a clean verb_noun pattern: get_gift, pick_gift, search_gifts. The only minor deviation is the plural 'gifts' in search_gifts versus singular 'gift' in the other two, which is a small blemish rather than a real inconsistency.
Three tools is on the lean side but appropriate for a focused gift-recommendation server: one to recommend, one to fetch detail, one to search. Each tool has a defensible role and nothing feels padded.
The pick/get/search lifecycle covers the core workflow, but there is no way to enumerate the bank's valid interests, styles, budget bands, or recipient shelves, which forces agents to guess at query vocabulary. get_gift's example-id fallback and the recipient_note behavior soften this, but discoverability is a notable gap.
Available Tools
3 toolsget_giftGet gift detailsARead-onlyIdempotentInspect
Picked for them, not the store: returns the full detail for one gift idea from the bank: description, why-line, a buying-notes line (what to look for and what to avoid when buying it), a care-and-pairing tip, budget band, who it suits, its interests and styles, and up to 3 similar ideas, each with its own link. Accepts a gift id returned by pick_gift or search_gifts, or a gift name like 'cast iron skillet'. When nothing matches, the result says so and gives example ids.
| Name | Required | Description | Default |
|---|---|---|---|
| gift_id | Yes | Gift id from pick_gift or search_gifts (e.g. 'cast-iron-skillet-10-inch-pre-seasoned'), or a gift name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower; the description still adds real value by disclosing the no-match behavior ('the result says so and gives example ids') and by enumerating the response payload in the absence of an output schema. It does not clarify name-matching semantics (fuzzy vs exact) or case sensitivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the field list, then fallback behavior — a sensible order. The long mid-sentence enumeration of return fields is justified because no output schema exists, though the opening tagline ('Picked for them, not the store') spends words on flavor rather than function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the burden of describing the return payload and the empty-match case, which is the right allocation of effort for a one-parameter read tool. Minor gaps remain around name-matching rules and invalid-id error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter is already fully documented. The description's mention of ids from pick_gift/search_gifts and the 'cast iron skillet' name example essentially restates the schema text, adding no new syntax or format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('returns the full detail for one gift idea from the bank') and immediately enumerates the returned fields, so the agent knows exactly what this yields versus the sibling pick/search tools. The scope — one gift, by id or name — is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the upstream sources of the identifier ('a gift id returned by pick_gift or search_gifts'), which implicitly routes the agent: find a gift with a sibling, then fetch details here. It does not explicitly say when NOT to use it (e.g., 'use search_gifts to browse'), so the routing is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pick_giftPick a giftARead-onlyIdempotentInspect
Returns up to 5 gift ideas from a fixed bank of 255 checked gift ideas, matched to who the gift is for, a budget band, interests, and an optional gift style. Each pick has a one-line description, a why-line explaining the fit, one buying note, its budget band, a link that opens that exact idea on thepresentpicker.com, and a photo link to the picture on that idea's page. Some picks carry a good_to_know line: a plain handling fact the bank states for that idea, such as the weight of a cast iron skillet, present only where the bank states one. The result also carries lead_pick — the top pick at full bank depth, with its buying notes (what to look for and what to avoid) and a care-and-pairing tip — more_ideas with the remaining picks under the heading 'More ideas if that one misses', and answer_text, that focused answer formatted as text: it opens by naming who the gift is for, in the caller's words, and how the top pick fits them. Recipient and budget band are hard filters. A style, when given, is a hard filter too: every pick carries the style, and the result reports total_matches and, on a style call, style_matches. Interests narrow the pool, and picks matching more interests rank first. keyword names a specific item the buyer asked for: picks matching every keyword word rank first inside the same filtered pool, carry their full bank detail, and the result reports keyword_matches (a miss is stated in the note, and a miss carries no lead_pick). exclude names an item the person already has: matching picks are dropped before ranking, and the result notes the drop. A recipient-only call (no budget, interest, style, or keyword) returns a spread across all budget bands, led by a mid-band pick and never by the $100+ band — a starting sampler, not a tailored list. A 'teen' recipient maps to the kid pool and carries a recipient_note explaining how teen picks are drawn from that pool. A 'coworker' recipient draws on the bank's coworker shelf — picks tagged for coworkers, ranked ahead of the general pool — and when a mix returns none of them, recipient_note says so plainly. A relation the bank has no shelf for (a sister, an aunt, an in-law, a cousin) is filed under the closest shelf, and recipient_note states the filing plainly. Ideas are generic product types: the bank names no brands, no stores, and no exact prices. When fewer than 5 ideas fit the exact mix, the result says so.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | Optional gift style: 'practical', 'fun', 'sentimental', or 'experience'. When given, every pick carries this style. | |
| budget | No | Optional budget band: 'under $25', '$25-$50', '$50-$100', or '$100+'. Omit to search every band. | |
| exclude | No | Optional: an item the user says the person already has, in plain words, e.g. 'cast iron skillet'. Picks matching it are dropped and the drop is disclosed in the note. | |
| keyword | No | Optional: the specific item the buyer named, in plain words, e.g. 'plant pot', 'bookmark', 'board game', 'star map'. When the bank holds that item for this recipient and budget, it ranks first. | |
| interests | No | Optional: what they are into. Bank interests: cooking, outdoors, tech, books, fitness, cozy, music, games, gardening, travel, science. | |
| recipient | Yes | Who the gift is for: 'mom', 'dad', 'partner', 'grandparent', 'friend', 'kid', 'coworker', or 'other'. Plain words work too, e.g. 'my wife', 'grandma', 'my son', 'my colleague'. 'teen' and 'teenager' map to 'kid' and carry a note explaining how teen picks are drawn from the kid pool. Relations the bank has no shelf for, like 'my sister' or 'my aunt', are filed under the closest shelf and the result notes the filing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only, closed-world, idempotent annotations, the description discloses extensive behavior: the 255-idea bank, max 5 results, ranking rules, hard-filter semantics, recipient shelf mapping, keyword-miss behavior, and what the result includes. This is unusually transparent for an agent deciding how the tool will behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with what the tool returns, which is good, but it is a very long dense paragraph. Many details are useful, yet the single-block structure and repeated filter/result explanations make it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return shape and does so thoroughly: picks, one-line descriptions, why-lines, buying notes, lead_pick, more_ideas, answer_text, and metadata fields. It also covers recipient mapping, hard filters, misses, and fewer-than-five-result cases, so an agent has enough context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has 100% description coverage, the description adds substantial cross-parameter meaning: style and budget act as hard filters, interests affect ranking, keyword matching ranks first and changes lead_pick behavior, exclude drops matching picks, and recipient values like 'teen' and 'coworker' trigger special mapping. These are semantic interactions the schema alone does not capture.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns up to 5 gift ideas from a fixed bank, matched to recipient, budget, interests, and optional style. It is clear what the tool does, but it never names or distinguishes the sibling tools get_gift and search_gifts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear invocation context by explaining hard filters, ranking behavior, recipient-only sampler behavior, and edge cases like keyword misses and excluded items. It does not explicitly say when to use pick_gift instead of get_gift or search_gifts, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_giftsSearch gift ideasARead-onlyIdempotentInspect
Picked for them, not the store: searches the fixed bank of 255 gift ideas by interest, by keyword, or by both, with optional recipient and budget-band filters. Returns up to 10 matches in bank order, each with a one-line description, a why-line, one buying note, its budget band, a photo link, and a link that opens that exact idea on thepresentpicker.com. The result reports the total number of matches, including when there are none.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional: max results to return, 1 to 10. Default 10. | |
| budget | No | Optional filter: 'under $25', '$25-$50', '$50-$100', or '$100+'. | |
| keyword | No | Optional: plain words to match against gift names and descriptions, e.g. 'coffee', 'science kit', 'board game'. Every word must match, so a named item finds its exact bank entry. | |
| interest | No | Optional: one bank interest: cooking, outdoors, tech, books, fitness, cozy, music, games, gardening, travel, science. | |
| recipient | No | Optional filter: 'mom', 'dad', 'partner', 'grandparent', 'friend', 'kid', 'coworker', or 'other'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world, yet the description adds real behavior: results come back in fixed bank order, capped at 10, and the response reports the total match count even when it is zero. It also enumerates the per-result payload (one-line description, why-line, buying note, budget band, photo link, deep link), which removes any ambiguity about what a call yields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core operation and followed by the return contract; nearly every clause carries information. The opening tagline 'Picked for them, not the store:' is the one piece of framing that does not earn its space against an otherwise dense, functional description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five optional parameters, no required inputs, no output schema and annotations already stating the safety profile, the description supplies exactly the missing pieces: the data source size, result ordering and cap, and the shape and count semantics of the response. An agent has everything needed to call this correctly and interpret the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including the budget bands, recipient set and interest list is already documented in structured form, making 3 the baseline. The description only adds the combinability hint ('by interest, by keyword, or by both') and the general filter framing, without going beyond the schema on limit or budget semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource — 'searches the fixed bank of 255 gift ideas' — plus the search axes (interest, keyword, both) and filter dimensions, so the scope is unambiguous. It never names the siblings get_gift or pick_gift, so the boundary between 'search many' and 'fetch/choose one' is left for the agent to infer from the names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'by interest, by keyword, or by both' implies the main usage modes, and the recipient/budget filters hint at narrowing use cases. However there is no explicit when-to-use guidance, no statement of when to prefer get_gift or pick_gift instead, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
get_gift - First observed
pick_gift - First observed
search_gifts
Related MCP Connectors
Person-first gift discovery with curated ideas, guides, categories, and brands.
Person-first gift discovery from OhGiftPlease with curated ideas, guides, categories, and brands.
Hand-picked gift ideas for birthdays that assistants turn into shareable wishlists fast. SE + US.
Hand-picked gift ideas for her (partner gifts), turned into shareable wishlists fast.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceRecommends gifts and drafts messages based on relationship, occasion, budget, and vibe.-
- AlicenseAqualityFmaintenanceFind 5 explainable, personalized gift recommendations from inside any MCP client by reasoning about relationship, occasion, and context.29 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables users to generate tailored gift suggestions and handwritten card messages from relationship context, recipient interests, urgency, and budget. It also factors social connections and milestones into occasion planning.7-
- FlicenseAqualityDmaintenanceThe rush-gift-mcp server helps users en route to an appointment find last-minute gift recommendations and pickup stores along their route, considering time constraints, budget, and relationship. It provides AI-driven planning tools that calculate detour feasibility and generate appropriate gift messages.4-
Glama MCP Gateway
Add one secure layer between your agents and this server.