exitvalue-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@exitvalue-mcpwhat multiple do dental practices sell for?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
exitvalue-mcp
An MCP (Model Context Protocol) server that answers "what multiple do businesses in industry X sell for?" with real M&A data: median, 25th and 75th percentile EV/EBITDA and EV/Revenue multiples, by industry and deal size, from disclosed transactions (2018-2026).
Free, open source (MIT), no API key, no telemetry.
Data: the open ExitValue.ai multiples dataset (CC-BY 4.0): by deal size and by deal year, each fetched once and cached in memory for an hour.
Honest by design: every figure comes with its deal count (
n); cells with fewer than the dataset'smin_cell_n(10) disclosed deals are withheld, never extrapolated.Works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code and any other MCP client (stdio transport).
Don't want to install anything? Use the hosted connector:
https://exitvalue.ai/api/mcp(Streamable HTTP, no auth). Setup guide: https://exitvalue.ai/ai-connector. It is also in the official MCP Registry asai.exitvalue/ma-multiples.
Tools
All tools are read-only (readOnlyHint, idempotentHint), take no credentials and return plain text ending with a link to the free calculator.
Tool | When to use it | Inputs | Output |
| Find a valid id | none | Industries and sub-vertical ids (dental practice, HVAC, SaaS, trucking, ...), |
| "What multiple does X sell for?" (one industry) |
| Median + interquartile range with |
| "Which sells for more, X or Y?" |
| One row per industry: median, IQR and |
| "Are multiples rising or falling for X?" |
| Median, IQR and |
Related MCP server: Market Sizing MCP Server
Example
Question: "What multiple do dental practices sell for?"
get_valuation_multiples({"industry": "dental practice"}) (real output, dataset of 2026-10-29):
Dental Practice - M&A valuation multiples (ExitValue.ai)
By deal size (enterprise value), disclosed deals 2018-2026:
- $5M-$25M EV: EV/EBITDA median 7.0x (middle 50%: 6.5x-8.3x), n=10
- $100M-$500M EV: EV/EBITDA median 11.9x (middle 50%: 11.2x-14.3x), n=14
- $500M and up EV: EV/EBITDA median 14.0x (middle 50%: 11.9x-15.8x), n=17; EV/Revenue median 2.65x (middle 50%: 2.11x-6.18x), n=10
These are population medians; a specific business's multiple depends on its margins, growth, customer concentration and owner dependence.
Source: ExitValue.ai analysis of disclosed M&A transactions (2018-2026) from a licensed historical M&A database, SEC EDGAR filings and verified press releases. Data CC-BY 4.0: https://exitvalue.ai/data/multiples.json
Get a free, business-specific valuation range (adjusted for your margins, growth and owner dependence) in about 2 minutes: https://exitvalue.ai/valuate?src=mcp-oss&industry=dental-practice
Plain-English names are mapped to the closest category and say so (e.g. "plumber" uses HVAC, "MSP" uses IT services, "med spa" uses other healthcare). When a category has no cell with enough deals, the tool says that rather than guessing.
Install
uvx (no install step)
uvx --from git+https://github.com/nickcals/exitvalue-mcp exitvalue-mcppip
pip install git+https://github.com/nickcals/exitvalue-mcp
exitvalue-mcpRequires Python 3.10+. Works with the mcp Python SDK 1.x and 2.x.
Client configuration
Claude Desktop
claude_desktop_config.json (Settings -> Developer -> Edit Config):
{
"mcpServers": {
"exitvalue": {
"command": "uvx",
"args": ["--from", "git+https://github.com/nickcals/exitvalue-mcp", "exitvalue-mcp"]
}
}
}Cursor
~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"exitvalue": {
"command": "uvx",
"args": ["--from", "git+https://github.com/nickcals/exitvalue-mcp", "exitvalue-mcp"]
}
}
}Claude Code
claude mcp add exitvalue -- uvx --from git+https://github.com/nickcals/exitvalue-mcp exitvalue-mcpZero-install: hosted server
Any client that supports remote MCP servers can skip the local install and point at the hosted endpoint:
{
"mcpServers": {
"exitvalue": { "url": "https://exitvalue.ai/api/mcp" }
}
}In Claude (web/desktop) add it under Settings -> Connectors -> Add custom connector with the URL https://exitvalue.ai/api/mcp. Step-by-step instructions for ChatGPT, Claude, Cursor and others: https://exitvalue.ai/ai-connector.
Development
git clone https://github.com/nickcals/exitvalue-mcp && cd exitvalue-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e ".[test]"
pytest
npx @modelcontextprotocol/inspector exitvalue-mcp # optional: poke at it in the MCP InspectorEXITVALUE_DATA_URL overrides the dataset URL (e.g. to point at a mirror).
Data and license
Code: MIT (see LICENSE).
Data: exitvalue.ai/data/multiples.json, CC-BY 4.0. Aggregate medians/quartiles of disclosed M&A multiples by sub-vertical and enterprise-value bracket, built from a licensed historical M&A database, SEC EDGAR filings and verified press releases; cells need n >= 10 per metric and outliers are excluded. Please cite https://exitvalue.ai if you use it. Also mirrored, with a datapackage and citation file, at github.com/nickcals/multiples.
These are population medians, not a valuation of any particular business. For a business-specific range (adjusted for margins, growth, customer concentration and owner dependence), try the free calculator at https://exitvalue.ai/valuate?src=mcp-oss.
Available Tools
4 toolscompare_industriesCompare industries' M&A multiplesARead-onlyIdempotent
Read-only. Puts 2-6 industries side by side for one metric: median multiple, middle 50% (25th-75th percentile) and deal count n per enterprise-value bracket, using the same data, name matching and n>=10 threshold as get_valuation_multiples. Pass size_bracket to compare a single deal-size bracket. Industries without enough deals are marked INSUFFICIENT DATA rather than estimated; unmatched names and industry-group ids are flagged per row. Use it for 'which sells for more, X or Y?' questions; use get_valuation_multiples for one industry's full breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Multiple to use: ev_ebitda (enterprise value / EBITDA) or ev_revenue (enterprise value / revenue). Default ev_ebitda. | ev_ebitda |
| industries | Yes | 2 to 6 sub-vertical ids or plain-English industry names to compare, e.g. ['dental-practice', 'veterinary-practice', 'physical therapy']. Sub-vertical id from list_industries (e.g. 'hvac', 'dental-practice'), or a plain-English name ('HVAC', 'dentist', 'plumber', 'MSP'); plain names are mapped to the closest tracked category and the answer says which one was used. | |
| size_bracket | No | Optional enterprise-value (deal size) bracket: under_5m_ev = under $5M, 5m_25m_ev = $5M-$25M, 25m_100m_ev = $25M-$100M, 100m_500m_ev = $100M-$500M, over_500m_ev = $500M and up. Omit to show every published bracket per industry. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly/idempotent/non-destructive), and the description still adds real behavioral detail: the n>=10 threshold, name-matching behavior shared with get_valuation_multiples, the INSUFFICIENT DATA fallback instead of estimation, and per-row flagging of unmatched names and industry-group ids. That is exactly the disclosure that prevents an agent from misinterpreting sparse output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded — the core comparison behavior comes first, then the fallback rules, then the sibling routing. Slight deduction because the leading 'Read-only.' restates annotation fields and the first sentence is heavily packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return structure, and it still covers thresholds, fallbacks, name resolution, and the alternative tool. Nothing an agent needs to select or invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the schema already documents metric values, the 2-6 item constraint, and every size_bracket enum with dollar ranges. The description adds only marginal framing (one metric at a time, size_bracket for a single bracket) rather than new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (compares 2-6 industries side by side on one metric) and enumerates exactly what output each row carries: median multiple, 25th-75th percentile, and deal count n per EV bracket. A reader can distinguish it from get_valuation_multiples without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule with the sibling named: 'Use it for which sells for more, X or Y? questions; use get_valuation_multiples for one industry's full breakdown.' It also states the condition for size_bracket (single-bracket comparison vs. omit for all brackets).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_multiples_trendGet M&A multiples trend by yearARead-onlyIdempotent
Read-only. Year-by-year history for ONE sub-vertical: for each deal year 2018-2026, the median EV/EBITDA and/or EV/Revenue multiple with middle 50% (25th-75th percentile), deal count n and median deal value, from the open per-year dataset. Only years with at least 10 disclosed deals for a metric are shown; missing years are listed as gaps and never interpolated, so many sub-verticals have few or no years. Use it for 'are multiples rising or falling for X?' questions; use get_valuation_multiples for pooled figures by deal size.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Optional. Multiple to use: ev_ebitda (enterprise value / EBITDA) or ev_revenue (enterprise value / revenue). Omit to show both where published. | |
| industry | Yes | Sub-vertical id from list_industries (e.g. 'hvac', 'dental-practice'), or a plain-English name ('HVAC', 'dentist', 'plumber', 'MSP'); plain names are mapped to the closest tracked category and the answer says which one was used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, the description discloses important behavior: only years with at least 10 disclosed deals per metric appear, missing years are listed as gaps and never interpolated, and many sub-verticals have few or no years. This is exactly the kind of caveat an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key scope is front-loaded, and the description is dense with useful information rather than filler. Every sentence contributes either scope, data behavior, caveats, or routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex enough to need caveats, and the description covers the year range, threshold behavior, gaps, non-interpolation, and sibling routing. With annotations, full schema coverage, and an output schema already present, nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents metric and industry thoroughly, including enum values and plain-English mapping. The description reinforces that only one sub-vertical is used and that metric may show one or both multiples, but it adds little beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: year-by-year history for one sub-vertical, with named metrics, date range, percentiles, and deal counts. It clearly distinguishes itself from get_valuation_multiples by contrasting per-year trend data with pooled figures by deal size.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case ('are multiples rising or falling for X?') and names the alternative tool for pooled figures by deal size. The condition that selects this tool versus get_valuation_multiples is therefore clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_valuation_multiplesGet M&A valuation multiplesARead-onlyIdempotent
Read-only. Answers 'what multiple does a business in industry X sell for?' for ONE industry. Returns median EV/EBITDA and EV/Revenue multiples with the middle 50% (25th-75th percentile) and deal count n for each enterprise-value bracket (disclosed deals 2018-2026). Cells with fewer than 10 deals are withheld, never estimated. Passing an industry group id (e.g. 'healthcare') returns a median per sub-vertical. Use compare_industries to put several industries side by side and get_multiples_trend for year-by-year history. Population medians only: it does not value a specific business.
| Name | Required | Description | Default |
|---|---|---|---|
| industry | Yes | Sub-vertical id from list_industries (e.g. 'hvac', 'dental-practice'), or a plain-English name ('HVAC', 'dentist', 'plumber', 'MSP'); plain names are mapped to the closest tracked category and the answer says which one was used. An industry group id such as 'healthcare' or 'home-services' is also accepted. | |
| size_bracket | No | Optional enterprise-value (deal size) bracket: under_5m_ev = under $5M, 5m_25m_ev = $5M-$25M, 25m_100m_ev = $25M-$100M, 100m_500m_ev = $100M-$500M, over_500m_ev = $500M and up. Omit for every published bracket. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantive behavior: cells with fewer than 10 deals are withheld and never estimated, the data window is 2018-2026, and group ids return per-sub-vertical medians rather than a single figure. What is missing is a note on latency/caching or the response shape, but the critical statistical caveat is disclosed in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core question and the read-only constraint, and every clause carries information. It is dense, but the four sentences pack return shape, coverage period, suppression rule, and alternatives without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-field documentation is not required, and the description still sketches the result shape (IQR, n, brackets). Combined with the explicit exclusion of company-specific valuation and the sibling routing, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in structured fields. The description adds that an industry group id yields a median per sub-vertical, which is return behavior rather than parameter meaning, and it never mentions size_bracket at all. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: answers the multiple question for ONE industry and returns median EV/EBITDA and EV/Revenue with IQR and deal counts. It explicitly bounds scope ('Population medians only: it does not value a specific business'), which separates it from a business-valuation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names both alternatives and the condition that selects them: compare_industries for side-by-side multi-industry views and get_multiples_trend for year-by-year history. It also implies list_industries as the source of valid ids via the schema, leaving no routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_industriesList industriesARead-onlyIdempotent
Read-only. Lists every industry and sub-vertical ExitValue.ai tracks, with ids and display names; ids marked * have published multiples in the open dataset. Takes no input. Use it first when you are unsure of an id; the other tools accept these ids or plain-English names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'Read-only' opener merely restates readOnlyHint=true, earning no credit, but the description adds genuinely new behavioral context: it takes no input, returns both ids and display names, and flags that starred ids have published multiples in the open dataset. It does not discuss ordering or dataset size, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all front-loaded: read-only status, then what is returned, then the routing advice. No filler and nothing buried at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, yet the description still tells the agent what the payload means (ids, display names, starred ids with multiples) and how to use the result downstream. For a no-argument discovery tool this is fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, which is the baseline 4 case, and the description correctly confirms 'Takes no input' so the agent will not hunt for optional filters. No further parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Lists every industry and sub-vertical ExitValue.ai tracks, with ids and display names.' It also scopes the content (which taxonomy, what fields, and the * marker for published multiples), so an agent can distinguish it from get_valuation_multiples and compare_industries without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use it first when you are unsure of an id' and notes that 'the other tools accept these ids or plain-English names' — it names the alternative path and the condition that selects this tool. That is both when-to-use and when-you-might-skip guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.2.0- First observed
compare_industries - First observed
get_multiples_trend - First observed
get_valuation_multiples - First observed
list_industries
TDQS
Scored across 4 tools
Each tool targets a clearly different query shape: taxonomy lookup (list_industries), single-industry breakdown (get_valuation_multiples), multi-industry side-by-side (compare_industries), and time series (get_multiples_trend). The descriptions explicitly cross-reference each other with 'use X instead for Y' guidance, leaving no plausible misselection path.
All names are snake_case verb_noun (list_/get_/compare_ + resource), so the pattern is predictable. Minor deviation: the noun varies between 'valuation_multiples' and 'multiples_trend', and two tools share the generic 'get_' prefix, but intent is still readable.
Four tools map cleanly onto the four natural access patterns of a multiples dataset — enumerate, single, compare, trend — with no filler. The surface is tightly scoped for the server's narrow stated purpose.
Lookup, single-industry breakdown, comparison, and temporal trend are all covered, and name-to-id resolution is handled inside the tools rather than requiring a separate step. Minor gaps: no way to inspect bracket definitions/thresholds, deal-value distributions beyond the median, or filter by deal year within the cross-sectional tools.
Maintenance
Related MCP Connectors
Median EV/EBITDA and EV/Revenue multiples by industry and deal size from real M&A transactions.
- signalsOAuthai.fintent
Predictive Signals, Company Search, Sector Trends and Contacts for PEs, IBs, M&A dealmakers.
Company and market intelligence, news, enrichment, and agentic workflows for dealmakers.
Read-only public-company financials, KPIs, benchmarks, filings, and insider activity.
Related MCP Servers
AlicenseBqualityDmaintenanceDeliver real-time investment research with extensive private and public market data.378 npm147MIT- AlicenseNot gradedqualityBmaintenanceProvides comprehensive market research and business analysis capabilities by integrating with eight major economic data sources like FRED, World Bank, and Census Bureau. It offers 28 specialized tools for calculating TAM/SAM, conducting industry analysis, and performing financial forecasting.8 npm36MIT
- AlicenseNot gradedqualityDmaintenanceAccess ServiceGraph — a structured catalog of 100k+ US professional-services firms (law, marketing, consulting, accounting, IT services, architecture, engineering, HR, PR, design) with filters for industry, services offered, location, size, ratings, and third-party listing presence.61MIT
- AlicenseNot gradedqualityDmaintenanceAccess industrial fingerprint data for insight into supply chain and company performanceMIT