rush-gift-mcp
Integrates with Kakao's gift, local, and mobility APIs to recommend gifts and pickup options based on user's location, budget, and time constraints.
Click on "Deploy 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., "@rush-gift-mcpGangnam to Pangyo, 35min, 30k won, need pickup gift for girlfriend"
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.
오다 주웠다 MCP
약속 장소로 이동 중인 사용자를 위해 지금 살 수 있는 선물과 픽업 동선을 추천하는 PlayMCP 제출용 MCP 서버 프로젝트입니다.
Concept
"오다 주웠다처럼 자연스럽게 건넬 수 있도록, AI가 선물 후보와 픽업 경로를 한 번에 짜주는 MCP"
사용자는 출발지, 목적지, 도착 제한 시간, 예산, 관계, 상황을 자연어로 말합니다. AI는 이 MCP의 도구를 호출해 선물 후보, 픽업 매장, 경유 추가 시간, 실패 리스크, 짧은 메시지를 함께 제안합니다.
Related MCP server: mcp-drizly
Why MCP
일반 AI 답변은 "좋아 보이는 선물"을 말할 수 있지만, 지금 상황에서 실제로 들를 수 있는지 판단하지 못합니다. 이 MCP는 추천을 다음 데이터와 계산으로 검증합니다.
선물 후보 데이터
픽업 가능 매장 데이터
출발지-매장-목적지 경유 시간
약속 시간까지 남은 여유
관계/상황/예산별 실패 리스크
Current Strategy
카카오 선물하기 MCP/API가 없더라도 동작하도록 fixture provider로 시작합니다. 나중에 카카오 연동이 가능해지면 provider 구현만 교체합니다.
MCP Tools
-> RushGiftService
-> GiftProvider
-> PickupStoreProvider
-> PlaceProvider
-> RouteProvider초기 provider:
FixtureGiftProvider: 샘플 선물 데이터FixturePickupStoreProvider: 샘플 픽업 매장 데이터MockRouteProvider: 좌표 기반 경유 시간 추정
교체 대상 provider:
KakaoGiftProviderKakaoLocalProviderKakaoMobilityRouteProviderWebSearchGiftProvider
Tools
plan_rush_gift: 상황을 받아 추천, 픽업, 경유 시간, 메시지를 한 번에 반환recommend_gifts: 관계/상황/예산 기준으로 선물 후보 추천find_pickup_options: 선물 후보별 픽업 매장과 경유 가능성 계산draft_gift_message: 관계와 상황에 맞는 짧은 카드 메시지 생성
PlayMCP
Submission endpoint:
https://rush-gift-mcp.vercel.app/mcpHealth check:
https://rush-gift-mcp.vercel.app/healthPlayMCP gateway:
https://playmcp.kakao.com/mcpThe submission endpoint is this server. The PlayMCP gateway is Kakao's proxy for approved MCP servers in a user's toolbox and requires a PlayMCP access token.
Demo Prompt
지금 강남역에서 판교역으로 여자친구 생일 약속 가는 중이야.
35분 안에 도착해야 하고 예산은 3만원이야.
가는 길에 픽업 가능한 선물 추천해줘.30분으로 요청하면 현재 샘플 경로 기준으로는 픽업이 어렵다는 fallback을 반환합니다. 이 케이스는 "무조건 추천"이 아니라 불가능한 상황을 솔직하게 말하는 데모로 사용합니다.
Quick Start
Local MCP Inspector:
uv sync
uv run mcp dev main.pyMCP Inspector가 열리면 다음 도구를 호출할 수 있습니다.
plan_rush_gift: 선물 추천, 픽업 매장, 경유 가능성, 메시지를 한 번에 반환recommend_gifts: 관계/상황/예산 기준으로 선물 후보 추천find_pickup_options: 선물 후보별 픽업 매장과 경유 가능성 계산draft_gift_message: 관계와 상황에 맞는 짧은 카드 메시지 생성
stdio 서버로 직접 실행할 때:
uv run python main.pyHTTP MCP endpoint로 실행할 때:
MCP_TRANSPORT=streamable-http FASTMCP_HOST=127.0.0.1 PORT=8000 uv run python main.pyLocal URLs:
MCP endpoint:
http://127.0.0.1:8000/mcpHealth check:
http://127.0.0.1:8000/health
Docker:
docker build -t rush-gift-mcp .
docker run --rm -p 8000:8000 rush-gift-mcpVercel:
npx vercelAfter deployment, use:
https://<production-domain>/mcpIf PlayMCP cannot load tools from the Vercel URL, deploy the same code to a container/always-on host with the Dockerfile.
테스트:
uv run pytestDocumentation
Development Status
Implemented:
fixture-backed gift, place, store, and route providers
transparent scoring for gift fit and pickup feasibility
four MCP tools in
main.pyunit tests for recommendation, fallback, budget filtering, pickup options, and MCP tool registration
Next:
deploy the Dockerized HTTP MCP server
replace fixture providers with Kakao/web providers when available
Available Tools
4 toolsdraft_gift_messageARead-onlyIdempotent
Drafts a short gift card message with Oda Juwotda(오다 주웠다) that fits the gift, relationship, occasion, and tone.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | 메시지 톤. 예: warm, polite | warm |
| occasion | Yes | 상황. 예: 생일, 집들이, 사과, 감사, 기념일 | |
| gift_name | Yes | 선물 이름. 예: 미니 꽃다발 | |
| relationship | Yes | 받는 사람과의 관계. 예: 여자친구, 상사, 친구, 부모님 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that the message is 'short', but does not elaborate on any behavioral nuances (e.g., whether it queries a catalog, requires specific input formats, or has side effects beyond generating text). Since annotations carry most of the burden, this is adequate but not rich.
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 one concise sentence without filler, but the inclusion of 'Oda Juwotda(오다 주웠다)' adds an unexplained element that may confuse an agent unfamiliar with the phrase. It is still brief and front-loaded with the action, so it earns a 4.
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 the tool has 4 parameters (3 required), a rich output schema (not shown but indicated), and annotations covering safety, the description provides enough to understand the tool's function. It doesn't explain the 'Oda Juwotda' reference nor mention any special requirements, but the presence of an output schema means return values need not be described. The only gap is the unexplained phrase, so 4 is reasonable.
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% for all four parameters, so the schema already documents them. The description adds that the message 'fits the gift, relationship, occasion, and tone', which essentially repeats the parameter names without offering extra syntax, formats, or constraints. Baseline 3 is appropriate for high coverage with minimal additional meaning.
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 verb 'Drafts' and the resource 'gift card message', and specifies it 'fits the gift, relationship, occasion, and tone'. This distinguishes it from sibling tools like plan_rush_gift, recommend_gifts, and find_pickup_options, which have different purposes (planning, recommending, finding).
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 the tool is for drafting messages but does not explicitly state when to use it versus alternatives, nor does it mention conditions like 'use this when the user has a gift, relationship, and occasion'. It relies on the agent inferring usage from the verb and siblings, which meets the 'implied usage' bar but not explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pickup_optionsARead-onlyIdempotent
Finds pickup stores and detour times with Oda Juwotda(오다 주웠다) for gifts that are already chosen (gift_ids).
Use this as a follow-up after narrowing candidates with recommend_gifts. When origin, destination, and remaining time are all known from the start, plan_rush_gift alone is enough.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 반환할 픽업 후보 개수. | |
| origin | Yes | 출발지 이름. 예: 강남역 | |
| gift_ids | Yes | 픽업 가능성을 확인할 선물 ID 목록. | |
| destination | Yes | 목적지 이름. 예: 판교역 | |
| current_time | No | 현재 시각. HH:MM 형식. | 18:00 |
| transport_mode | No | 이동 수단. 예: car, taxi, transit, walk | car |
| minutes_until_meeting | Yes | 약속까지 남은 시간. 분 단위. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint false. Description adds the precondition that gifts are already chosen and references the Oda Juwotda service, but doesn't disclose additional side effects, limitations, or dependencies beyond annotations. With annotations carrying the safety profile, this is adequate but not rich.
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-loads purpose, then usage guidance. The 'Oda Juwotda(오다 주웠다)' phrase is unexplained and may be noise, but overall is efficient.
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?
For a read-only tool with full schema coverage, output schema, and strong annotations, the description covers purpose and usage. It doesn't explain return format, but output schema exists; it doesn't discuss prerequisites beyond 'already chosen', which is stated. Minor gap: no mention of how limit interacts with results, but schema has default.
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 has 100% coverage, so baseline 3. Description repeats gift_ids but adds no extra semantics for parameters like minutes_until_meeting or transport_mode beyond what schema already provides.
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?
Description opens with 'Finds pickup stores and detour times' – a specific verb and resource. It also scopes to 'gifts that are already chosen (gift_ids)', distinguishing from recommend_gifts (narrowing candidates) and plan_rush_gift (all known from start).
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?
Explicitly states when to use: as a follow-up after recommend_gifts. It also names the alternative plan_rush_gift and the condition under which that sibling alone suffices. This gives an agent clear decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_rush_giftARead-onlyIdempotent
Plans a last-minute gift pickup with Oda Juwotda(오다 주웠다).
Use this tool whenever the user gives an origin, a destination, and the minutes left before a meeting. It returns everything in one call: gift recommendations, pickup stores near the destination, detour travel time, whether the user can still arrive on time, and a short gift message. If the user mentions a route or a meeting time, call this tool instead of recommend_gifts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 반환할 추천 개수. | |
| origin | Yes | 출발지 이름. 예: 강남역 | |
| occasion | Yes | 상황. 예: 생일, 집들이, 사과, 감사, 기념일 | |
| budget_krw | Yes | 선물 예산. 원 단위. | |
| constraints | No | 피해야 할 조건. 예: 향 싫어함, 술 제외 | |
| destination | Yes | 목적지 이름. 예: 판교역 | |
| preferences | No | 선호 조건. 예: 디저트, 꽃, 실용적인 것 | |
| current_time | No | 현재 시각. HH:MM 형식. | 18:00 |
| relationship | Yes | 받는 사람과의 관계. 예: 여자친구, 상사, 친구, 부모님 | |
| transport_mode | No | 이동 수단. 예: car, taxi, transit, walk | car |
| minutes_until_meeting | Yes | 약속까지 남은 시간. 분 단위. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral context by explaining that it returns everything in one call, including feasibility of arriving on time, which is not obvious from the schema alone.
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 the core purpose, then gives the usage trigger, the output bundle, and a sibling comparison. Every sentence contributes actionable information, and there is no filler or redundant restating of the tool name.
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 output schema exists and the annotations are rich, so the description does not need to restate return structures or safety. It clearly explains the composite nature and the core use case, but it could more fully address how the other sibling tools relate to this one, especially when a user only wants a gift message or pickup option.
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 all 11 parameters already have individual descriptions. The tool description highlights only origin, destination, and minutes_until_meeting as the main triggers, without adding parameter-level meaning beyond what the schema already provides.
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 the specific action ('Plans a last-minute gift pickup') and lists the concrete output bundle it returns. It also distinguishes itself from recommend_gifts and implicitly from the single-purpose sibling tools by framing itself as the one-call composite 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?
It gives an explicit trigger condition ('whenever the user gives an origin, a destination, and the minutes left before a meeting') and names recommend_gifts as the alternative. However, it does not clarify when an agent should prefer draft_gift_message or find_pickup_options instead, so the routing guidance is not fully complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_giftsARead-onlyIdempotent
Recommends gift ideas with Oda Juwotda(오다 주웠다) — ideas only.
Returns gift candidates matched to relationship, occasion, budget, preferences, and constraints. It does not compute pickup stores or travel time. If origin, destination, or remaining minutes are available, call plan_rush_gift instead of this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 반환할 후보 개수. | |
| occasion | Yes | 상황. 예: 생일, 집들이, 사과, 감사, 기념일 | |
| budget_krw | Yes | 선물 예산. 원 단위. | |
| constraints | No | 피해야 할 조건. 예: 향 싫어함, 술 제외 | |
| preferences | No | 선호 조건. 예: 디저트, 꽃, 실용적인 것 | |
| relationship | Yes | 받는 사람과의 관계. 예: 여자친구, 상사, 친구, 부모님 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond annotations: it explicitly states the tool does not compute pickup stores or travel time, and that it returns 'ideas only.' This prevents the agent from expecting logistics output. It doesn't describe return format, but the output schema exists, so that's not required. Minor gap: no mention of how candidates are ranked or whether it can return zero results, but the explicit 'ideas only' scope is valuable.
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 compact and front-loaded: the first sentence states the core purpose and scope ('ideas only'), the second sentence clarifies what it does not do, and the third gives the routing rule. Every sentence earns its place, and the most important scoping information comes first.
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?
For a read-only, idempotent recommendation tool with 100% schema coverage and an output schema, the description is nearly complete. It covers purpose, scope, exclusions, and routing to a sibling. The only missing context is what happens when no gift candidates match (e.g., empty result behavior), but that's a minor gap given the output schema and annotations. The routing rule to plan_rush_gift is a strong contextual addition.
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 6 parameters. The description adds a high-level summary of what the parameters collectively do ('matched to relationship, occasion, budget, preferences, and constraints') but doesn't add per-parameter detail beyond the schema. Baseline 3 is appropriate because the schema does the heavy lifting and the description doesn't contradict or add significant new parameter 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 states a specific verb ('Recommends gift ideas'), a resource (gift candidates), and a clear scope ('ideas only'). It explicitly distinguishes itself from plan_rush_gift by stating what it does NOT compute (pickup stores, travel time). This is a clear, specific purpose that an agent can act on.
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 explicitly says when to use this tool vs alternatives: 'If origin, destination, or remaining minutes are available, call plan_rush_gift instead of this tool.' This is a direct, actionable routing rule. It also implies the tool is for idea generation, not logistics, which is clear context.
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.
4 tool updates
v0.1.0- First observed
draft_gift_message - First observed
find_pickup_options - First observed
plan_rush_gift - First observed
recommend_gifts
TDQS
Scored across 4 tools
The four tools are clearly separated by intent: drafting a message, planning a full rush-gift pickup, recommending gift ideas, and finding pickup options for chosen gifts. plan_rush_gift is the comprehensive workflow, while the others are targeted components, and the descriptions explicitly state when each should be used instead of overlapping alternatives.
All tool names follow a consistent verb_noun snake_case pattern: draft_gift_message, plan_rush_gift, recommend_gifts, find_pickup_options. The verbs clearly express the action and the nouns make the target object obvious.
Four tools is a well-scoped size for this niche domain. Each tool covers a distinct stage of the workflow without bloat, and plan_rush_gift earns its place as a combined entry point for full-information scenarios.
The tool set covers the full rush-gift workflow: gift idea generation, pickup logistics, travel feasibility, and gift message drafting. plan_rush_gift aggregates the complete path, while the standalone tools handle partial-information cases, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
The Google Maps MCP server is a fully-managed server provided by the Maps Grounding Lite API that connects AI applications to Google Maps Platform services. It provides three main tools for building LLM applications: searching for places, looking up weather information, and computing routes with details like distance and travel time. The server acts as a proxy that translates Google Maps data into a format that AI applications can understand, enabling agents to accurately answer real-world location and travel queries.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA Shopify-focused MCP server that enables AI agents to manage store operations like order tracking, product discovery, and checkout link generation. It facilitates customer-facing interactions including shipping estimates and real-time inventory searches.-
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to search for alcohol products, manage shopping carts, and place orders on Drizly. It uses browser automation to check product availability, discover local stores, and track delivery status.128 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP 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
- AlicenseAqualityDmaintenanceFind 5 explainable, personalized gift recommendations from inside any MCP client by reasoning about relationship, occasion, and context.27 npmMIT