后端工程挑战——房地产MCP服务器
该项目由一个模型上下文协议(MCP)服务器组成,旨在弥合大型语言模型(LLM)和私有房地产数据库之间的差距。该服务器使AI代理能够通过不同的工具自主查询房产数据、管理目录并生成SEO优化的营销内容。
该项目采用模块化架构,具有不同的层(核心、域、基础设施、服务器、服务),确保关注点的分离。它采用非阻塞异步设计,使用asyncio有效地处理并发数据库操作和外部API调用。该解决方案包括通过Bearer Token身份验证的强大安全性、SQLite的持久存储以及针对AI交互优化的标准化JSON通信层。
1.MCP工具
search_properties:按城市、价格范围和房产状态(可用/已售出)进行高级筛选搜索。get_property_details:全面检索特定物业的完整技术规格。generate_listing_content:生成SEO就绪HTML片段的自动化管道(包括 `和` 标签),具有可定制的语言和语调。add_property:使用强制模式验证和持久字符串ID安全注册新上市。update_property:更新修改特定字段的功能,而无需重新发送整个记录。delete_property:通过唯一标识符从数据库中永久删除财产记录。seed_data:内置实用程序,用于使用示例记录初始化数据库以进行测试和演示。
2.部署
该设置基于Docker。
需求
- Docker 20+
- Docker Compose v2+
配置
服务配置使用容器内的环境变量。在这种情况下,可以在docker compose文件中修改所有必要的参数:
| 变量 | 描述 |
|---|---|
APP_NAME | 用于标识MCP服务器的显示名称 |
APP_API_TOKEN | 承载令牌身份验证所需的密钥 |
DATABASE_URL | SQLite数据库文件的连接字符串 |
HOST | 服务器将绑定到的网络接口地址 |
PORT | 服务器将侦听的TCP端口号 |
FASTMCP_DEBUG | 布尔标志,用于启用或禁用详细调试模式 |
FASTMCP_LOG_LEVEL | 应用程序日志的详细程度(例如,INFO、DEBUG) |
运行应用程序
docker compose up --build在第一次构建后,您可以重新启动而无需重建:
docker compose up运行MCP检查器
MCP检查器在已加载承载令牌的情况下启动。在这个挑战中,测试密钥被设置为:“secret_token_2026”:
npx @modelcontextprotocol/inspector http://localhost:8000/sse --header "Authorization: Bearer secret_token_2026"3.设计标准
建筑
我选择了分层模块化架构(核心、域、基础设施、服务器、服务)来严格执行关注点分离。通过将业务逻辑与传输协议和持久层解耦,我确保了系统的可维护性和可扩展性。这种结构最大限度地减少了副作用,允许修改或交换单个组件,如数据库引擎或MCP接口,而不会影响应用程序的其他部分。
异步设计
由于MCP协议本质上是异步的,我实现了一个非阻塞执行模型来保持服务器的高响应性。通过asyncio.to_tothread将同步数据库I/O卸载到工作线程,我确保了事件循环保持畅通。这是关键,因为它可以防止磁盘I/O成为瓶颈。通过保持事件循环的自由,服务器保持快速,并为模型提供即时反馈,即使我们在后台处理大量数据操作。
数据库集成
我选择SQLite主要是为了可移植性。在挑战环境中,零配置的独立文件是确保项目“即插即用”的最实用的选择,尽管PostgreSQL将是生产环境的标准。我选择SQL而不是NoSQL,因为房地产记录本身就是结构化的。关系模型提供了开箱即用的本地模式实施和数据完整性,而NoSQL将迫使我们在应用程序逻辑中手动处理这些一致性检查。
认证
我选择了Bearer Token身份验证,因为它是一种简单的行业标准模式。它为这个项目提供了正确的平衡:通过Authorization标头保护敏感的写入操作(如添加或删除属性),而不会过度设计身份验证流。它可靠,易于为任何客户端实现,并且完全符合MCP协议的无状态特性。
运输
我实现了SSE(服务器发送事件)传输,以满足云就绪和简化HTTP测试的要求。除了合规性之外,与stdio等本地替代方案相比,SSE是Docker化环境中更稳健的选择。它与标准web基础架构和反向代理无缝集成,确保了一个稳定的、生产就绪的通信渠道,在部署过程中易于监控和调试。
边缘情况和错误处理
我通过实施集中式错误格式化程序来优先考虑系统弹性。对于无效ID或模式不匹配等边缘情况,服务器返回结构化JSON反馈,而不是无声故障或通用错误。这为LLM提供了足够的上下文来理解请求失败的原因,使其能够自主纠正参数并在没有人为干预的情况下重试。
4.今后的改进
- 基于真实人工智能的内容生成器
- 根据要求实施MCP资源
- MCP根据要求提示模板实施
- 单元测试
_此存储库是作为交互式AI后端工程师挑战赛的一部分提供的,旨在用于评估目的。_
