Commands, package names, and image names on this page come from the open-source project that Mibyan Desktop is built on, and can differ from the Mibyan Desktop installer. For the supported Mibyan install and update path, see Install and update.
Skill metadata
Reference: full SKILL.md
The following is the complete skill definition that Mibyan loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Environment
This skill assumes headless openpyxl — you are producing an .xlsx file on disk. Follow theexcel-author skill’s conventions for cell coloring, formulas, named ranges, and sensitivity tables.
Recalculate before delivery: python /path/to/excel-author/scripts/recalc.py ./out/model.xlsx.
DCF Model Builder
Overview
This skill creates institutional-quality DCF models for equity valuation following investment banking standards. Each analysis produces a detailed Excel model (with sensitivity analysis included at the bottom of the DCF sheet).Tools
- Default to using all of the information provided by the user and MCP servers available for data sourcing.
Critical Constraints - Read These First
These constraints apply throughout all DCF model building. Review before starting: Formulas Over Hardcodes (NON-NEGOTIABLE):- Every projection, margin, discount factor, PV, and sensitivity cell MUST be a live Excel formula — never a value computed in Python and written as a number
- When using openpyxl:
ws["D20"] = "=D19*(1+$B$8)"is correct;ws["D20"] = calculated_revenueis WRONG - The only hardcoded numbers permitted are: (1) raw historical inputs, (2) assumption drivers (growth rates, WACC inputs, terminal g), (3) current market data (share price, debt balance)
- If you catch yourself computing something in Python and writing the result — STOP. The model must flex when the user changes an assumption.
- After data retrieval → show the user the raw inputs block (revenue, margins, shares, net debt) and confirm before projecting
- After revenue projections → show the projected top line and growth rates, confirm before building margin build
- After FCF build → show the full FCF schedule, confirm logic before computing WACC
- After WACC → show the calculation and inputs, confirm before discounting
- After terminal value + PV → show the equity bridge (EV → equity value → per share), confirm before sensitivity tables
- Catch errors at each stage — a wrong margin assumption discovered after sensitivity tables are built means rebuilding everything downstream
- Use an ODD number of rows and columns (standard: 5×5, sometimes 7×7) — this guarantees a true center cell
- Center cell = base case. Build the axis values so the middle row header and middle column header exactly equal the model’s actual assumptions (e.g., if base WACC = 9.0%, the middle row is 9.0%; if terminal g = 3.0%, the middle column is 3.0%). The center cell’s output must therefore equal the model’s actual implied share price — this is the sanity check that the table is built correctly.
- Highlight the center cell with the medium-blue fill (
#BDD7EE) + bold font so it’s immediately visible which cell is the base case. - Populate ALL cells (typically 3 tables × 25 cells = 75) with full DCF recalculation formulas
- Use openpyxl loops to write formulas programmatically
- NO placeholder text, NO linear approximations, NO manual steps required
- Each cell must recalculate full DCF for that assumption combination
- Add cell comments AS each hardcoded value is created
- Format: “Source: [System/Document], [Date], [Reference], [URL if applicable]”
- Every blue input must have a comment before moving to next section
- Do not defer to end or write “TODO: add source”
- Define ALL section row positions BEFORE writing any formulas
- Write ALL headers and labels first
- Write ALL section dividers and blank rows second
- THEN write formulas using the locked row positions
- Test formulas immediately after creation
- Run
python recalc.py model.xlsx 30before delivery - Fix ALL errors until status is “success”
- Zero formula errors required (#REF!, #DIV/0!, #VALUE!, etc.)
- Create separate blocks for Bear/Base/Bull cases
- Show assumptions horizontally across projection years within each block
- Use IF formulas:
=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell])) - Verify formulas reference correct scenario block cells
DCF Process Workflow
Step 1: Data Retrieval and Validation
Fetch data from MCP servers, user provided data, and the web. Data Sources Priority:- MCP Servers (if configured) - Structured financial data from providers like Daloopa
- User-Provided Data - Historical financials from their research
- Web Search/Fetch - Current prices, beta, debt and cash when needed
- Verify net debt vs net cash (critical for valuation)
- Confirm diluted shares outstanding (check for recent buybacks/issuances)
- Validate historical margins are consistent with business model
- Cross-check revenue growth rates with industry benchmarks
- Verify tax rate is reasonable (typically 21-28%)
Step 2: Historical Analysis (3-5 years)
Analyze and document:- Revenue growth trends: Calculate CAGR, identify drivers
- Margin progression: Track gross margin, EBIT margin, FCF margin
- Capital intensity: D&A and CapEx as % of revenue
- Working capital efficiency: NWC changes as % of revenue growth
- Return metrics: ROIC, ROE trends
Step 3: Build Revenue Projections
Methodology:- Start with latest actual revenue (LTM or most recent fiscal year)
- Apply growth rates for each projection year
- Show both dollar amounts AND calculated growth %
- Year 1-2: Higher growth reflecting near-term visibility
- Year 3-4: Gradual moderation toward industry average
- Year 5+: Approaching terminal growth rate
- Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)
- Growth %(Year N) = Revenue(Year N) / Revenue(Year N-1) - 1
Step 4: Operating Expense Modeling
Fixed/Variable Cost Analysis: Operating expenses should model realistic operating leverage:- Sales & Marketing: Typically 15-40% of revenue depending on business model
- Research & Development: Typically 10-30% for technology companies
- General & Administrative: Typically 8-15% of revenue, shows leverage as company scales
- ALL percentages based on REVENUE, not gross profit
- Model operating leverage: % should decline as revenue scales
- Maintain separate line items for S&M, R&D, G&A
- Calculate EBIT = Gross Profit - Total OpEx
Step 5: Free Cash Flow Calculation
Build FCF in proper sequence:- Calculate as % of revenue change (delta revenue)
- Typical range: -2% to +2% of revenue change
- Negative number = source of cash (working capital release)
- Positive number = use of cash (working capital build)
- Maintenance CapEx: Sustains current operations (~2-3% revenue)
- Growth CapEx: Supports expansion (additional 2-5% revenue)
- Total CapEx should align with company’s growth strategy
Step 6: Cost of Capital (WACC) Research
CAPM Methodology for Cost of Equity:- Net Cash Position: If Cash > Debt, Net Debt is NEGATIVE
- Debt Weight may be negative
- WACC calculation adjusts accordingly
- No Debt: WACC = Cost of Equity
- Large Cap, Stable: 7-9%
- Growth Companies: 9-12%
- High Growth/Risk: 12-15%
Step 7: Discount Rate Application (5-10 Year Forecast)
Mid-Year Convention:- Cash flows assumed to occur mid-year
- Discount Period: 0.5, 1.5, 2.5, 3.5, 4.5, etc.
- Discount Factor = 1 / (1 + WACC)^Period
- 5 years: Standard for most analyses
- 7-10 years: High growth companies with longer runway
- 3 years: Mature, stable businesses
Step 8: Terminal Value Calculation
Perpetuity Growth Method (Preferred):- Conservative: 2.0-2.5% (GDP growth rate)
- Moderate: 2.5-3.5%
- Aggressive: 3.5-5.0% (only for market leaders)
- Should represent 50-70% of Enterprise Value
- If >75%, model may be over-reliant on terminal assumptions
- If <40%, check if terminal assumptions are too conservative
Step 9: Enterprise to Equity Value Bridge
Valuation Summary Structure:- Net Debt = Total Debt - Cash & Equivalents
- If positive: Subtract from EV (reduces equity value)
- If negative (Net Cash): Add to EV (increases equity value)
- Use Diluted Shares: Includes options, RSUs, convertible securities
- Other adjustments (if applicable):
- Minority interests
- Pension liabilities
- Operating lease obligations
Step 10: Sensitivity Analysis
Build three sensitivity tables at the bottom of the DCF sheet showing how valuation changes with different assumptions:- WACC vs Terminal Growth - Shows enterprise value sensitivity to discount rate and perpetuity growth
- Revenue Growth vs EBIT Margin - Shows impact of top-line growth and operating leverage
- Beta vs Risk-Free Rate - Shows sensitivity to cost of equity components
Scenario Block Selection Pattern - Follow This Approach
Assumptions are organized in separate blocks for each scenario: CRITICAL STRUCTURE - Three rows per section header:- Case selector cell (e.g., B6) contains 1=Bear, 2=Base, or 3=Bull
- Create a consolidation column with INDEX or OFFSET formulas to pull from the correct scenario block
- Projection formulas reference the consolidation column (clean cell references)
- Each scenario block contains full set of DCF assumptions across projection years
=INDEX(B10:D10, 1, $B$6)
NOT this - scattered IF statements throughout:
=IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))
The consolidation column approach centralizes logic and makes the model easier to audit.
Correct Revenue Projection Pattern
Create a consolidation column with INDEX formulas, then reference it in projections: Step 1 - Consolidation column for FY1 growth:=INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)
Step 2 - Revenue projection references the consolidation column:
Revenue Year 1: =D29*(1+$E$10)
Where:
- D29 = Prior year revenue
- 10 = Consolidation column cell for FY1 growth (contains INDEX formula)
- 6 = Case selector (1=Bear, 2=Base, 3=Bull)
Correct FCF Formula Pattern
Use consolidation columns with INDEX formulas, then reference them in FCF calculations: Consolidation column approach:Correct Cell Comment Format
Every hardcoded value needs this format: “Source: [System/Document], [Date], [Reference], [URL if applicable]” Examples:Correct Assumption Table Structure
CRITICAL: Each scenario block requires THREE structural elements:- Section header row (merged cells): e.g., “BEAR CASE ASSUMPTIONS”
- Column header row showing years - THIS IS REQUIRED, DO NOT SKIP
- Data rows with assumption values
Correct Row Planning Process
1. Write ALL headers and labels FIRST:- Good: Pour foundation, then build walls (stable structure)
- Bad: Build walls, then pour foundation (walls collapse)
- Good: Add headers, then write formulas (formulas stable)
- Bad: Write formulas, then add headers (formulas break)
Correct Sensitivity Table Implementation
IMPORTANT: These are NOT Excel’s “Data Table” feature. These are simple grids where you write regular formulas using openpyxl. Yes, this means ~75 formulas total (3 tables × 25 cells each), but this is straightforward and required. Programmatic Population with Formulas: Each sensitivity table must be fully populated with formulas that recalculate the implied share price for each combination of assumptions. Do not use Excel’s Data Table feature (it requires manual intervention and cannot be automated via openpyxl). Implementation approach - CONCRETE EXAMPLE: Table Structure — 5×5 grid (ODD dimensions, base case centered): If the model’s base WACC = 9.0% and base terminal growth = 3.0%, build the axes symmetrically around those values:#BDD7EE) and bold font to this cell so the base case is visually anchored.
Rule for axis values: axis_values = [base - 2*step, base - step, base, base + step, base + 2*step] — symmetric around the base, odd count guarantees a center.
Formula Pattern - Cell B88 (WACC=8.0%, Terminal Growth=2.0%):
The formula in B88 should recalculate the implied price using:
- WACC from row header:
$A88(8.0%) - Terminal Growth from column header:
B$87(2.0%)
=([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) / [Shares]
CRITICAL - Write a formula for EVERY cell in the 5x5 grid (25 cells per table, 75 cells total). Use openpyxl to write these formulas programmatically in a loop. Do NOT skip this step or leave placeholder text.
Python implementation pattern:
WRONG: Simplified Sensitivity Table Approximations or Placeholder Text
Don’t use linear approximations:- ❌ “Sensitivity tables need Excel’s Data Table feature” (NO - that’s a specific Excel tool we can’t use)
- ✅ “Sensitivity tables are simple grids with formulas in each cell” (YES - this is what we build)
- Linear approximation formulas don’t actually recalculate the DCF - they just apply simple math adjustments
- The relationships are not linear, so the results will be inaccurate
- Placeholder text requires manual user intervention
- Model is not immediately usable when delivered
- Not professional or client-ready
- Empty cells = incomplete deliverable
WRONG: Missing Cell Comments
Don’t do this:- Create all hardcoded inputs without comments
- Think “I’ll add them later”
- Write “TODO: add source”
- Leave blue inputs without documentation
- Can’t verify where data came from
- Fails xlsx skill requirements
- Not audit-ready
- Wastes time fixing later
WRONG: Formula Row References Off
Symptom: The FCF section references wrong assumption rows:D&A: =E29*$E$34 // Should be $E$21, but referencing wrong row
CapEx: =E29*$E$41 // Should be $E$22, but row shifted
Why this happens:
- Formulas written first
- Then headers inserted
- All row references shifted
- Now formulas point to wrong cells → #REF! errors
WRONG: Single Row for Each Assumption Across Scenarios
Don’t structure assumptions like this:- Makes it difficult to see assumptions evolving across years within each scenario
- Harder to compare scenario assumptions across full projection period
- Less intuitive for reviewing scenario logic
- Create separate blocks for each scenario (Bear, Base, Bull)
- Within each block, show assumptions horizontally across projection years
- This makes each scenario’s assumptions easier to review as a cohesive set
WRONG: No Borders
Don’t deliver a model without borders:- No section delineation
- All cells blend together
- Hard to read and unprofessional
- Not client-ready
- Difficult to navigate
- Looks amateur
WRONG: Wrong Font Colors or No Font Color Distinction
Don’t do this:- All text is black
- Only use fill colors (no font color changes)
- Mix up which cells are blue vs black
- Can’t distinguish inputs from formulas
- Auditing becomes impossible
- Violates xlsx skill requirements
WRONG: Operating Expenses Based on Gross Profit
Don’t do this:S&M: =E33*0.15 // E33 = Gross Profit (WRONG)
Why it’s wrong:
- Operating expenses scale with revenue, not gross profit
- Produces unrealistic margin progression
- Not how businesses actually operate
S&M: =E29*0.15 // E29 = Revenue (CORRECT)
TOP 5 ERRORS SUMMARY
- Formula row references off → Define ALL row positions BEFORE writing formulas
- Missing cell comments → Add comments AS cells are created, not at end
- Simplified sensitivity tables → Populate all cells with full DCF recalc formulas, not approximations
- Scenario block references wrong → Ensure IF formulas pull from correct Bear/Base/Bull blocks
- No borders → Add professional section borders for client-ready appearance
WACC Calculation Errors
- Mixing book and market values in capital structure
- Using equity beta instead of asset/unlevered beta incorrectly
- Wrong tax rate application to cost of debt
- Incorrect risk-free rate (must use current 10Y Treasury)
- Failure to adjust for net debt vs net cash position
Growth Assumption Flaws
- Terminal growth > WACC (creates infinite value)
- Projection growth rates inconsistent with historical performance
- Ignoring industry growth constraints
- Revenue growth not aligned with unit economics
- Margin expansion without operational justification
Terminal Value Mistakes
- Using wrong growth method (perpetuity vs exit multiple)
- Terminal value >80% of enterprise value (suggests over-reliance)
- Inconsistent terminal margins with steady state assumptions
- Wrong discount period for terminal value
Cash Flow Projection Errors
- Operating expenses based on gross profit instead of revenue
- D&A/CapEx percentages misaligned with business model
- Working capital changes not properly calculated
- Tax rate inconsistency between years
- NOPAT calculation errors
Excel File Creation
This skill uses thexlsx skill for all spreadsheet operations. The xlsx skill provides:
- Standardized formula construction rules
- Number formatting conventions
- Automated formula recalculation via
recalc.pyscript - Comprehensive error checking and validation
Quality Rubric
Every DCF model must maximize for:- Realistic revenue and margin assumptions based on historical performance
- Appropriate cost of capital calculation with proper CAPM methodology
- Comprehensive sensitivity analysis showing valuation ranges
- Clear terminal value calculation with supporting rationale
- Professional model structure enabling scenario analysis
- Transparent documentation of all key assumptions
Input Requirements
Minimum Required Inputs
- Company identifier: Ticker symbol or company name
- Growth assumptions: Revenue growth rates for projection period (or “use consensus”)
- Optional parameters:
- Projection period (default: 5 years)
- Scenario cases (Bear/Base/Bull growth and margin assumptions)
- Terminal growth rate (default: 2.5-3.0%)
- Specific WACC inputs if not using CAPM
Excel Model Structure
Sheet Architecture
Create two sheets:- DCF - Main valuation model with sensitivity analysis at bottom
- WACC - Cost of capital calculation
Formula Recalculation (MANDATORY)
After creating or modifying the Excel model, recalculate all formulas using therecalc.py script from the excel-author skill:
- Recalculate all formulas in all sheets using LibreOffice
- Scan ALL cells for Excel errors (#REF!, #DIV/0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N/A)
- Return detailed JSON with error locations and counts
Formatting Standards
IMPORTANT: Follow the xlsx skill for formula construction rules and number formatting conventions. The DCF skill adds specific visual presentation standards. Color Scheme - Two Layers: Layer 1: Font Colors (MANDATORY from xlsx skill)- Blue text (RGB: 0,0,255): ALL hardcoded inputs (stock price, shares, historical data, assumptions)
- Black text (RGB: 0,0,0): ALL formulas and calculations
- Green text (RGB: 0,128,0): Links to other sheets (WACC sheet references)
- Keep it minimal — use only blues and greys for fills. Do NOT introduce greens, yellows, oranges, or multiple accent colors. A model with too many colors looks amateurish.
- Default fill palette:
- Section headers: Dark blue (RGB: 31,78,121 /
#1F4E79) background with white bold text - Sub-headers/column headers: Light blue (RGB: 217,225,242 /
#D9E1F2) background with black bold text - Input cells: Light grey (RGB: 242,242,242 /
#F2F2F2) background with blue font — or just white with blue font if you want maximum minimalism - Calculated cells: White background with black font
- Output/summary rows (per-share value, EV, etc.): Medium blue (RGB: 189,215,238 /
#BDD7EE) background with black bold font
- Section headers: Dark blue (RGB: 31,78,121 /
- That’s it — 3 blues + 1 grey + white. Resist the urge to add more.
- User-provided templates or explicit color preferences ALWAYS override these defaults.
- Input cell: Blue font + light grey fill = “Hardcoded input”
- Formula cell: Black font + white background = “Calculated value”
- Sheet link: Green font + white background = “Reference from another sheet”
- Key output: Black bold font + medium blue fill = “This is the answer”
Border Standards (REQUIRED for Professional Appearance)
Thick borders (1.5pt) around major sections:- KEY INPUTS section
- PROJECTION ASSUMPTIONS section
- 5-YEAR CASH FLOW PROJECTION section
- TERMINAL VALUE section
- VALUATION SUMMARY section
- Each SENSITIVITY ANALYSIS table
- Company Details vs Historical Performance
- Growth Assumptions vs EBIT Margin vs FCF Parameters
- Scenario assumption tables (Bear | Base | Bull | Selected)
- Historical vs projected financials matrix
- Years: Format as text strings (e.g., “2024” not “2,024”)
- Percentages:
0.0%(one decimal place) - Currency:
$#,##0for millions;$#,##0.00for per-share - ALWAYS specify units in headers (“Revenue ($mm)”) - Zeros: Use number formatting to make all zeros ”-” (e.g.,
$#,##0;($#,##0);-) - Large numbers:
#,##0with thousands separator - Negative numbers:
(#,##0)in parentheses (NOT minus sign)
DCF Sheet Detailed Structure
Section 1: Header<correct_patterns> section “Correct Assumption Table Structure” for the exact layout.
Section 4: Historical & Projected Financials
Reference a consolidation column (e.g., “Selected Case”) that pulls from scenario blocks, not scattered IF formulas in every projection row.
- Revenue growth:
=E29*(1+$E$10)where 10 is consolidation column for Year 1 growth - NOT:
=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))
- 21 = D&A % assumption (consolidation column, row 21)
- 22 = CapEx % assumption (consolidation column, row 22)
- 23 = NWC % assumption (consolidation column, row 23)
- E29 = Revenue for year (row 29)
- E45 = NOPAT for year (row 45)
WACC Sheet Structure
Sensitivity Analysis (Bottom of DCF Sheet)
TERMINOLOGY REMINDER: “Sensitivity tables” = simple 2D grids with row headers, column headers, and formulas in each data cell. NOT Excel’s “Data Table” feature (Data → What-If Analysis → Data Table). You will use openpyxl to write regular Excel formulas into each cell. Location: Rows 87+ on DCF sheet (NOT a separate sheet) Three sensitivity tables, vertically stacked:- WACC vs Terminal Growth (rows 87-100) - 5x5 grid = 25 cells with formulas
- Revenue Growth vs EBIT Margin (rows 102-115) - 5x5 grid = 25 cells with formulas
- Beta vs Risk-Free Rate (rows 117-130) - 5x5 grid = 25 cells with formulas
- Create table structure with row/column headers (the assumption values to test)
- Populate EVERY data cell with a formula that:
- Uses the row header value (e.g., WACC = 9.0%)
- Uses the column header value (e.g., Terminal Growth = 3.0%)
- Recalculates the full DCF with those specific assumptions
- Returns the implied share price for that scenario
- All cells must contain working formulas when delivered
- Format cells with conditional formatting: Green scale for higher values, red scale for lower values
- Bold the base case cell
- Leave 1-2 blank rows between tables
Case Selector Implementation
Three-Case Framework:Bear Case
- Conservative revenue growth (low end of historical range)
- Margin compression or no expansion
- Higher WACC (risk premium increase)
- Lower terminal growth rate
- Higher CapEx assumptions
Base Case
- Consensus or management guidance revenue growth
- Moderate margin expansion based on operating leverage
- Current market-implied WACC
- GDP-aligned terminal growth (2.5-3.0%)
- Standard CapEx assumptions
Bull Case
- Optimistic revenue growth (high end of projections)
- Significant margin expansion
- Lower WACC (reduced risk premium)
- Higher terminal growth (3.5-5.0%)
- Reduced CapEx intensity
=INDEX(B10:D10, 1, $B$6) where B10:D10 = Bear/Base/Bull values, 1 = row offset, $B$6 = case selector cell (1, 2, or 3)
Then reference the consolidation column in all projections:
Revenue Year 1: =D29*(1+$E$10) where 10 is the consolidation column value for Year 1 growth.
This approach centralizes scenario logic, making the model easier to audit and maintain.
Deliverables Structure
File naming:[Ticker]_DCF_Model_[Date].xlsx
Two sheets:
- DCF - Complete model with Bear/Base/Bull cases + three sensitivity tables at bottom (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate)
- WACC - Cost of capital calculation
Best Practices
Model Construction
- Build incrementally: Complete each section before moving to next
- Test as building: Enter sample numbers to verify formulas
- Use consistent structure: Similar calculations follow similar patterns
- Comment complex formulas: Add notes for unusual calculations
- Build in checks: Sum checks and balance checks where applicable
Documentation
- Document all assumptions: Explain reasoning behind key inputs
- Cite data sources: Note where each data point came from
- Explain methodology: Describe any non-standard approaches
- Flag uncertainties: Highlight areas with limited visibility
Quality Control
- Cross-check calculations: Verify math in multiple ways
- Stress test assumptions: Run sensitivity to ensure model is robust
- Peer review: Have someone else check formulas
- Version control: Save versions as work progresses
Common Variations
High-Growth Technology Companies
- Longer projection period (7-10 years)
- Higher initial growth rates (20-30%)
- Significant margin expansion over time
- Higher WACC (12-15%)
- Model unit economics (users, ARPU, etc.)
Mature/Stable Companies
- Shorter projection period (3-5 years)
- Modest growth rates (GDP +1-3%)
- Stable margins
- Lower WACC (7-9%)
- Focus on cash generation and capital allocation
Cyclical Companies
- Model through economic cycle
- Normalize margins at mid-cycle
- Consider trough and peak scenarios
- Adjust beta for cyclicality
Multi-Segment Companies
- Separate DCFs for each business unit
- Different growth rates and margins by segment
- Sum-of-parts valuation
- Consider synergies
Troubleshooting
If you encounter errors or unreasonable results, read TROUBLESHOOTING.md for detailed debugging guidance.Workflow Integration
At Start of DCF Build
-
Gather market data:
- Check for available MCP servers for current market data
- Use web search/fetch for stock prices, beta, and other market metrics
- Request from user if specific data is needed
-
Gather historical financials:
- Check for available MCP servers (Daloopa, etc.)
- Request from user if not available via MCP
- Manual extraction from 10-Ks if necessary
- Begin model construction using the DCF methodology detailed in this skill
During Model Construction
- Build Excel model using openpyxl with formulas (not hardcoded values)
- Follow xlsx skill conventions for formula construction and formatting
- Apply fill colors only if requested by user or if specific brand guidelines are provided
Before Delivering Model (MANDATORY)
-
Verify structure:
- Scenario blocks for Bear/Base/Bull with assumptions across projection years
- Case selector functional with formulas referencing correct scenario blocks
- Sensitivity tables at bottom of DCF sheet (not separate sheet)
- Font colors: Blue inputs, black formulas, green sheet links
- Cell comments on ALL hardcoded inputs
- Professional borders around major sections
-
Recalculate formulas: Run
python recalc.py model.xlsx 30 -
Check output:
- If
statusis"success"→ Continue to step 4 - If
statusis"errors_found"→ Checkerror_summaryand read TROUBLESHOOTING.md for debugging guidance
- If
- Fix errors and re-run recalc.py until status is “success”
-
Spot-check formulas:
- Test one FCF formula - does it reference the correct assumption rows?
- Change case selector - does the consolidation column update properly?
- Verify revenue formulas reference consolidation column (not nested IF formulas)
- Deliver model
Available Data Sources
- MCP servers: If configured (Daloopa for historical financials)
- Web search/fetch: For current stock prices, beta, and market data
- User-provided data: Historical financials, consensus estimates
- Manual extraction: SEC EDGAR filings as fallback
Final Output Checklist
Before delivering DCF model: Required:- Run
python recalc.py model.xlsx 30until status is “success” (zero formula errors) - Two sheets: DCF (with sensitivity at bottom), WACC
- Font colors: Blue=inputs, Black=formulas, Green=sheet links
- Cell comments on ALL hardcoded inputs
- Sensitivity tables fully populated with formulas
- Professional borders around major sections
- OpEx based on revenue (not gross profit)
- Terminal value 50-70% of EV
- Terminal growth < WACC
- Tax rate 21-28%
- File naming:
[Ticker]_DCF_Model_[Date].xlsx
Data sources — MCP first, web fallback
Many passages below say “use the S&P Kensho MCP / Daloopa MCP / FactSet MCP”. Those are commercial financial-data MCPs from the original Cowork plugin context. In Mibyan:- If you have any structured financial-data MCP configured (Mibyan supports MCP — see
native-mcpskill), prefer it for point-in-time comps, precedent transactions, and filings. - Otherwise, fall back to:
web_search/web_extractagainst SEC EDGAR (https://www.sec.gov/cgi-bin/browse-edgar) for US filings- Company IR pages for press releases, earnings decks
browser_navigatefor interactive data portals- User-provided data (explicitly ask when the context doesn’t have it)
- Never fabricate. If a multiple, precedent, or filing number can’t be sourced, flag the cell as
[UNSOURCED]and surface it to the user.
Attribution
This skill is adapted from Anthropic’s Claude for Financial Services plugin suite (Apache-2.0). The Office-JS / Cowork live-Excel paths have been removed; this version targets headless openpyxl via theexcel-author skill’s conventions. Original: https://github.com/anthropics/financial-services
