Agentic Travel Recommendations Service
A working proof-of-concept for an agent-discoverable travel recommendations API.
What is included
- FastAPI backend
- Mock member profile and partner-configuration services
- Partner-specific recommendation caps
- Partner-specific category exclusions
- MCP-compatible JSON-RPC endpoint
- MCP tool discovery via
tools/list - MCP tool invocation via
tools/call - REST API
- Minimal browser UI
- Automated tests
Run locally
python -m venv .venv
# macOS/Linux
source .venv/bin/activate
# Windows PowerShell
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn app.main:app --reload
Open:
- UI: http://127.0.0.1:8000
- Swagger: http://127.0.0.1:8000/docs
- Health: http://127.0.0.1:8000/health
REST example
curl -X POST http://127.0.0.1:8000/api/recommendations \
-H "Content-Type: application/json" \
-d '{
"member_id": "member-1001",
"partner_id": "premium-bank",
"destination": "Portland",
"limit": 10
}'
MCP discovery example
curl -X POST http://127.0.0.1:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}'
MCP invocation example
curl -X POST http://127.0.0.1:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_recommendations",
"arguments": {
"member_id": "member-1001",
"partner_id": "premium-bank",
"destination": "Portland",
"limit": 10
}
}
}'
Sample IDs
Members:
member-1001member-1002member-1003
Partners:
premium-bankfamily-clubbusiness-card
Partner-rule examples
premium-bank: maximum 5 results; excludeshostelfamily-club: maximum 4 results; excludesnightlifeandcasinobusiness-card: maximum 3 results; excludeshostel,nightlife, andcasino
Test
pytest
Design notes
The recommendation engine first scores candidates against a mocked member profile, then applies the partner policy before returning results. Policy enforcement is performed server-side, so a client or agent cannot bypass recommendation caps or excluded categories.