物业估价和价格预测MCP服务器
模型上下文协议(MCP)服务器,使用迪拜土地部(DLD)交易数据提供物业估值、价格预测和投资分析工具。
特性
- 自动估价模型(AVM):使用可比销售分析估算房产价值
- 价格走势预测:通过时间序列分析预测未来价格
- 租金收益率计算:估计租金收入潜力
- 市场风险评估:分析市场波动性和稳定性
- 投资评分:整体投资评估和建议
- 可比销售价格:查询最近的类似交易
建筑
服务器支持双数据源:
- CSV模式:从本地CSV文件加载交易数据(默认)
- PostgreSQL模式:连接到PostgreSQL数据库进行大规模部署
安装
先决条件
- Python 3.9或更高版本
- pip包管理器
设置
- 克隆存储库:
git clone
cd MCP-Property-Evaluation- 安装依赖项:
pip install -r requirements.txt- 配置环境变量:
cp .env.example .env编辑 .env 并配置您的数据源:
对于CSV模式:
DLD_DATA_SOURCE=csv
DLD_CSV_PATH=./data/transactions-2025-11-16.csv对于PostgreSQL模式:
DLD_DATA_SOURCE=postgres
DATABASE_URL=postgresql://user:password@localhost:5432/dld_db
DATABASE_TABLE=dldtransactions- 添加您的交易数据:
- 将CSV文件放在 data/ 目录,或 - 使用DLD事务模式配置PostgreSQL数据库
数据模式
CSV格式
CSV应包含以下列:
| 列 | 类型 | 描述 |
|---|---|---|
| 交易编号 | 字符串 | 唯一交易ID |
| INSTANCE_DATE | 日期时间 | 交易日期 |
| GROUP_EN | 字符串 | 交易组 |
| PRODURE_EN | string | 事务处理过程 |
| IS_OFFPLAN_EN | 字符串 | 计划外指示符 |
| IS_FREE_HOLD_EN | 字符串 | 永久保存状态 |
| USAGE_EN | string | 属性使用类型 |
| AREA_EN | string | 位置/区域名称 |
| PROP_TYPE_EN | 字符串 | 属性类型 |
| PROP_SB_TYPE_EN | 字符串 | 属性子类型 |
| TRANS_VALUE | 浮点数 | 交易金额(AED) |
| 程序_AREA | 浮动 | 注册面积(平方米) |
| 实际面积 | 浮动 | 实际面积(平方米) |
| ROOMS_EN | string | 卧室数量 |
| 停车 | 整数 | 停车位 |
| NEAREST_METRO_EN | string | 最近的地铁站 |
| NEAREST_MALL_EN | string | 最近的商场 |
| NEAREST_LANDMARK_EN | string | 最近的地标 |
| TOTAL_BUYER | 整数 | 买家数量 |
| TOTAL_SELLER | 整数 | 卖家数量 |
| MASTER_PROJECT_EN | string | 主项目名称 |
| PROJECT_EN | string | 项目名称 |
PostgreSQL架构
CREATE TABLE dldtransactions (
id SERIAL PRIMARY KEY,
transaction_number VARCHAR(50),
instance_date TIMESTAMP,
group_en VARCHAR(50),
procedure_en VARCHAR(100),
is_offplan_en VARCHAR(20),
is_free_hold_en VARCHAR(20),
usage_en VARCHAR(50),
area_en VARCHAR(100),
prop_type_en VARCHAR(50),
prop_sb_type_en VARCHAR(50),
trans_value NUMERIC,
procedure_area NUMERIC,
actual_area NUMERIC,
rooms_en VARCHAR(20),
parking INTEGER,
nearest_metro_en VARCHAR(100),
nearest_mall_en VARCHAR(100),
nearest_landmark_en VARCHAR(100),
total_buyer INTEGER,
total_seller INTEGER,
master_project_en VARCHAR(100),
project_en VARCHAR(100)
);用法
运行服务器
python src/server.py服务器将启动并可供MCP客户端连接。
可用工具
1.估计值_属性值
使用可比销售分析估算房产价值。
参数:
property_type(string):'公寓','别墅','联排别墅',“商业”,'顶层公寓'area_name(string):位置/区域名称actual_area(浮动):物业面积(平方米)bedrooms(int,可选):卧室数量is_offplan(bool,可选):计划外状态usage(字符串,可选):“住宅”,“商业”
退货:
{
"estimated_value": 1500000.0,
"confidence_score": 85.5,
"price_per_sqm": 15000.0,
"comparable_count": 42,
"similar_properties": [...],
"value_range": {
"low": 1400000.0,
"median": 1500000.0,
"high": 1600000.0
}
}示例:
Agent: What's a fair price for a 2-bedroom flat in Dubai Marina with 100 sqm?
Use: estimate_property_value(
property_type="flat",
area_name="Dubai Marina",
actual_area=100,
bedrooms=2
)2.预测_价格_趋势
预测一个地区的未来价格趋势。
参数:
area_name(string):要分析的位置property_type(string):属性类型prediction_horizon(int):1、3或6个月bedrooms(int,可选):按卧室过滤
退货:
{
"current_price_sqm": 15000.0,
"predicted_price_sqm": 15750.0,
"trend_direction": "up",
"trend_percentage": 5.0,
"transactions_analyzed": 156,
"prediction_confidence": 78.5
}3.计算剩余产量
估算租金收益潜力。
参数:
area_name(string):位置property_type(string):属性类型actual_area(浮动):物业面积(平方米)bedrooms(int,可选):卧室数量is_offplan(bool,可选):计划外状态
退货:
{
"estimated_purchase_price": 1500000.0,
"estimated_monthly_rent": 8125.0,
"estimated_annual_rent": 97500.0,
"annual_rental_yield": 6.5,
"confidence": 85.5,
"market_sample_size": 42
}4.评分_市场_风险
评估市场风险和波动性。
参数:
area_name(string):要分析的区域property_type(字符串,可选):属性类型筛选器analysis_period_months(int):分析周期(默认值:12)
退货:
{
"market_volatility_score": 35.2,
"price_stability": "medium",
"transaction_frequency": "high",
"recent_activity": 87,
"trend_strength": 72.5
}5.评估_投资_潜力
整体投资评估和建议。
参数:
area_name(string):位置property_type(string):属性类型actual_area(浮动):物业面积(平方米)bedrooms(int,可选):卧室数量purchase_price(浮动,可选):购买价格(如果没有提供,则为估计价格)is_offplan(bool,可选):计划外状态investment_horizon_months(int):投资期限(默认值:36)
退货:
{
"investment_score": 78.5,
"recommendation": "buy",
"expected_appreciation": 15.5,
"rental_yield_annual": 6.5,
"combined_return": 22.0,
"risk_level": "medium",
"key_factors": [
"Strong price appreciation expected",
"High rental yield potential",
"Stable market with low volatility"
]
}示例:
Agent: Is Downtown Dubai a good investment area right now?
Use: evaluate_investment_potential(
area_name="Downtown Dubai",
property_type="flat",
actual_area=85,
bedrooms=2,
investment_horizon_months=36
)6.获取_可复制_销售
获取最近的可比销售交易。
参数:
area_name(string):位置property_type(string):属性类型bedrooms(int,可选):卧室数量actual_area(浮动,可选):按面积过滤(±10%范围)limit(int):最大结果(默认值:20)
退货:
{
"sales": [
{
"transaction_number": "102-49493-2025",
"instance_date": "2025-08-01",
"price": 1669000.0,
"area_sqm": 76.95,
"price_per_sqm": 21690.0,
"rooms": "2 B/R",
"bedrooms": 2,
"parking": 1,
"project_name": "CAPRIA EAST",
"is_offplan": "Off-Plan",
"days_ago": 45
}
],
"total_count": 15
}7.数据统计
获取已加载事务数据的统计信息。
退货:
{
"total_transactions": 50000,
"date_range": {
"start": "2020-01-01",
"end": "2025-11-15"
},
"unique_areas": 250,
"unique_property_types": 15,
"total_value": 150000000000.0
}配置选项
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
DLD_DATA_SOURCE | csv | 数据源:“csv”或“postgres” |
DLD_CSV_PATH | ./data/transactions-2025-11-16.csv | CSV文件的路径 |
DATABASE_URL | - | PostgreSQL连接字符串 |
DATABASE_TABLE | dldtransactions | 数据库表名 |
MCP_PORT | 5000 | MCP服务器端口 |
LOG_LEVEL | INFO | 日志记录级别 |
CACHE_REFRESH_INTERVAL_HOURS | 24 | 数据缓存刷新间隔 |
项目结构
MCP-Property-Evaluation/
├── src/
│ ├── server.py # Main MCP server
│ ├── data_loader.py # Data loading (CSV/PostgreSQL)
│ └── analysis_engine.py # Analysis logic
├── data/
│ └── transactions-*.csv # Transaction data (CSV mode)
├── .env.example # Environment template
├── requirements.txt # Python dependencies
└── README.md # This file分析方法
可比销售分析
- 按面积、物业类型和规模过滤交易(±20%容差)
- 使用过去12个月的数据
- 使用IQR方法删除统计异常值
- 基于样本量和方差计算置信度
价格走势预测
- 分析滚动窗口(3、6、12个月)
- 使用线性回归进行趋势分析
- 基于R平方和数据量的置信度
- 季节性因素
风险评分
- 用变异系数衡量的波动性
- 交易频率表明市场流动性
- 基于价格走势一致性的趋势强度
投资评分
- 结合升值、租金收益和风险
- 权重:回报(60%)、风险(30%)、信心(10%)
- 建议:strong_buy(75+),buy(60-75),hold(40-60),避免(\<40)
性能优化
- 内存缓存:可配置间隔的缓存数据(默认值:24小时)
- 索引查询:按区域和物业类型优化过滤
- 高效计算:NumPy/Pandas矢量化操作
- 智能默认值:丢失数据的合理回退
错误处理
服务器优雅地处理:
- 数据缺失或不完整
- 无效参数
- 可比销售额不足
- 数据库连接问题
所有错误都会返回结构化的JSON,并带有清晰的错误消息。
发展
运行测试
# TODO: Add test suite
python -m pytest tests/贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 提交拉取请求
许可证
\[添加许可证信息\]
支持
对于问题、疑问或贡献,请在GitHub上打开问题。
更新日志
版本1.0.0
- 初始版本
- 7个用于属性分析的MCP工具
- CSV和PostgreSQL数据源支持
- 综合估值与投资分析
