Skip to main content
Glama
sigaihealth

RealVest Real Estate MCP Server

1031-exchange.js21.7 kB
/** * 1031 Exchange Calculator * Analyzes like-kind exchange tax benefits and qualification requirements */ export class Exchange1031Calculator { getSchema() { return { type: 'object', properties: { relinquished_property: { type: 'object', properties: { sale_price: { type: 'number', minimum: 0, description: 'Sale price of relinquished property' }, original_cost_basis: { type: 'number', minimum: 0, description: 'Original cost basis' }, improvements_made: { type: 'number', minimum: 0, description: 'Capital improvements made' }, depreciation_taken: { type: 'number', minimum: 0, description: 'Total depreciation taken' }, selling_expenses: { type: 'number', minimum: 0, description: 'Real estate commissions and selling costs' }, property_type: { type: 'string', enum: ['residential_rental', 'commercial', 'industrial', 'land', 'multi_family'], description: 'Type of relinquished property' }, ownership_years: { type: 'number', minimum: 1, description: 'Years owned' } }, required: ['sale_price', 'original_cost_basis'] }, replacement_property: { type: 'object', properties: { purchase_price: { type: 'number', minimum: 0, description: 'Purchase price of replacement property' }, closing_costs: { type: 'number', minimum: 0, description: 'Closing costs and acquisition expenses' }, improvement_budget: { type: 'number', minimum: 0, description: 'Planned improvements to replacement property' }, property_type: { type: 'string', enum: ['residential_rental', 'commercial', 'industrial', 'land', 'multi_family'], description: 'Type of replacement property' }, financing: { type: 'object', properties: { loan_amount: { type: 'number', minimum: 0, description: 'New loan amount' }, interest_rate: { type: 'number', minimum: 0, maximum: 30, description: 'Interest rate (%)' }, loan_term_years: { type: 'number', minimum: 1, maximum: 30, description: 'Loan term in years' } } } }, required: ['purchase_price'] }, taxpayer_info: { type: 'object', properties: { filing_status: { type: 'string', enum: ['single', 'married_filing_jointly', 'married_filing_separately', 'head_of_household'], description: 'Tax filing status' }, ordinary_income: { type: 'number', minimum: 0, description: 'Ordinary income for the year' }, state: { type: 'string', description: 'State for tax calculations' }, depreciation_recapture_rate: { type: 'number', minimum: 0, maximum: 50, description: 'Depreciation recapture tax rate (%)' }, capital_gains_rate: { type: 'number', minimum: 0, maximum: 50, description: 'Capital gains tax rate (%)' } } }, exchange_details: { type: 'object', properties: { qualified_intermediary_fee: { type: 'number', minimum: 0, description: 'QI fees and exchange costs' }, exchange_type: { type: 'string', enum: ['simultaneous', 'delayed', 'reverse', 'build_to_suit'], description: 'Type of 1031 exchange' }, identification_period_days: { type: 'number', minimum: 1, maximum: 45, description: 'Days to identify replacement property' }, exchange_period_days: { type: 'number', minimum: 1, maximum: 180, description: 'Days to complete exchange' } } }, analysis_options: { type: 'object', properties: { alternative_scenario: { type: 'string', enum: ['taxable_sale', 'installment_sale', 'charitable_remainder_trust'], description: 'Alternative scenario to compare' }, holding_period_years: { type: 'number', minimum: 1, maximum: 30, description: 'Planned holding period for replacement property' }, net_investment_income_tax: { type: 'boolean', description: 'Subject to 3.8% NIIT' } } } }, required: ['relinquished_property', 'replacement_property'] }; } calculate(params) { const { relinquished_property, replacement_property, taxpayer_info = {}, exchange_details = {}, analysis_options = {} } = params; // Set defaults const qi_fee = exchange_details.qualified_intermediary_fee || 3000; const depreciation_recapture_rate = taxpayer_info.depreciation_recapture_rate || 25; const capital_gains_rate = taxpayer_info.capital_gains_rate || 20; const niit_rate = analysis_options.net_investment_income_tax ? 3.8 : 0; const holding_period = analysis_options.holding_period_years || 10; // Calculate relinquished property metrics const adjusted_basis = relinquished_property.original_cost_basis + (relinquished_property.improvements_made || 0) - (relinquished_property.depreciation_taken || 0); const net_sale_proceeds = relinquished_property.sale_price - (relinquished_property.selling_expenses || 0); const total_gain = net_sale_proceeds - adjusted_basis; const depreciation_recapture = Math.min( relinquished_property.depreciation_taken || 0, Math.max(0, total_gain) ); const capital_gain = Math.max(0, total_gain - depreciation_recapture); // Calculate tax implications without exchange const taxable_scenario = this.calculateTaxableScenario( depreciation_recapture, capital_gain, depreciation_recapture_rate, capital_gains_rate, niit_rate ); // Calculate 1031 exchange requirements const exchange_requirements = this.calculate1031Requirements( net_sale_proceeds, replacement_property, qi_fee ); // Calculate cash flow impact const cash_flow_analysis = this.calculateCashFlowImpact( relinquished_property, replacement_property, exchange_requirements, taxable_scenario ); // Calculate long-term benefits const long_term_benefits = this.calculateLongTermBenefits( exchange_requirements.deferred_tax, replacement_property, holding_period, capital_gains_rate ); // Qualification analysis const qualification_analysis = this.analyzeQualification( relinquished_property, replacement_property, exchange_details ); // Risk analysis const risk_analysis = this.performRiskAnalysis( exchange_requirements, exchange_details, replacement_property ); // Alternative scenarios const alternatives = this.calculateAlternatives( relinquished_property, replacement_property, taxable_scenario, analysis_options ); return { relinquished_property_analysis: { sale_price: relinquished_property.sale_price, adjusted_basis: adjusted_basis, net_proceeds: net_sale_proceeds, total_gain: total_gain, depreciation_recapture: depreciation_recapture, capital_gain: capital_gain }, tax_analysis: { without_exchange: taxable_scenario, with_1031_exchange: { deferred_taxes: exchange_requirements.deferred_tax, immediate_tax_savings: taxable_scenario.total_tax, qi_fees: qi_fee, net_tax_benefit: taxable_scenario.total_tax - qi_fee } }, exchange_requirements: exchange_requirements, cash_flow_analysis: cash_flow_analysis, qualification_analysis: qualification_analysis, long_term_analysis: long_term_benefits, risk_analysis: risk_analysis, alternative_scenarios: alternatives, recommendations: this.generateRecommendations( exchange_requirements, qualification_analysis, risk_analysis, taxable_scenario, replacement_property ) }; } calculateTaxableScenario(depreciation_recapture, capital_gain, recapture_rate, cg_rate, niit_rate) { const federal_depreciation_tax = depreciation_recapture * (recapture_rate / 100); const federal_capital_gains_tax = capital_gain * (cg_rate / 100); const niit_tax = (depreciation_recapture + capital_gain) * (niit_rate / 100); const total_federal_tax = federal_depreciation_tax + federal_capital_gains_tax + niit_tax; const estimated_state_tax = (depreciation_recapture + capital_gain) * 0.05; // 5% average const total_tax = total_federal_tax + estimated_state_tax; return { depreciation_recapture_tax: federal_depreciation_tax, capital_gains_tax: federal_capital_gains_tax, niit_tax: niit_tax, estimated_state_tax: estimated_state_tax, total_federal_tax: total_federal_tax, total_tax: total_tax }; } calculate1031Requirements(net_proceeds, replacement_property, qi_fee) { const total_replacement_cost = replacement_property.purchase_price + (replacement_property.closing_costs || 0) + (replacement_property.improvement_budget || 0); // Equal or greater value test const value_test_met = total_replacement_cost >= net_proceeds; const value_shortfall = Math.max(0, net_proceeds - total_replacement_cost); // Equal or greater debt test const old_loan_assumed = 0; // Assume paid off for simplicity const new_loan = replacement_property.financing?.loan_amount || 0; const debt_test_met = new_loan >= old_loan_assumed; // Boot calculation (taxable portion) const cash_boot = Math.max(0, net_proceeds - total_replacement_cost); const mortgage_boot = Math.max(0, old_loan_assumed - new_loan); const total_boot = cash_boot + mortgage_boot; // Exchange qualification const fully_qualified = value_test_met && debt_test_met && total_boot === 0; // Deferred tax calculation const exchange_percentage = fully_qualified ? 100 : Math.max(0, (total_replacement_cost - total_boot) / net_proceeds * 100); return { minimum_replacement_value: net_proceeds, actual_replacement_value: total_replacement_cost, value_test_met: value_test_met, value_shortfall: value_shortfall, debt_test_met: debt_test_met, cash_boot: cash_boot, mortgage_boot: mortgage_boot, total_boot: total_boot, fully_qualified: fully_qualified, exchange_percentage: exchange_percentage, deferred_tax: 0, // Will be calculated based on gain qi_fee: qi_fee }; } calculateCashFlowImpact(relinquished_prop, replacement_prop, exchange_req, taxable_scenario) { const cash_from_sale = relinquished_prop.sale_price - (relinquished_prop.selling_expenses || 0); const cash_needed = replacement_prop.purchase_price + (replacement_prop.closing_costs || 0) + (replacement_prop.improvement_budget || 0) + exchange_req.qi_fee; const new_loan = replacement_prop.financing?.loan_amount || 0; const cash_required = cash_needed - new_loan; // With 1031 exchange const exchange_cash_position = cash_from_sale - cash_required; // Without 1031 exchange (after taxes) const taxable_cash_position = cash_from_sale - taxable_scenario.total_tax - cash_required; const cash_advantage = exchange_cash_position - taxable_cash_position; return { cash_from_sale: cash_from_sale, cash_needed_for_replacement: cash_required, with_1031_exchange: { available_cash: exchange_cash_position, cash_remaining: Math.max(0, exchange_cash_position) }, without_1031_exchange: { available_cash: taxable_cash_position, cash_remaining: Math.max(0, taxable_cash_position) }, cash_advantage_of_1031: cash_advantage, additional_borrowing_capacity: taxable_scenario.total_tax }; } calculateLongTermBenefits(deferred_tax, replacement_prop, holding_period, cg_rate) { const property_value = replacement_prop.purchase_price; const annual_appreciation = 0.035; // 3.5% average const future_value = property_value * Math.pow(1 + annual_appreciation, holding_period); // Assume no additional depreciation recapture on replacement property const future_gain = future_value - property_value; const future_tax = future_gain * (cg_rate / 100); // Time value of deferred tax assuming 7% discount rate const discount_rate = 0.07; const present_value_of_future_tax = future_tax / Math.pow(1 + discount_rate, holding_period); const tax_deferral_benefit = deferred_tax - present_value_of_future_tax; return { holding_period_years: holding_period, projected_future_value: future_value, projected_future_gain: future_gain, projected_future_tax: future_tax, present_value_of_future_tax: present_value_of_future_tax, tax_deferral_benefit: tax_deferral_benefit, effective_tax_rate_reduction: holding_period > 10 ? 15 : 10 // Simplified }; } analyzeQualification(relinquished_prop, replacement_prop, exchange_details) { const requirements = []; const potential_issues = []; // Like-kind requirement const like_kind_properties = ['residential_rental', 'commercial', 'industrial', 'multi_family']; const like_kind_qualified = like_kind_properties.includes(relinquished_prop.property_type) && like_kind_properties.includes(replacement_prop.property_type); requirements.push({ requirement: 'Like-Kind Property', met: like_kind_qualified, description: 'Both properties must be held for investment or business use' }); // Timing requirements const identification_days = exchange_details.identification_period_days || 45; const exchange_days = exchange_details.exchange_period_days || 180; requirements.push({ requirement: '45-Day Identification Rule', met: identification_days <= 45, description: 'Must identify replacement property within 45 days' }); requirements.push({ requirement: '180-Day Exchange Rule', met: exchange_days <= 180, description: 'Must complete exchange within 180 days' }); // Investment use requirement const investment_use = relinquished_prop.ownership_years >= 1; requirements.push({ requirement: 'Investment/Business Use', met: investment_use, description: 'Property must be held for investment or business use' }); // Potential disqualifying issues if (relinquished_prop.property_type === 'personal_residence') { potential_issues.push('Personal residence does not qualify for 1031 exchange'); } if (replacement_prop.property_type === 'personal_residence') { potential_issues.push('Cannot exchange into personal residence'); } const overall_qualification = requirements.every(req => req.met) && potential_issues.length === 0; return { overall_qualified: overall_qualification, requirements: requirements, potential_issues: potential_issues, qualification_percentage: (requirements.filter(req => req.met).length / requirements.length) * 100 }; } performRiskAnalysis(exchange_req, exchange_details, replacement_prop) { const risks = []; const mitigation_strategies = []; // Timing risk const exchange_type = exchange_details.exchange_type || 'delayed'; if (exchange_type === 'delayed') { risks.push({ risk: 'Timing Risk', level: 'Medium', description: 'Must identify and close on replacement property within strict deadlines' }); mitigation_strategies.push('Have backup replacement properties identified'); } // Market risk if (replacement_prop.purchase_price > 1000000) { risks.push({ risk: 'Market Risk', level: 'Medium', description: 'High-value properties may have limited liquidity' }); } // Financing risk if (replacement_prop.financing?.loan_amount > 0) { risks.push({ risk: 'Financing Risk', level: 'Medium', description: 'Must secure financing within exchange period' }); mitigation_strategies.push('Pre-qualify for financing before starting exchange'); } // Boot risk if (exchange_req.total_boot > 0) { risks.push({ risk: 'Taxable Boot', level: 'High', description: `$${exchange_req.total_boot.toLocaleString()} will be taxable` }); mitigation_strategies.push('Increase replacement property value or add debt'); } // Qualified Intermediary risk risks.push({ risk: 'QI Risk', level: 'Low', description: 'Risk of QI mishandling exchange funds' }); mitigation_strategies.push('Choose well-established, bonded qualified intermediary'); const overall_risk_level = risks.some(r => r.level === 'High') ? 'High' : risks.some(r => r.level === 'Medium') ? 'Medium' : 'Low'; return { overall_risk_level: overall_risk_level, identified_risks: risks, mitigation_strategies: mitigation_strategies, success_probability: exchange_req.fully_qualified ? 85 : 70 }; } calculateAlternatives(relinquished_prop, replacement_prop, taxable_scenario, options) { const alternatives = []; // Taxable sale alternative alternatives.push({ strategy: 'Taxable Sale', immediate_tax: taxable_scenario.total_tax, net_proceeds: relinquished_prop.sale_price - (relinquished_prop.selling_expenses || 0) - taxable_scenario.total_tax, pros: ['Immediate liquidity', 'No timing constraints', 'Flexibility in next investment'], cons: ['Immediate tax liability', 'Reduced reinvestment capital'] }); // Installment sale alternative if (options.alternative_scenario === 'installment_sale') { const installment_periods = 5; const annual_tax = taxable_scenario.total_tax / installment_periods; alternatives.push({ strategy: 'Installment Sale', immediate_tax: 0, annual_tax: annual_tax, total_tax: taxable_scenario.total_tax, pros: ['Spread tax liability over time', 'Steady income stream'], cons: ['Interest rate risk', 'Buyer default risk', 'Still fully taxable'] }); } // Opportunity Zone investment alternatives.push({ strategy: 'Opportunity Zone Investment', tax_deferral: taxable_scenario.capital_gains_tax, potential_tax_elimination: taxable_scenario.capital_gains_tax * 0.85, // 85% if held 10+ years pros: ['Tax deferral until 2026', 'Potential tax elimination', 'Economic development'], cons: ['Limited investment options', 'Regulatory complexity', 'New program risks'] }); return alternatives; } generateRecommendations(exchange_req, qualification, risk_analysis, taxable_scenario, replacement_prop) { const recommendations = []; // Primary recommendation if (qualification.overall_qualified && exchange_req.fully_qualified) { recommendations.push({ category: 'Primary Strategy', priority: 'high', message: `Proceed with 1031 exchange - saves $${taxable_scenario.total_tax.toLocaleString()} in immediate taxes` }); } else if (qualification.qualification_percentage > 80) { recommendations.push({ category: 'Primary Strategy', priority: 'medium', message: 'Address qualification issues before proceeding with exchange' }); } else { recommendations.push({ category: 'Primary Strategy', priority: 'high', message: 'Consider taxable sale - exchange qualification uncertain' }); } // Timing recommendations if (risk_analysis.identified_risks.some(r => r.risk === 'Timing Risk')) { recommendations.push({ category: 'Timing', priority: 'high', message: 'Identify multiple backup properties and pre-arrange financing' }); } // Value recommendations if (!exchange_req.value_test_met) { recommendations.push({ category: 'Exchange Structure', priority: 'high', message: `Increase replacement property value by $${exchange_req.value_shortfall.toLocaleString()} to avoid boot` }); } // Professional guidance recommendations.push({ category: 'Professional Services', priority: 'high', message: 'Engage qualified intermediary and tax advisor before listing property' }); // Long-term strategy if (replacement_prop.purchase_price > 2000000) { recommendations.push({ category: 'Long-term Strategy', priority: 'medium', message: 'Consider diversifying into multiple smaller properties' }); } return recommendations; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sigaihealth/realvestmcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server