MCP 서버

MeritValue

com.meritvalue/meritvalue
데이터 및 분석 금융 및 투자 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Analyzes SEC filing data to calculate intrinsic stock value, business-quality signals, fundamentals, expected returns, and valuation screens.

get_business_quality
Moat and management signals
Is this a good business? Return on invested capital (or equity) against its cost of capital, and what management has done with the share count. Returns the year-by-year series as well as the averages, so the reading can be disputed without losing the evidence. These are signals, not verdicts — present them that way.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['ticker'], 'properties': {'ticker': {'type': 'string', 'description': 'Ticker symbol, e.g. AAPL. Case-insensitive.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'ticker', 'moat', 'management'], 'properties': {'moat': {'type': 'object', 'properties': {'wacc': {'type': ['number', 'null'], 'description': 'Cost of capital the return is judged against.'}, 'roe_avg': {'type': ['number', 'null'], 'description': 'Return on equity.'}, 'roic_avg': {'type': ['number', 'null'], 'description': 'Return on invested capital.'}, 'return_avg': {'type': ['number', 'null'], 'description': 'Average of the series.'}, 'return_metric': {'type': ['string', 'null'], 'description': 'ROIC where the filings support it, else ROE.'}, 'return_series': {'type': 'array', 'description': 'Year-by-year, so the average can be disputed.'}, 'net_margin_avg': {'type': ['number', 'null'], 'description': 'Net margin.'}, 'return_vs_wacc': {'type': ['number', 'null'], 'description': 'Ratio; above 1 is the moat signal.'}}}, 'notes': {'type': 'array', 'description': "Caveats about what the filings did and didn't support."}, 'ticker': {'type': 'string'}, 'management': {'type': 'object', 'properties': {'debt_change': {'type': ['number', 'null'], 'description': 'Fractional change in debt.'}, 'share_count_end': {'type': ['number', 'null'], 'description': 'Shares at the end.'}, 'share_count_start': {'type': ['number', 'null'], 'description': 'Shares at the start of the window.'}, 'share_count_change': {'type': ['number', 'null'], 'description': 'Fractional change; negative means buybacks.'}}}, 'years_covered': {'type': 'integer', 'description': 'How many fiscal years the signals were computed over.'}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}}}
get_expected_return
Expected return at a given price
At a price you supply, the annual return the base case implies. MeritValue holds no market-data licence, so it never returns a live quote — the caller must provide the price. Ask the user for it, or have them check a broker; do not guess one, and do not present a guessed price as a real one.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['ticker', 'price'], 'properties': {'price': {'type': 'number', 'description': "Share price to test, in the company's reporting currency."}, 'ticker': {'type': 'string', 'description': 'Ticker symbol, e.g. AAPL. Case-insensitive.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'ticker', 'price', 'expected_return'], 'properties': {'price': {'type': 'number', 'description': 'Echoed back — the price you supplied, never a quote.'}, 'ticker': {'type': 'string'}, 'refused': {'type': 'string', 'description': "Present when the flagship DCF doesn't apply. A refusal is a result — report it, don't retry."}, 'currency': {'type': ['string', 'null']}, 'disclaimer': {'type': 'string'}, 'assumptions': {'type': 'object', 'properties': {'years': {'type': 'integer'}, 'fcf_base': {'type': ['number', 'null'], 'description': 'Base free cash flow.'}, 'net_debt': {'type': ['number', 'null'], 'description': 'Net debt.'}, 'fcf_growth': {'type': ['number', 'null'], 'description': 'Assumed growth rate.'}, 'terminal_growth': {'type': ['number', 'null'], 'description': 'Terminal growth rate.'}, 'shares_outstanding': {'type': ['number', 'null'], 'description': 'Share count.'}}}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}, 'expected_return': {'type': ['number', 'null'], 'description': "Annual return the base case implies, as a fraction. Null when it can't be solved."}}}
get_fundamentals
Fundamentals with filing provenance
Normalized fundamentals per fiscal year — revenue, earnings, cash flow, capex, debt, shares — each carrying the CIK, accession number and XBRL tag it came from. Use when the user wants the underlying numbers or asks where a figure came from. Foreign filers report in their home currency; read the currency field.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['ticker'], 'properties': {'ticker': {'type': 'string', 'description': 'Ticker symbol, e.g. AAPL. Case-insensitive.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'ticker', 'years'], 'properties': {'cik': {'type': ['string', 'number'], 'description': 'SEC Central Index Key.'}, 'name': {'type': 'string'}, 'years': {'type': 'array', 'items': {'type': 'object'}, 'description': 'One entry per fiscal year. Each figure carries the CIK, accession number and XBRL tag it came from.'}, 'ticker': {'type': 'string'}, 'warnings': {'type': 'array'}, 'completeness': {'type': ['number', 'null'], 'description': 'Fraction of expected figures the filings actually supplied.'}, 'fiscal_years': {'type': 'integer', 'description': 'How many years are covered.'}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}}}
get_intrinsic_value
Intrinsic value across models
Every valuation model's verdict plus the fair-value range: DCF (5Y/10Y), earnings-power value, Graham number, P/E reversion. Refusals are included and are meaningful — a DCF declining to value a bank is a result, not a gap. Never present a refused model as missing data, and never substitute another model's number for it.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['ticker'], 'properties': {'ticker': {'type': 'string', 'description': 'Ticker symbol, e.g. AAPL. Case-insensitive.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'ticker', 'models'], 'properties': {'wacc': {'type': ['number', 'null'], 'description': 'Discount rate used by the DCF models.'}, 'models': {'type': 'array', 'items': {'type': 'object', 'required': ['model', 'value_per_share', 'applies'], 'properties': {'model': {'type': 'string'}, 'notes': {'type': 'array', 'description': 'Why it refused, where it refused.'}, 'applies': {'type': 'boolean', 'description': 'False is a refusal, not missing data.'}, 'outputs': {'type': ['object', 'null'], 'description': 'Model internals — the workings behind the value.'}, 'currency': {'type': ['string', 'null']}, 'assumptions': {'type': 'array', 'items': {'type': 'object', 'properties': {'key': {'type': 'string'}, 'unit': {'enum': ['ratio', 'years', 'usd'], 'type': 'string'}, 'value': {'type': 'number'}, 'source': {'type': 'string', 'description': 'Where the default came from — never silent.'}, 'overridable': {'type': 'boolean'}}}, 'description': 'Every input the model was run with, each naming where its default came from.'}, 'computed_at': {'type': 'string'}, 'engine_version': {'type': 'string'}, 'value_per_share': {'type': ['number', 'null'], 'description': 'Null when the model refused this company.'}}}, 'description': 'One entry per model, including the ones that refused.'}, 'ticker': {'type': 'string'}, 'currency': {'type': ['string', 'null'], 'description': 'Reporting currency; foreign filers are not USD.'}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}, 'fair_value_range': {'type': 'object', 'properties': {'low': {'type': ['number', 'null'], 'description': 'Lowest fair value.'}, 'high': {'type': ['number', 'null'], 'description': 'Highest fair value.'}, 'models': {'type': 'integer'}}, 'description': 'Low/high across the models that applied, and how many did.'}}}
get_thesis
Computed investment thesis
The thesis for a company, computed from its SEC filings: business quality and fair value in one breath. Deterministic — the same filings always produce the same sentences — and byte-identical to what meritvalue.com shows. Returns null when the filings support neither a moat read nor a fair value, rather than inventing one. Use this first when asked whether a company is worth owning.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['ticker'], 'properties': {'ticker': {'type': 'string', 'description': 'Ticker symbol, e.g. AAPL. Case-insensitive.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'ticker', 'thesis'], 'properties': {'name': {'type': 'string'}, 'basis': {'type': 'object', 'properties': {'wacc': {'type': ['number', 'null'], 'description': 'Weighted average cost of capital.'}, 'currency': {'type': ['string', 'null']}, 'return_avg': {'type': ['number', 'null'], 'description': 'Average return on capital over the window.'}, 'return_metric': {'type': ['string', 'null'], 'description': "'roic' or 'roe' — which one the filings supported."}, 'fair_value_range': {'type': 'object', 'properties': {'low': {'type': ['number', 'null'], 'description': 'Lowest fair value.'}, 'high': {'type': ['number', 'null'], 'description': 'Highest fair value.'}, 'models': {'type': 'integer'}}, 'description': 'Low/high across the models that applied, and how many did.'}, 'share_count_change': {'type': ['number', 'null'], 'description': 'Fractional change in shares; negative means buybacks.'}}, 'description': 'The figures the sentences were derived from.'}, 'thesis': {'type': ['object', 'null'], 'properties': {'value': {'type': 'string', 'description': 'Valuation sentence.'}, 'business': {'type': ['string', 'null'], 'description': 'Business-quality sentence.'}}, 'description': 'Null when the filings support neither a moat read nor a fair value. Quote verbatim.'}, 'ticker': {'type': 'string'}, 'disclaimer': {'type': 'string'}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}}}
screen_undervalued
Screen the covered universe
Rank covered companies by a chosen model's value. Requires a key with screening enabled — a 403 means the key lacks it, which is a plan limit and not an error to retry.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max results (1–500, default 50).'}, 'model': {'enum': ['dcf-growth-exit-5y', 'dcf-growth-exit-10y', 'graham-number', 'epv-equity'], 'type': 'string', 'description': 'Valuation model to rank by.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'model', 'count', 'results'], 'properties': {'count': {'type': 'integer'}, 'model': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object'}}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}, 'min_completeness': {'type': ['number', 'null'], 'description': 'Filings below this threshold are excluded rather than published wrong.'}}}
search_companies
Find a covered company
Resolve a company name or partial ticker to covered companies — 'coca cola' finds KO. Use this before the other tools when you have a name rather than a symbol. Coverage is US filers with SEC filings.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'description': 'Max results (1–50, default 10).'}, 'query': {'type': 'string', 'description': 'Company name or ticker fragment.'}}}
출력 스키마
{'type': 'object', 'required': ['engine_version', 'query', 'results'], 'properties': {'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object'}}, 'engine_version': {'type': 'string', 'description': 'Engine build that produced these figures.'}}}
추가됨
screen_undervalued
2026년 9월 17일 12:36 PM
추가됨
search_companies
2026년 9월 17일 12:36 PM
추가됨
get_fundamentals
2026년 9월 17일 12:36 PM
추가됨
get_expected_return
2026년 9월 17일 12:36 PM
추가됨
get_intrinsic_value
2026년 9월 17일 12:36 PM
추가됨
get_business_quality
2026년 9월 17일 12:36 PM
추가됨
get_thesis
2026년 9월 17일 12:36 PM