🚀 MCP聊天查询-模型上下文协议演示
 
生产就绪的实施 模型上下文协议(MCP) 配备Express.js服务器和Next.js前端。该项目演示了LLM代理如何通过标准化协议与外部工具进行交互。
📺 演示
- 现场演示:\[您的Vercel网址\]
- API文档:\[您的服务器URL\]/api文档
- 演示视频:\[您的YouTube/Drive链接\]
✨ 特性
MCP服务器(Express.js)
- 工具注册表:使用JSON模式验证的动态工具注册
- OpenAPI规范:交互式Swagger UI文档
- 认证:带有RBAC的基于API密钥的身份验证(基于角色的访问控制)
- 速率限制:可配置的请求限制
- 审计日志:完成工具调用跟踪
- 结构化日志记录:使用Pino进行生产准备测井
- 数据库:Prisma ORM+MongoDB(默认为本地)
- 综合测试:单元和集成测试,覆盖率超过70%
- Docker支持:生产就绪的集装箱化
前端(Next.js)
- 交互式聊天界面:美观、反应灵敏的聊天界面
- 工具可视化:实时显示工具调用和结果
- 现代设计:Tailwind CSS+shadcn/ui组件
- 类型安全:完全支持TypeScript
- 服务器端API路由:安全的API密钥管理
开发运维
- Docker Compose:多容器编排
- GitHub 操作:自动化CI/CD管道
- 容器注册表:自动构建Docker镜像
- 健康检查:服务监控和自动重启
🏗️ 建筑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Next.js App │────────▶│ MCP Server │────────▶│ Tool Handlers │
│ (Frontend UI) │ HTTP │ (Express.js) │ │ (Business Logic)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ ▼ ▼
│ ┌──────────────┐ ┌────────────────┐
│ │ Validator │ │ MongoDB │
│ │ (AJV+Schema)│ │ (Prisma) │
└───────────────────▶└──────────────┘ └────────────────┘
API Routes │
▼
┌──────────────┐
│ Audit Log │
│ (Memory) │
└──────────────┘🚀 快速开始
先决条件
- Node.js 18+
- npm或纱线
- Docker和Docker Compose(可选)
- MongoDB 6+(本地)或Docker(用于数据库)
选项1:本地运行
- 克隆仓库
git clone https://github.com/YOUR_USERNAME/mcp-portfolio.git
cd mcp-portfolio- 启动MCP服务器
cd server
npm install
cp .env.example .env
# Edit .env with your API key (APP_API_KEY)
# Ensure MongoDB is running locally:
# - Docker: docker compose up -d mongo
# - Homebrew (mac): brew services start mongodb-community
# Initialize database (Prisma + MongoDB)
npm run prisma:generate
npm run prisma:push
npm run prisma:seed
# Start development server
npm run dev
# Server running on http://localhost:4000- 启动Next.js应用程序 (在新航站楼)
cd app
npm install
cp .env.local.example .env.local
# Edit .env.local with server URL and API key
npm run dev
# App running on http://localhost:3000- 访问应用程序
- 前端:http://localhost:3000
- API文件:http://localhost:4000/api-docs
- 健康:http://localhost:4000/admin/health
选项2:使用Docker运行
docker compose中包含MongoDB服务;无需安装本地MongoDB。
# Set API key
export APP_API_KEY=your-secret-key
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down📚 API文档
可用工具
1. search_db -搜索产品数据库(MongoDB+Prisma)
{
"tool": "search_db",
"input": {
"q": "laptop",
"category": "Electronics",
"limit": 5
}
}2. 创建_票 -创建支持票(MongoDB)
{
"tool": "create_ticket",
"input": {
"title": "Login Issue",
"body": "Cannot login to my account",
"priority": "high"
}
}3. run_query -执行数据库查询(仅限管理员,模拟)
{
"tool": "run_query",
"input": {
"query": "SELECT * FROM products LIMIT 5"
}
}核心终点
| 方法 | 端点 | 描述 | 需要身份验证 |
|---|---|---|---|
| 得到 | /tools | 列出所有可用工具 | ✅ |
| 职位 | /invoke | 调用特定工具 | ✅ |
| 职位 | /agent/ask | 向代理发送消息 | ✅ |
| 得到 | /admin/health | 健康检查 | ✅ |
| 得到 | /admin/audit | 获取审核日志 | ✅ |
| 得到 | /api-docs | Swagger用户界面 | ❌ |
认证
所有受保护的终结点都需要标头中的API密钥:
curl -H "x-api-key: your-api-key" http://localhost:4000/tools🧪 测试
运行服务器测试
cd server
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # With coverage测试覆盖率
当前覆盖范围: 70%+ (分支、函数、行、语句)
🔒 安全特性
- API密钥验证:安全的端点访问
- 基于角色的访问控制:基于角色的工具权限(管理员、用户)
- 速率限制:防止滥用(默认100个要求/分钟)
- 输入验证:使用AJV进行JSON模式验证
- 审计日志:跟踪所有工具调用
- Helmet.js:安全标题
- 跨域资源共享:可配置的来源白名单
- 危险操作检测:防止破坏性查询
📊 演出
- 工具执行:平均约100-200ms
- 速率限制:100个请求/分钟(可配置)
- 内存使用:每次服务约50MB
- 并发请求:处理100+并发
🛠️ 技术栈
后端
- Express.js -Web框架
- 阿联酋 -JSON模式验证器
- 皮诺 -结构化日志记录
- Swagger用户界面 -API文件
- 棱镜 -用于MongoDB的ORM/客户端
- MongoDB -文档数据库
- 测试 -测试框架
前端
- Next.js 14 -React框架
- TypeScript -类型安全
- 尾风CSS -造型
- Lucide图标 -图标库
开发运维
- 码头工人 -集装箱化
- GitHub 操作 -CI/CD
- Docker Compose -编排
📁 项目结构
mcp-portfolio/
├── server/ # Express.js MCP server
│ ├── src/
│ │ ├── config/ # Configuration
│ │ ├── middleware/ # Auth, audit, permissions
│ │ ├── routes/ # API routes
│ │ ├── tools/ # Tool registry & handlers
│ │ ├── validators/ # Schema validators
│ │ ├── db/ # Prisma client
│ │ └── index.js # Entry point
│ ├── prisma/ # Prisma schema & seed
│ ├── __tests__/ # Test suites
│ ├── Dockerfile
│ └── package.json
│
├── app/ # Next.js frontend
│ ├── app/
│ │ ├── api/chat/ # API routes
│ │ ├── globals.css # Global styles
│ │ ├── layout.tsx # Root layout
│ │ └── page.tsx # Home page
│ ├── components/ # React components
│ ├── lib/ # Utilities
│ ├── Dockerfile
│ └── package.json
│
├── .github/
│ ├── workflows/ # CI/CD pipelines
│ └── ISSUE_TEMPLATE/ # Issue templates
│
├── docs/ # Documentation
├── docker-compose.yml
├── LICENSE
└── README.md🎯 路线图
- \[\]添加真正的LLM集成(OpenAI/Anthropic)
- \[\]实现RAG的矢量存储
- \[\]添加多步骤工具链
- \[\]实现工具结果缓存
- \[\]添加Kubernetes清单
- \[\]创建性能基准
- \[\]使用Playwright添加E2E测试
- \[\]实现WebSocket以实现实时更新
- \[\]添加更多工具示例(电子邮件、日历等)
- \[\]创建全面的视频教程
🤝 贡献
欢迎投稿!请查看我们的 贡献指南.
- 复刻仓库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'feat: add amazing feature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- 受模型上下文协议规范的启发
- 采用现代最佳实践构建
- 社区反馈和贡献
📧 联系
你的名字- @你的推特
项目链接:
______________________________________________________________________
⭐ 标记此回购 如果你觉得有帮助的话!
内置于❤️ \[你的名字\]
