- framework
- Warren Buffett durable competitive advantage (economic moat)
- scoring
- criteria count
- 8
- max score per criterion
- 12.5
- max total score
- 100
- criteria
- key
- earnings_consistency
- name
- Earnings Consistency
- benchmark
- Steady growth, no erratic swings
- key
- gross_margin
- name
- Gross Margin
- benchmark
- Stable or improving gross margin over 10 years
- key
- net_margin
- name
- Net Margin
- benchmark
- Healthy and stable net margin
- key
- retained_earnings
- name
- Retained Earnings
- benchmark
- Growing retained earnings over time
- key
- return_on_equity
- name
- Return on Equity
- benchmark
- Consistent ROE without excessive leverage
- key
- debt_sustainability
- name
- Debt Sustainability
- benchmark
- Manageable debt relative to earnings
- key
- capex_efficiency
- name
- CapEx Efficiency
- benchmark
- Capital expenditure aligned with maintenance vs growth
- key
- product_durability
- name
- Product Durability
- benchmark
- Business model resilience and pricing power
- verdicts
- minPct
- 70
- label
- Strong Durable Competitive Advantage
- minPct
- 50
- label
- Moderate Competitive Advantage
- minPct
- 35
- label
- Narrow Moat — Proceed with Caution
- minPct
- 0
- label
- No Clear Moat Detected
- valuation signals
- pe ratio
- Price/earnings; sell trigger at ≥40 in the Buffett framework
- forward pe
- Price vs next-year estimated earnings
- peg ratio
- P/E divided by earnings growth; below 1 suggests growth-adjusted value
- augmented payout ratio
- Dividends + buybacks as % of net income
- endpoints
- method
- GET
- path
- /api/stock-evaluation
- auth
- session
- tier
- Pro quota for fresh evaluation (`stock_evaluation`); cached reads are session-only
- query
- symbol
- required ticker, e.g. AAPL
- fresh
- optional `1` to bypass cache and re-fetch fundamentals
- response
- MoatEvaluation JSON (criteria, verdict, valuation block)
- method
- POST
- path
- /api/stock-evaluation/ai
- auth
- session
- tier
- Pro (`ai_consult` quota)
- body
- evaluation
- MoatEvaluation object from GET /api/stock-evaluation
- language
- optional BCP-47 language code (default en)
- response
- text/event-stream — Warren AI narrative markdown
- method
- GET
- path
- /api/moat-screener
- auth
- session
- query
- action
- `meta` for cache stats
- scoreMin
- number
- scoreMax
- number
- verdict
- string
- sector
- string
- industry
- string
- peMin
- number
- peMax
- number
- marketCapMin
- number
- marketCapMax
- number
- sortBy
- score | symbol | pe | marketCap (default score)
- sortDir
- asc | desc
- page
- number
- limit
- number (default 20)
- response
- Paginated moat cache rows
- method
- GET
- path
- /api/moat-reports
- auth
- session
- query
- tags
- optional comma-separated filter
- response
- User saved MOAT reports
- method
- POST
- path
- /api/moat-reports
- auth
- session
- body
- symbol
- required
- companyName
- optional
- evaluationJson
- required stringified MoatEvaluation
- totalScore
- number
- maxScore
- number
- verdict
- string
- tags
- string[]
- typical flow
- MCP getMoatEvaluation { symbol: "KO" } — or GET /api/stock-evaluation?symbol=KO
- MCP generateMoatNarrative { symbol: "KO" } — or POST /api/stock-evaluation/ai
- MCP saveMoatReport — or POST /api/moat-reports
- MCP screenMoat — or GET /api/moat-screener
- ui path
- /tools/moat-evaluation
- data source
- FMP or Alpha Vantage fundamentals (server-selected)