TravelAI门户✈️
您的人工智能旅行伴侣,助您找到完美的酒店。
TravelAI门户是一个全栈旅行预订平台,通过模型上下文协议(MCP)利用Claude AI帮助用户轻松发现、比较和预订酒店。它结合了现代web界面、强大的REST API和智能人工智能工具,提供了无缝的旅行计划体验。
特性
- 智能酒店搜索:通过Claude集成使用自然语言查询的人工智能搜索
- 酒店详细信息:全面的酒店详情,包括客房、设施和政策
- 实时可用性:通过即时定价计算查看房间可用性
- 预定管理:查看、创建和管理酒店预订
- 聪明定价:透明定价,含税费明细
- MCP集成:Claude AI可以直接搜索酒店并管理预订
- 安全认证:基于JWT的身份验证,具有安全密码处理功能
- 速率限制:内置速率限制以防止滥用
- 类型安全:跨前端和后端的完整TypeScript
- 响应式设计:采用Tailwind CSS的移动优先用户界面
技术栈
前端:Next.js 14、React 18、顺风CSS、TanStack查询、Zustand 后端:Hono、TypeScript、Prisma ORM、JWT、Stripe、Redis 数据库:PostgreSQL与Prisma 人工智能集成:Claude AI通过模型上下文协议(MCP) 包管理器:pnpm(带Turbo的工作区单仓库)
快速开始
先决条件
- Node.js>=20.0.0
- pnpm>=8.0.0
- PostgreSQL数据库
- Redis(可选,用于生产率限制)
- Claude API密钥(用于MCP集成)
- 条纹API密钥(用于支付处理)
安装
# Clone the repository
git clone
cd travelai-portal
# Install dependencies
pnpm install环境设置
创建一个 .env 根目录中的文件,包含以下变量:
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/travelai
# API Configuration
NEXT_PUBLIC_API_URL=http://localhost:3000/api
API_BASE_URL=http://localhost:3000/api
# Authentication
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-secret-key-here
# Claude AI & MCP
ANTHROPIC_API_KEY=your-claude-api-key
MCP_SERVER_PATH=./packages/mcp-server/dist/index.js
# Stripe
STRIPE_SECRET_KEY=your-stripe-secret-key
STRIPE_PUBLISHABLE_KEY=your-stripe-publishable-key
# Redis (Optional, for production)
REDIS_URL=redis://localhost:6379
# Environment
NODE_ENV=development数据库设置
# Generate Prisma client
pnpm db:generate
# Create/update database schema
pnpm db:push
# Run migrations (if using migration workflow)
pnpm db:migrate
# Seed the database with sample data
cd packages/database
pnpm db:seed正在运行开发服务器
# Start all services (frontend, API, and development watch)
pnpm dev
# Or run individual services:
# Frontend at http://localhost:3000
cd apps/web && pnpm dev
# Backend API at http://localhost:3001
cd apps/api && pnpm dev
# MCP Server (for Claude integration)
cd packages/mcp-server && pnpm build && pnpm start项目结构
travelai-portal/
├── apps/
│ ├── api/ # Hono REST API backend
│ │ ├── src/
│ │ │ ├── index.ts # Server entry point
│ │ │ ├── middleware/ # Auth, rate limiting
│ │ │ ├── services/ # Business logic
│ │ │ └── lib/ # JWT, Stripe, utilities
│ │ └── package.json
│ │
│ └── web/ # Next.js frontend
│ ├── app/ # App router pages and layouts
│ ├── components/ # React components
│ ├── lib/ # Client utilities
│ └── package.json
│
├── packages/
│ ├── database/ # Prisma schema and utilities
│ │ ├── prisma/
│ │ │ ├── schema.prisma # Database schema
│ │ │ └── migrations/ # Migration history
│ │ ├── src/
│ │ │ ├── index.ts # Prisma client export
│ │ │ └── seed.ts # Database seeding
│ │ └── package.json
│ │
│ ├── shared/ # Shared types and utilities
│ │ ├── src/
│ │ │ ├── types/
│ │ │ │ ├── user.ts
│ │ │ │ ├── hotel.ts
│ │ │ │ ├── booking.ts
│ │ │ │ ├── chat.ts
│ │ │ │ └── api.ts
│ │ │ └── utils/
│ │ │ ├── constants.ts
│ │ │ └── validation.ts
│ │ └── package.json
│ │
│ └── mcp-server/ # Claude MCP server
│ ├── src/
│ │ ├── index.ts # MCP server entry point
│ │ ├── types.ts # Tool input/output schemas
│ │ ├── lib/
│ │ │ └── api-client.ts
│ │ └── tools/ # MCP tool implementations
│ │ ├── search-hotels.ts
│ │ ├── get-hotel-details.ts
│ │ ├── check-availability.ts
│ │ ├── get-user-bookings.ts
│ │ └── create-booking-link.ts
│ └── package.json
│
├── turbo.json # Turbo monorepo config
├── tsconfig.json # Root TypeScript config
├── package.json # Root package.json
└── .env # Environment variables (create locally)可用脚本
| 命令 | 描述 |
|---|---|
pnpm dev | 以开发模式启动所有服务 |
pnpm build | 构建所有软件包和应用程序 |
pnpm lint | 在monorepo上运行ESLint |
pnpm test | 对所有包运行测试 |
pnpm typecheck | 类型检查TypeScript文件 |
pnpm clean | 清理构建工件和node_modules |
pnpm format | 使用Prettier格式化代码 |
pnpm db:generate | 生成Prisma客户端 |
pnpm db:push | 将架构推送到数据库 |
pnpm db:migrate | 运行数据库迁移 |
pnpm db:seed | 包含样本数据的种子数据库 |
pnpm db:studio | 打开Prisma Studio(可视化数据库编辑器) |
环境变量引用
数据库
DATABASE_URL:PostgreSQL连接字符串(必需)
API
NEXT_PUBLIC_API_URL:前端的公共API基础URL(默认值:http://localhost:3000/api)API_BASE_URL:后端API基本URL(默认值:http://localhost:3000/api)
认证
NEXTAUTH_URL:NextAuth.js站点URL(默认值:http://localhost:3000)NEXTAUTH_SECRET:JWT签名密钥(使用生成openssl rand -base64 32)JWT_SECRET:访问令牌的密码(可以与NEXTAUTH_Secret相同)JWT_REFRESH_SECRET:刷新令牌的秘密
克劳德AI&MCP
ANTHROPIC_API_KEY:用于MCP集成的Claude API密钥(AI功能所需)MCP_SERVER_PATH:编译的MCP服务器的路径(默认:./packages/MCP-server/dist/index.js)API_KEY:用于MCP服务器身份验证的可选API密钥
支付
STRIPE_SECRET_KEY:条纹API密钥(预订时需要)STRIPE_PUBLISHABLE_KEY:条纹可发布密钥(用于前端)
缓存和速率限制
REDIS_URL:Redis连接字符串(可选,如果未设置,则使用内存存储)NODE_ENV:环境(开发|生产)
MCP集成指南
TravelAI门户包括一个完整的MCP(模型上下文协议)服务器,用于Claude AI集成。这使克劳德可以直接搜索酒店、查看空房情况和管理预订。
Claude桌面配置
要将MCP服务器与Claude Desktop一起使用,请将其添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"travel-booking": {
"command": "node",
"args": ["/absolute/path/to/packages/mcp-server/dist/index.js"],
"env": {
"API_BASE_URL": "http://localhost:3000/api",
"API_KEY": "your-optional-api-key"
}
}
}
}构建MCP服务器
# Navigate to MCP package
cd packages/mcp-server
# Build the TypeScript
pnpm build
# Start the server
pnpm start可用工具
MCP服务器为Claude提供以下工具:
- 搜索酒店 -按地点、日期和偏好搜索酒店
- 获取hotel_详细信息 -检索特定酒店的全面详细信息
- check_可用性 -查看房间可用性和价格
- get_user_bookings -检索用户的预订历史记录
- create_booking_link -生成预先填写的预订URL
有关详细的工具文档,请参阅 软件包/mcp服务器/README.md.
API文档
REST API是用Hono构建的,为酒店搜索、预订管理和用户身份验证提供端点。
基本URL
http://localhost:3000/api关键终点
| 方法 | 端点 | 描述 |
|---|---|---|
| 得到 | /hotels/search | 使用筛选条件搜索酒店 |
| 得到 | /hotels/:id | 获取酒店详细信息 |
| 职位 | /bookings/check-availability | 查看房间可用性 |
| 得到 | /bookings/me | 获取用户的预订 |
| 职位 | /bookings | 创建预订 |
| 职位 | /auth/register | 注册新用户 |
| 职位 | /auth/login | 登录用户 |
有关API的完整文档,请参阅 apps/api/README.md.
发展
运行测试
# Run all tests
pnpm test
# Run tests for specific package
cd packages/shared && pnpm test数据库工作室
直观地探索和管理您的数据库:
pnpm db:studioPrisma工作室正式开业 http://localhost:5555.
代码风格
该项目使用:
- 更漂亮 用于代码格式化
- ESLint 对于linting
- TypeScript 用于类型安全
# Format all code
pnpm format
# Run linting
pnpm lint
# Type check
pnpm typecheck部署
前端(Next.js)
一键或手动设置即可部署到Vercel:
# Build
pnpm build
# Start production server
pnpm start有关Vercel部署的详细说明,请参阅 文档/部署.md.
后端API(Hono)
部署到Railway、Render或任何Node.js宿主:
# Build
cd apps/api && pnpm build
# Start
pnpm start必须在托管平台的仪表板中设置环境变量。
有关详细的部署说明,请参阅 文档/部署.md.
贡献
我们欢迎捐款!请按照以下步骤操作:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 进行更改
- 运行测试和梳理(
pnpm test && pnpm lint) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
请阅读 docs/DEVELOPMENT.md 详细的开发指南。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
支持
对于问题、疑问或建议:
- 在GitHub上打开一个问题
- 检查中的现有文档
/docs文件夹 - 查看中的API文档 apps/api/README.md
- 请参阅中的MCP集成指南 软件包/mcp服务器/README.md
路线图
- \[\]带地图视图的高级酒店过滤
- \[\]用户评论和评分系统
- \[\]多语言支持
- \[\]移动应用程序(React Native)
- \[\]忠诚度计划集成
- \[\]航班预订集成
- \[\]旅行保险选项
