Present Agent MCP
Enables secure purchase of recommended gifts through Shopify checkout via the picks URL.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Present Agent MCPFind a birthday gift for my best friend under $60"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Present Agent MCP
Find 5 explainable, personalized gift recommendations from inside any MCP client β Claude Code, Codex, Cursor, and more.
Current status and split guidance: docs/STATUS.md.
Present Agent is a gifting engine that reasons about the relationship, occasion, and the signal a gift sends β not just product search. This package is the public, hosted MCP server: it calls the live Present Agent API at presentagent.vip, so you need no local product catalog, no Shopify credentials, and no model-provider API keys to get value.
π 5 curated picks, each with a plain-language reason it fits
π Works in any MCP-capable client over stdio
π Hosted by default β zero secrets to configure
π Every result includes a shareable web URL you can open or continue in the browser
Full docs & client catalog: https://presentagent.vip/mcp
Quickstart
Claude Code
claude mcp add present-agent --transport stdio --scope user \
-e PRESENT_AGENT_CLIENT=claude-code \
-- npx -y present-agent-mcpThen ask Claude, in any project:
Find a gift for my sister's birthday under $100. She just got into pottery.
Codex
One command writes the config to ~/.codex/config.toml:
npx -y present-agent-mcp setup codexUse --dry-run to preview without writing, or --local-context to enable opt-in local context (see Local context mode). Restart Codex, then ask for a gift.
Any other MCP client (generic stdio config)
{
"mcpServers": {
"present-agent": {
"command": "npx",
"args": ["-y", "present-agent-mcp"],
"env": { "PRESENT_AGENT_CLIENT": "custom" }
}
}
}Requirements: Node.js β₯ 18 and network access to
https://presentagent.vip. The first run downloads the package vianpx; subsequent runs are cached.
Related MCP server: NeuronSearchLab
Tools
present_find_gift
Find 5 personalized gifts through the hosted Present Agent API. Only recipient is required β every other field sharpens the picks but is optional.
Parameter | Type | Description |
| string Β· required | Name or short description of who the gift is for. |
| string | partner, parent, sibling, friend, colleague, client, etc. |
| string | birthday, anniversary, thank-you, housewarming, onboarding, holiday⦠|
| string | Free-form: |
| string | Comma-separated interests, hobbies, brands, or taste signals. |
| string | Known likes, style, taste, or profile clues. |
| string | Hard rules: avoid categories, delivery deadline, allergies, space, values. |
| string | Functional needs or outcomes the gift should support. |
| string | What you (the host AI) know about the giver: budget norms, taste, taboos, prior gifts. Leave empty if unknown β never fabricate. |
| string | What you know about the recipient beyond name/relation/occasion: life events, prior gift outcomes, recent notes. Leave empty if unknown β never fabricate. |
| boolean | Opt in to local context search. Also requires |
Returns (JSON text):
{
"mode": "hosted",
"apiBase": "https://presentagent.vip",
"sessionId": "51bd7b67-β¦",
"picksUrl": "https://presentagent.vip/picks/51bd7b67-β¦",
"contextSignals": { "hosted": { "sources": ["explicit input"] } },
"recommendations": [
{
"slot": "top_pick",
"name": "White β Sage Valley Pottery Pie Dish",
"brand": "PRINTFRESH",
"price": 60,
"matchScore": 0.5,
"whyThisFits": "Combines her love of pottery with practical kitchen artistryβ¦",
"giftAngle": "Present it as functional art she'll use regularly."
}
]
}picksUrl is a real, shareable page β open it, send it, or continue refining in the browser.
present_beta_start
Zero-argument tool that returns the fastest onboarding instructions, a live web fallback (/gift/new), and the local-context opt-in hint. Useful as a first call to orient a fresh agent.
How to get the best picks
The engine reasons from context. The more specific, true signal you give it, the better the 5 picks β but don't invent detail.
Do
Name a concrete interest or recent change ("just got into pottery", "started trail running"). Specifics beat adjectives.
State the relationship and occasion β they change what a gift signals.
Put genuine hard limits in
constraints("no alcohol", "ships to Canada by Dec 20", "nut allergy"). Constraints are respected before scoring.Pass through real memory in
giver_context/recipient_contextwhen your host AI already knows it.
Don't
Fabricate interests or budgets to "fill the form" β empty is better than wrong; the model treats blanks honestly.
Expect it to read minds: "something nice" with no other signal yields generic picks.
Use it to search a specific SKU β it recommends what to give, it isn't a product-lookup tool.
Good call:
present_find_gift({ recipient: "my dad", relationship: "parent", occasion: "birthday", budget: "$80-120", interests: "gardening, espresso, jazz vinyl", constraints: "no clothing, he's hard to surprise" })
What's feasible (and what isn't)
β Feasible | β Not in this MCP |
5 explainable gift picks for a person + occasion | Completing a purchase / checkout (happens on the web, link provided) |
Budget, hard constraints, and taste honored | Real-time inventory or per-item shipping quotes (confirmed at checkout) |
A shareable | Editing a saved recipient profile or wishlist (web/app feature) |
Optional, opt-in local context hints | Reading your full local files (only sanitized, opt-in signals are sent) |
Works offline-of-keys: no model/Shopify keys needed | Running the full local catalog engine (that's the private app repo) |
Practical notes
Latency: a fresh recommendation runs live LLM scoring and typically takes ~20β60s. Repeat/cached contexts are faster.
Currency: all prices are CAD.
Checkout: to buy, open
picksUrland continue onpresentagent.vipβ secure Shopify checkout. The MCP never hands users to external retailers.Determinism: picks are personalized and may vary slightly run-to-run as context changes.
Local context mode (opt-in)
By default the hosted server uses only what you pass in the tool call. Nothing local is read.
To let it look at local Claude/Codex/Gemini context files for soft signals about the named recipient, both must be true:
Set
PRESENT_ENABLE_LOCAL_AGENT_CONTEXT=1in the server env, andPass
useAgentContext: trueon the tool call.
When enabled, the server extracts compact preference / need / constraint hints and sends them as weak signals (never hard requirements). Secret-looking lines and paths are skipped β raw files are never transmitted. These hints are clearly labeled in the request and treated as low-confidence flavour, behind anything you state explicitly.
Configuration
All environment variables are optional β the package runs with safe defaults and no secrets. See .env.example.
Variable | Default | Purpose |
|
| Client label for attribution (e.g. |
|
| API base. Change only if self-hosting Present Agent. |
| unset (off) | Allow opt-in local context search (still needs |
| unset (off) | Echo extracted local lines in the response (debug only). |
Privacy
No keys, no accounts required to use the hosted tools.
The server sends only the gift context you provide to
presentagent.vip.Local context search is off by default, double-gated, sanitized, and never transmits raw files or secret-looking content.
Requests carry an attribution label (
source: "mcp", yourPRESENT_AGENT_CLIENT) for analytics β no personal identifiers are added by this package.
Troubleshooting
Symptom | Fix |
| Ensure Node.js β₯ 18 and that |
Tool call times out | Recommendations can take up to ~60s; raise your client's MCP tool timeout. |
Empty / generic picks | Add a concrete interest + relationship + occasion; avoid vague input. |
Want to preview Codex config |
|
Run from source
git clone https://github.com/GuillaumeRacine/present-agent-mcp
cd present-agent-mcp
npm install
npm start # boots the stdio MCP serverLicense
MIT Β© Present Agent. See LICENSE.
Available Tools
2 toolspresent_beta_startA
Return the fastest beta onboarding instructions and live web fallback.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It only states the return value but omits any behavioral traits such as whether the operation is read-only, requires authentication, or has side effects. This is insufficient for a tool with zero annotation coverage.
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 a single sentence of 9 words, conveying the necessary purpose without any unnecessary words. It is optimally concise.
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?
The tool is very simple with no parameters and no output schema. The description tells what it returns. However, it lacks usage guidelines and behavioral transparency, which would be helpful for an agent to fully understand when and how to use it contextually.
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?
The tool has no parameters, and schema description coverage is trivially 100%. The description does not need to add parameter information beyond this. Baseline 4 is appropriate as the description adds no value but also does not need to.
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 clearly states the tool returns 'beta onboarding instructions' and a 'live web fallback', with a specific verb 'Return'. It distinguishes itself from the sibling tool 'present_find_gift' which likely deals with gift-related functionality, so purpose is specific and 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?
No guidance is provided on when to use this tool versus the sibling 'present_find_gift' or any alternative. The description does not indicate context or exclusion criteria, leaving the agent without decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
present_find_giftA
Find 5 personalized gifts through the hosted Present Agent API. Optional local Claude/Codex context search is opt-in.
| Name | Required | Description | Default |
|---|---|---|---|
| needs | No | Functional needs, wishes, or outcomes the gift should support | |
| budget | No | Budget: '$50-100', 'under $75', '$150 CAD', etc. | |
| occasion | No | Occasion: birthday, anniversary, thank you, onboarding, housewarming, etc. | |
| interests | No | Comma-separated interests, hobbies, brands, or taste signals | |
| recipient | Yes | Recipient's name or short description | |
| constraints | No | Hard constraints: avoid categories, delivery deadline, allergies, space, values | |
| preferences | No | Known likes, style, taste, brands, hobbies, or profile clues | |
| relationship | No | Relationship: partner, parent, friend, colleague, client, etc. | |
| giver_context | No | Host AI memory/context about the giver: preferences, budget norms, accessibility needs, taboos, prior gifts, and personal taste. Empty if unknown; never fabricate. | |
| useAgentContext | No | Opt in to local Claude/Codex/Gemini context search. Also requires PRESENT_ENABLE_LOCAL_AGENT_CONTEXT=1. | |
| recipient_context | No | Host AI memory/context about the recipient beyond name/relation/occasion: life events, hobbies, prior gift outcomes, and recent notes. Empty if unknown; never fabricate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It mentions calling an external API and opt-in local search, but does not disclose data handling, rate limits, or any potential side effects. Partially transparent but incomplete.
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 concise, front-loaded sentences. Every word adds value with no redundancy. Efficiently communicates core purpose and key behavioral note.
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?
Given 11 parameters, full schema coverage, no output schema or annotations, the description is adequate but lacks details on return format or external API behavior. It meets the minimum viability but leaves gaps for an AI agent.
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 schema already documents all parameters. The description adds no extra meaning beyond mentioning the opt-in context search, which is already covered in the useAgentContext parameter description. Baseline score applies.
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?
Clearly states the verb 'Find' and resource 'personalized gifts' with a specific count of 5. Distinguishes from sibling tool 'present_beta_start' by being the actual search/retrieval tool.
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?
The description implies usage for gift finding and notes that local context search is opt-in, but does not explicitly state when to use this tool versus the sibling or when not to use it. Lacks clear when/when-not guidance.
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. Dates show when Glama detected each change.
2 tool updates
v0.1.1- First observed
present_beta_start - First observed
present_find_gift
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one provides beta onboarding instructions, the other finds personalized gifts. There is no overlap in functionality.
Both tools follow a consistent verb_noun pattern with the 'present_' prefix, making it easy to understand their actions at a glance.
With only 2 tools, the server feels underdeveloped for an 'agent' service. While each tool has a specific function, the overall scope is limited.
The tool surface is minimal, missing obvious operations like getting more details on gifts, managing user preferences, or iterating on results. Agents are left with limited functionality.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search and get fashion products recommendations across multiple e-ecom stores
Remote MCP for Living Stack offer discovery and buyer-authorized checkout preparation.
Get recommended by Amazon's AI. Hosted MCP server for Amazon listing compliance & generation.
AI commerce for Shopify: product search, comparison, recommendations, and checkout via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for SendaMeal.com enabling AI assistants to search gift meal products, filter by dietary restrictions, and get occasion-based recommendations. Powered by Cloudflare Workers and AutoRAG.MIT

NeuronSearchLabofficial
AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI clients to access the NeuronSearchLab recommendation engine for fetching personalized recommendations, tracking user interactions, and managing catalogue items through natural language.188MIT- AlicenseNot gradedqualityDmaintenancePersonalized restaurant recommendations, table bookings, and delivery via MCP, CLI, or API, learning user taste and acting proactively.MIT
- AlicenseAqualityDmaintenanceAn MCP server that connects AI assistants to the Wonderkraftz Premium Gifting Studio, enabling product browsing, personalized gift recommendations, cart management, and checkout through natural language.1219MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/GuillaumeRacine/present-agent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server