关于 German Real Estate Depreciation & Restnutzungsdauer
这个开源 MCP 服务为房产持有者和顾问提供德国房产折旧及购房价款分摊的参考计算。它调用 AfAMax 公共 API 执行计算,也提供评估服务价格查询和初次电话预约工具。
主要功能
- 01估算房产折旧与剩余使用年限
- 02计算土地与建筑物的购房价款份额
- 03查询 AfAMax 评估产品价格
- 04查找可预约的初次电话时段
- 05通过邮件验证预约
适用场景
- 01估算出租房产的折旧
- 02比较土地与建筑物的购置价值
- 03查看评估价格和服务选项
- 04查找并预约免费初次电话
MCP 相关
向 MCP 客户端提供 AfAMax 计算、价格查询、时段查询和预约工具。可通过公共 Streamable HTTP 端点或 stdio 服务使用。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.rundum.immo/mcpclaude mcp add --transport http immo-rundum-real-estate-appraisal https://mcp.rundum.immo/mcp{"mcpServers":{"immo-rundum-real-estate-appraisal":{"type":"http","url":"https://mcp.rundum.immo/mcp"}}}在 Cursor 中打开{"servers":{"immo-rundum-real-estate-appraisal":{"type":"http","url":"https://mcp.rundum.immo/mcp"}}}在 VS Code 中打开{"mcpServers":{"immo-rundum-real-estate-appraisal":{"type":"http","url":"https://mcp.rundum.immo/mcp"}}}{"mcpServers":{"immo-rundum-real-estate-appraisal":{"serverUrl":"https://mcp.rundum.immo/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
5| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| locale | any | 否 | 上游说明所用的语言;默认为德语。 |
| taxRate | any | 否 | 个人边际所得税率,以小数表示,例如 0.42。/ Grenzsteuersatz。 |
| landArea | any | 否 | 土地面积,单位为平方米。/ Grundstücksfläche。 |
| floorArea | number | 是 | 居住或可用楼面面积,单位为平方米。/ Wohn- bzw. Nutzfläche。 |
| propertyType | enum | 是 | 德国住宅房产类别。CONDOMINIUM = Eigentumswohnung,ROW_HOUSE = Reihenhaus,SEMI_DETACHED = Doppelhaushälfte,APARTMENT_BUILDING = Mehrfamilienhaus,RESIDENTIAL_COMMERCIAL_BUILDING = Wohn- und Geschäftshaus。CONDOMINIUM | SINGLE_FAMILY_HOUSE | TWO_FAMILY_HOUSE | ROW_HOUSE | SEMI_DETACHED | APARTMENT_BUILDING | RESIDENTIAL_COMMERCIAL_BUILDING |
| modernization | any | 否 | 已知的八项现代化组件(Modernisierungselemente)状态:roof(Dach)、facadeInsulation(Fassadendämmung)、windowsDoors(Fenster und Außentüren)、heating(Heizung)、utilities(Leitungen)、bathrooms(Bäder)、interiorFitout(Innenausbau)、floorplanImprovement(Grundrissverbesserung)。尽可能询问全部八项。 |
| purchasePrice | any | 否 | 总购置价格,单位为 EUR。/ Kaufpreis。 |
| constructionYear | integer | 是 | 原始建造年份。/ Baujahr。 |
| includedInventory | any | 否 | 购置价格中包含的动产库存,金额以 EUR 计。 |
| standardLandValue | any | 否 | 每平方米标准土地价值,单位为 EUR。/ Bodenrichtwert。 |
| coreRenovationYear | any | 否 | 如适用,符合条件的大修年份。/ Jahr einer Kernsanierung。 |
| modernizationLevel | any | 否 | 详细组件数据不可用时使用的大致现代化程度。 |
| purchaseRelatedCosts | any | 否 | 以欧元计的购房相关费用(土地转让税、公证费、土地登记费、中介费)。/ Kaufnebenkosten。 |
详细介绍
Rundum Immo 房地产估值 MCP
一个开源的模型上下文协议服务,用于估算德国房地产的折旧(AfA / Gebäudeabschreibung)、剩余使用年限(Restnutzungsdauer)和购房价格分摊(Kaufpreisaufteilung)。它可帮助解答诸如出租房产能否按照高于 § 7 Abs. 4 EStG 规定的法定折旧率加速折旧,或剩余使用年限评估报告是否值得委托等问题。它提供 calculate_property_depreciation 和 calculate_purchase_price_allocation,并将这两项计算委托给公开的 AfAMax API;此外还提供 get_price_by_product、get_available_appointments 和 book_appointment,用于查询 AfAMax 评估价格并预约免费的初次咨询。专有的评估公式仍归 AfAMax 所有。
托管服务
公开的 Streamable HTTP 端点为:
https://mcp.rundum.immo/mcp
最终用户无需 API 密钥。调用受 AfAMax 针对各客户端及整个服务的速率限制和滥用防护约束。
通过 stdio 从源代码运行
需要 Node.js 22.12 或更高版本。
git clone https://github.com/Rundum-Immo/real-estate-appraisal-mcp.git
cd real-estate-appraisal-mcp
pnpm install --frozen-lockfile
pnpm build
配置 MCP 客户端以运行构建后的服务,并将路径替换为检出目录的绝对路径:
{
"mcpServers": {
"rundum-real-estate-appraisal": {
"command": "node",
"args": ["/absolute/path/to/real-estate-appraisal-mcp/dist/transports/stdio.js"]
}
}
}
stdio 服务会直接调用匿名 AfAMax API。其公开限额为每个 IP 每分钟 30 次请求、每个滚动日 500 次请求;也可能适用租户级上限。它只向 stdout 写入协议消息,只向 stderr 写入运行日志。
通过 npm 使用 stdio 安装
需要 Node.js 22.12 或更高版本。配置 MCP 客户端,通过 npx 启动已发布的软件包:
{
"mcpServers": {
"rundum-real-estate-appraisal": {
"command": "npx",
"args": ["-y", "@rundum-immo/real-estate-appraisal-mcp"]
}
}
}
工具
房产折旧
calculate_property_depreciation 接受完整的 AfAMax 公开请求参数:
- 必填:房产类型、建造年份和建筑面积。
- 可选:购房价格、土地面积、标准土地价值、库存物品、购置成本、核心翻修年份、边际税率、区域设置、粗略现代化程度,以及八项详细现代化组件的状态。
- 结果:年度和月度 AfA、与法定 AfA 的比较、预估节税额、建筑价值假设、现代化积分和剩余使用年限。
省略现代化数据时,AfAMax 会假设没有进行现代化,从而得出上限估算。对于多单元建筑,请提供整栋建筑的数据,或分别计算各个单元。结果仅供参考,不能替代税务、法律或评估建议。
输入示例:
{
"propertyType": "CONDOMINIUM",
"constructionYear": 1970,
"floorArea": 85,
"purchasePrice": 350000,
"taxRate": 0.42,
"locale": "en"
}
购房价格分摊
calculate_purchase_price_allocation 使用德国联邦财政部(BMF)的方法,将购置成本分摊至不可折旧的土地和可折旧的建筑物。
- 必填:房产类型、总购房价格、购房日期、建造年份、建筑面积、土地面积和标准土地价值。
- 共管公寓还需提供共有份额的分子和分母。
- 混合用途的住宅/商业建筑还需说明商业用途占比是否低于或高于 50%。
- 可选:购置成本、包含在内的库存物品、车库和地下停车位数量、月度净冷租金以及区域设置。
- 结果:所采用的方法、有参考价值的替代方法、土地/建筑物的占比和价值、折旧基础、方法不可用或不适用的原因,以及已披露的资产法默认值。
提供月度净冷租金后,即可使用收益法与资产法进行交叉核对。车库和有顶地下停车位的数量可提高资产法的准确度,因为这些车位会单独估值。由于公开参数不包含仅供测量师使用的因素,因此无法使用比较估值法。结果仅供参考,不能替代税务或法律建议。
输入示例:
{
"propertyType": "CONDOMINIUM",
"totalPurchasePrice": 500000,
"purchaseRelatedCosts": 40000,
"purchaseDate": "2024-06-15",
"constructionYear": 1975,
"floorArea": 75,
"landArea": 1200,
"standardLandValue": 2500,
"coOwnershipNumerator": 75,
"coOwnershipDenominator": 1000,
"undergroundParkingSpaces": 1,
"monthlyNetColdRent": 1400,
"locale": "en"
}
评估价格
get_price_by_product 返回单项产品当前的 AfAMax 欧元标价,含德国增值税:rnd(Restnutzungsdauergutachten)、kurzgutachten、vollgutachten、kaufpreisaufteilung 或 versetzbarkeitsgutachten。
- 可选项:房产检查(
none、exterior、interior_exterior)、加急处理,以及房产类型和房屋单元数量(用于计算多单元建筑的单价)。 - 结果:总价及其明细、未含税价格、列出所有附加费用的表格(便于比较选项),以及产品页面的来源链接。
不适用折扣码;下单时显示的价格具有约束力。
{ "product": "rnd", "viewingType": "interior_exterior", "expressDelivery": true, "locale": "en" }
首次通话预约
get_available_appointments 按日期列出 AfAMax 团队在 Europe/Berlin 工作日可预约的免费、无约束力的 15 分钟电话时段。最多查询未来 21 天(默认 7 天),每天最多列出 32 个时段(默认 8 个),并显示每天的全部空闲时段数。
{ "days": 1, "maxSlotsPerDay": 32, "locale": "en" }
book_appointment 分两步预约其中一个时段,因此只有能够访问指定邮箱的人才能确认预约:
- 使用时段的
startDateTime、name、email(可选phone、locale)调用。AfAMax 会发送一封含 6 位验证码的电子邮件,并返回verificationId。 - 再次调用时,仅提供
verificationId和用户从电子邮件中读取的otp。响应会确认预约,AfAMax 随后发送日历邀请。
验证码在 15 分钟后过期,最多可尝试 5 次。如果时段已被他人预约或电子邮件属于现有 AfAMax 账户等情况导致预约无法完成,系统会说明后续操作,并提供继续在 AfAMax 网站上操作的链接。
架构
MCP client -> this public adapter -> AfAMax public HTTPS API
此仓库仅包含传输、验证、错误映射和结果呈现代码,不包含评估公式、数据库、租户逻辑或报告生成内部实现。stdio 和无状态 Streamable HTTP 共用与传输无关的服务工厂。
开发
pnpm install
pnpm check
pnpm dev:stdio
使用 MCP Inspector 测试
通过 MCP Inspector 构建并启动本地 stdio 服务:
pnpm build
npx -y @modelcontextprotocol/inspector \
node --env-file-if-exists=.env dist/transports/stdio.js
在浏览器中连接,打开 Tools,并使用上面的示例输入调用一个计算工具。成功的响应包含易读的摘要、结构化输出、明确列出的假设和默认值,以及对应 AfAMax 计算器的来源链接。来源链接会携带已提交的输入,以便计算器打开时预先填入这些内容,供用户进一步调整或记录。
若要从命令行查看已注册的工具:
npx -y @modelcontextprotocol/inspector \
--cli \
node --env-file-if-exists=.env dist/transports/stdio.js \
--method tools/list
开发 HTTP 传输
cp .env.example .env
pnpm dev:http
HTTP 模式必须设置 AFAMAX_SERVICE_TOKEN。只有使用 Rundum Immo 签发并配置了对应 AfAMax 后端值的服务凭证,才能启用可信的客户端限流;任意令牌都无法启用可信转发。HTTP 模式会转发该令牌以及经过验证的最右侧代理客户端地址,并分别写入 X-Afamax-Service-Token 和 X-Afamax-Client-IP。切勿向 MCP 客户端公开此令牌。请部署在会替换传入转发标头(而非盲目追加)的代理之后。
配置:
| 变量 | 默认值 | 用途 |
|---|---|---|
AFAMAX_API_URL | https://afamax.de/api/v1/afa-calculation | 公共计算端点 |
AFAMAX_KPA_API_URL | https://afamax.de/api/v1/purchase-price-allocation | 公共购房价格分摊端点 |
AFAMAX_SERVICE_TOKEN | — | HTTP 模式下必需的可信服务凭证 |
AFAMAX_TIMEOUT_MS | 10000 | 上游超时时间 |
HOST | 0.0.0.0 | 监听地址 |
PORT | 3000 | 监听端口 |
PUBLIC_HOSTS | mcp.rundum.immo | 允许的 Host 标头名称,以逗号分隔 |
LOG_LEVEL | info | debug、info、warn 或 error |
HTTP 服务公开 /mcp 和 /health,将请求正文限制为 64 KiB,验证 Host 和 Origin 语法,并为匿名浏览器客户端返回宽松的 CORS 标头。
使用 Docker 部署
生产环境的 HTTP 托管仅供 Rundum Immo 或明确授权的运营方使用,因为这需要匹配的 AfAMax 服务凭证。公众用户可以运行 stdio 传输,无需凭证。
docker build -t real-estate-appraisal-mcp .
docker run --rm -p 3000:3000 \
-e AFAMAX_SERVICE_TOKEN='credential-issued-by-rundum-immo' \
-e PUBLIC_HOSTS='localhost,mcp.rundum.immo' \
real-estate-appraisal-mcp
该镜像以非 root 用户 node 运行。在 Coolify 中配置 mcp.rundum.immo,并将其代理到端口 3000。
数据与隐私
该适配器无状态,不会持久保存工具输入或客户端的原始 IP 地址。计算输入和客户端 IP 会发送给 AfAMax,后者会使用该地址防止滥用。AfAMax 会存储该地址的加盐哈希和有限的使用元数据,保留 30 天;其使用记录中不会存储原始地址。请避免在计算和价格输入中填写个人身份信息。book_appointment 必须将用户的姓名、电子邮件地址和可选电话号码发送给 AfAMax,后者会用这些信息发送确认码并保留预约;该适配器不会存储或记录这些信息。请参阅 AfAMax 隐私信息 和 SECURITY.md。
路线图
该仓库可以扩展现有的计算、定价和预约工具。未来可能增加的功能包括:
- 房产和市场价值估算
- 估价和估值报告工作流
- 更多德国房地产税务和估价工具
未来的工具将遵循相同的边界:该仓库包含公开的 MCP 集成,而专有估价逻辑仍由 AfAMax 保留。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。