# Bavest MCP server

> Connect Claude, ChatGPT, Cursor, VS Code, Windsurf and other AI tools to Bavest financial data over the Model Context Protocol.

One URL for every client: `https://api.bavest.co/v2/mcp`. Each MCP tool wraps one Bavest v2 data route (89 of the 98 routes), so an AI tool can look up fundamentals, ETF holdings, dividends, estimates and economic data in plain language.

You need a Bavest API key. [Sign up](https://dashboard.bavest.co/sign-up) for a free trial key, or [sign in](https://dashboard.bavest.co/sign-in?next=%2Fdashboard%2Fmcp) to get these setups with your own key filled in and a connection test.

## Server

| Setting | Value |
| --- | --- |
| URL | `https://api.bavest.co/v2/mcp` |
| Transport | Streamable HTTP. Every request is one POST, every reply one JSON body (no session, no SSE stream). |
| Authentication | `x-api-key: YOUR_API_KEY` header (preferred). Optional `api_key` query parameter for connectors that cannot set headers. |
| Without a key | `initialize` and `tools/list` work; tool calls need a key. |
| Usage | Each tool call counts against your plan like the REST call it wraps. |

## Authentication

Send your key in the `x-api-key` header. It is the same key and the same header as the REST API, see [Authentication](https://dashboard.bavest.co/docs/authentication).

Some connectors only take a URL and cannot set headers: Claude custom connectors and ChatGPT developer mode. For those the server also accepts the key as a query parameter, `https://api.bavest.co/v2/mcp?api_key=YOUR_API_KEY`. The connector then stores the key inside the URL, and URLs end up in logs and settings exports, so use this form only where no header is possible and rotate the key if the URL leaks.

## Install in one click

These links open the client and add the server with a placeholder key. Replace `YOUR_API_KEY` in the client's MCP settings afterwards.

- [Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=bavest&config=eyJ1cmwiOiJodHRwczovL2FwaS5iYXZlc3QuY28vdjIvbWNwIiwiaGVhZGVycyI6eyJ4LWFwaS1rZXkiOiJZT1VSX0FQSV9LRVkifX0%3D): link format: [Cursor docs](https://cursor.com/docs/context/mcp/install-links)
- [Add to VS Code](vscode:mcp/install?%7B%22name%22%3A%22bavest%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.bavest.co%2Fv2%2Fmcp%22%2C%22headers%22%3A%7B%22x-api-key%22%3A%22YOUR_API_KEY%22%7D%7D): link format: [VS Code docs](https://code.visualstudio.com/docs/copilot/guides/mcp-developer-guide)

## Set up your client

Pick your tool, copy the setup and replace `YOUR_API_KEY` with your key.

### Claude

Setup: claude.ai and Claude Desktop, as a custom connector.

1. In Claude, open Customize, then Connectors.
2. Click +, then Add custom connector.
3. Name it Bavest and paste the URL below. Leave the OAuth fields empty.
4. In a chat, switch Bavest on under + and Connectors.

Connector URL:

```
https://api.bavest.co/v2/mcp?api_key=YOUR_API_KEY
```

- [Claude documentation](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp)

### Claude Code

Setup: one command in your terminal.

1. Run the command below. It adds Bavest for all your projects.
2. Check it with claude mcp list.

Terminal:

```bash
claude mcp add --transport http bavest https://api.bavest.co/v2/mcp --header "x-api-key: YOUR_API_KEY" --scope user
```

- [Claude Code documentation](https://code.claude.com/docs/en/mcp)

### Cursor

Setup: ~/.cursor/mcp.json, or .cursor/mcp.json in one project.

1. Open ~/.cursor/mcp.json (create it if it is missing).
2. Paste the block below. If the file already has servers, add the bavest entry inside mcpServers.
3. Restart Cursor, or switch the server on under Settings, MCP.

~/.cursor/mcp.json:

```json
{
  "mcpServers": {
    "bavest": {
      "url": "https://api.bavest.co/v2/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

- [Cursor documentation](https://cursor.com/docs/mcp)

### ChatGPT

Setup: developer mode, on paid ChatGPT plans.

1. In ChatGPT settings, turn on Developer mode.
2. Add a new app or connector and paste the URL below as the MCP server URL.
3. Choose no authentication: the key is already in the URL.

Connector URL:

```
https://api.bavest.co/v2/mcp?api_key=YOUR_API_KEY
```

- [ChatGPT documentation](https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt)

### VS Code

Setup: .vscode/mcp.json, for Copilot agent mode.

1. Create .vscode/mcp.json in your project.
2. Paste the block below, then start bavest with the command MCP: List Servers.

.vscode/mcp.json:

```json
{
  "servers": {
    "bavest": {
      "type": "http",
      "url": "https://api.bavest.co/v2/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

- [VS Code documentation](https://code.visualstudio.com/docs/agent-customization/mcp-servers)

### Windsurf

Setup: ~/.codeium/windsurf/mcp_config.json, for Cascade.

1. In Windsurf, open Cascade, then Manage MCPs, then View raw config.
2. Paste the block below. If the file already has servers, add the bavest entry inside mcpServers.
3. Click Refresh in Manage MCPs.

~/.codeium/windsurf/mcp_config.json:

```json
{
  "mcpServers": {
    "bavest": {
      "serverUrl": "https://api.bavest.co/v2/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

- [Windsurf documentation](https://docs.devin.ai/desktop/cascade/mcp)

### Other clients

Setup: any client that speaks MCP over HTTP.

1. Transport: Streamable HTTP. The server answers every POST with one JSON reply.
2. Send the key in the x-api-key header. If the client cannot set headers, use the URL with ?api_key=.

Connection:

```
URL:    https://api.bavest.co/v2/mcp
Header: x-api-key: YOUR_API_KEY

Without headers: https://api.bavest.co/v2/mcp?api_key=YOUR_API_KEY
```

## Tools

One tool per route, named after the route's operationId in snake case: `equities.profile` is `equities_profile`, `etfs.topHoldings` is `etfs_top_holdings`. A tool takes the route's query parameters (or its JSON body) as arguments and returns the route's response. `tools/list` returns the exact names and input schemas. Tools for routes your plan does not include answer with an error instead of data, and each call counts against your plan like the REST call.

Inputs that go together: many tools take `symbol` or `isin`, and need exactly one of them. The input schema from `tools/list` marks both optional, so send one. The OpenAPI spec lists these groups per operation in `x-one-of-parameters` (for example `[["symbol", "isin"]]`), and each route page says "Required: one of symbol, isin".

89 tools for the 98 data routes in this reference (tool list checked 2026-10-26). Each tool links to its route.

| Group | Tools |
| --- | --- |
| Account | [account_quota](https://dashboard.bavest.co/docs/v2_account_quota), [account_status](https://dashboard.bavest.co/docs/v2_account_status) |
| Bulk | [bulk_endpoint](https://dashboard.bavest.co/docs/v2_bulk) |
| Calendar | [calendar_earnings](https://dashboard.bavest.co/docs/v2_calendar_earnings), [calendar_ipos](https://dashboard.bavest.co/docs/v2_calendar_ipo), [calendar_agm](https://dashboard.bavest.co/docs/v2_calendar_agm), [calendar_splits](https://dashboard.bavest.co/docs/v2_calendar_splits) |
| Corporate Actions | [corporate_actions_earnings](https://dashboard.bavest.co/docs/v2_corporate_actions_earnings), [corporate_actions_earnings_transcript](https://dashboard.bavest.co/docs/v2_corporate_actions_earnings_transcript), [corporate_actions_earnings_transcript_periods](https://dashboard.bavest.co/docs/v2_corporate_actions_earnings_transcript_periods), [corporate_actions_splits](https://dashboard.bavest.co/docs/v2_corporate_actions_splits) |
| Crypto | [crypto_quote](https://dashboard.bavest.co/docs/v2_crypto_quote), [crypto_list](https://dashboard.bavest.co/docs/v2_crypto_list) |
| Dividends | [dividends_annual](https://dashboard.bavest.co/docs/v2_dividends_annual), [dividends_calendar](https://dashboard.bavest.co/docs/v2_dividends_calendar), [dividends_history](https://dashboard.bavest.co/docs/v2_dividends_history), [dividends_estimates](https://dashboard.bavest.co/docs/v2_dividends_estimates) |
| Economic Indicators | [economy_cpi](https://dashboard.bavest.co/docs/v2_economy_cpi_country), [economy_gdp](https://dashboard.bavest.co/docs/v2_economy_gdp_country), [economy_inflation](https://dashboard.bavest.co/docs/v2_economy_inflation_country), [economy_interest_rates](https://dashboard.bavest.co/docs/v2_economy_interest_rates_country), [economy_unemployment](https://dashboard.bavest.co/docs/v2_economy_unemployment_country), [economy_indicator](https://dashboard.bavest.co/docs/v2_economy_indicator), [economy_countries](https://dashboard.bavest.co/docs/v2_economy_countries), [metrics_history](https://dashboard.bavest.co/docs/v2_metrics_metric_code_history) |
| Equities | [equities_balance_sheets](https://dashboard.bavest.co/docs/v2_equities_balance_sheets), [equities_cash_flows](https://dashboard.bavest.co/docs/v2_equities_cash_flow), [equities_logo](https://dashboard.bavest.co/docs/v2_equities_logo), [equities_profile](https://dashboard.bavest.co/docs/v2_equities_profile), [equities_metric_names](https://dashboard.bavest.co/docs/v2_equities_metrics_names), [equities_metrics](https://dashboard.bavest.co/docs/v2_equities_metrics), [equities_financials_ttm](https://dashboard.bavest.co/docs/v2_equities_financials_ttm), [equities_income_statements](https://dashboard.bavest.co/docs/v2_equities_income_statement), [equities_market_cap](https://dashboard.bavest.co/docs/v2_equities_market_cap), [equities_market_cap_history](https://dashboard.bavest.co/docs/v2_equities_market_cap_history), [equities_peers](https://dashboard.bavest.co/docs/v2_equities_peers) |
| Timeseries Data | [securities_nav](https://dashboard.bavest.co/docs/v2_securities_nav) |
| Estimates | [estimates_consensus](https://dashboard.bavest.co/docs/v2_estimates_consensus), [estimates_recommendations](https://dashboard.bavest.co/docs/v2_estimates_recommendations), [estimates_price_target](https://dashboard.bavest.co/docs/v2_estimates_price_target), [estimates_upgrades_downgrades](https://dashboard.bavest.co/docs/v2_estimates_upgrades_downgrades), [estimates_ai_estimates](https://dashboard.bavest.co/docs/v2_estimates_ai_estimates), [estimates_ai_estimates_history](https://dashboard.bavest.co/docs/v2_estimates_ai_estimates_history) |
| ETFs | [etfs_category](https://dashboard.bavest.co/docs/v2_etfs_category), [etfs_countries](https://dashboard.bavest.co/docs/v2_etfs_countries), [etfs_document_catalog](https://dashboard.bavest.co/docs/v2_etfs_documents_catalog), [etfs_fees](https://dashboard.bavest.co/docs/v2_etfs_fees), [etfs_holdings](https://dashboard.bavest.co/docs/v2_etfs_holdings), [etfs_top_holdings](https://dashboard.bavest.co/docs/v2_etfs_holdings_top), [etfs_kid_document](https://dashboard.bavest.co/docs/v2_etfs_kid), [etfs_kid_languages](https://dashboard.bavest.co/docs/v2_etfs_kid_languages), [etfs_list](https://dashboard.bavest.co/docs/v2_etfs_list), [etfs_metrics](https://dashboard.bavest.co/docs/v2_etfs_metrics), [etfs_profile](https://dashboard.bavest.co/docs/v2_etfs_profile), [etfs_risk](https://dashboard.bavest.co/docs/v2_etfs_risk), [etfs_sectors](https://dashboard.bavest.co/docs/v2_etfs_sectors), [etfs_top_sectors](https://dashboard.bavest.co/docs/v2_etfs_sectors_top), [etfs_metric_names](https://dashboard.bavest.co/docs/v2_etfs_metrics_names), [etfs_top_countries](https://dashboard.bavest.co/docs/v2_etfs_top_countries), [etfs_country_list](https://dashboard.bavest.co/docs/v2_etfs_countries_list), [etfs_structure](https://dashboard.bavest.co/docs/v2_etfs_structure) |
| Forex | [forex_candles](https://dashboard.bavest.co/docs/v2_forex_candles_pair), [forex_quote](https://dashboard.bavest.co/docs/v2_forex_quote_pair) |
| Funds | [funds_countries](https://dashboard.bavest.co/docs/v2_funds_countries_isin), [funds_holdings](https://dashboard.bavest.co/docs/v2_funds_holdings_isin), [funds_metrics](https://dashboard.bavest.co/docs/v2_funds_metrics), [funds_metric_names](https://dashboard.bavest.co/docs/v2_funds_metric_names), [funds_profile](https://dashboard.bavest.co/docs/v2_funds_profile_isin), [funds_sectors](https://dashboard.bavest.co/docs/v2_funds_sectors_isin), [funds_list](https://dashboard.bavest.co/docs/v2_funds_list) |
| IPO | [ipo_hot](https://dashboard.bavest.co/docs/v2_ipo_hot), [ipo_documents](https://dashboard.bavest.co/docs/v2_ipo_documents), [ipo_profile](https://dashboard.bavest.co/docs/v2_ipo_profile) |
| News | [news_market](https://dashboard.bavest.co/docs/v2_news_market), [news_by_stock](https://dashboard.bavest.co/docs/v2_news_stock) |
| Bavest QuantOS | [bavest_quantos_allocate](https://dashboard.bavest.co/docs/v2_quant_os_allocate), [bavest_quantos_chart](https://dashboard.bavest.co/docs/v2_quant_os_chart), [bavest_quantos_price](https://dashboard.bavest.co/docs/v2_quant_os_price), [bavest_quantos_regions](https://dashboard.bavest.co/docs/v2_quant_os_region), [bavest_quantos_returns](https://dashboard.bavest.co/docs/v2_quant_os_return), [bavest_quantos_sectors](https://dashboard.bavest.co/docs/v2_quant_os_sector), [bavest_quantos_stats](https://dashboard.bavest.co/docs/v2_quant_os_stats) |
| Reference | [reference_adr_list](https://dashboard.bavest.co/docs/v2_adrs_list), [reference_security_list](https://dashboard.bavest.co/docs/v2_securities_list), [reference_delisted_list](https://dashboard.bavest.co/docs/v2_securities_delisted), [reference_isin_change_list](https://dashboard.bavest.co/docs/v2_securities_isin_changed), [reference_search](https://dashboard.bavest.co/docs/v2_reference_search), [reference_search_aggregated](https://dashboard.bavest.co/docs/v2_reference_search_aggregated), [reference_screen](https://dashboard.bavest.co/docs/v2_reference_screener_post) |

REST only, no MCP tool (9): [Equity Metrics History Export](https://dashboard.bavest.co/docs/v2_equities_export_latest), [Submit Equity Data Export](https://dashboard.bavest.co/docs/v2_equities_export_submit), [Metric History](https://dashboard.bavest.co/docs/v2_equities_metrics_history), [Equities Metrics History Export Status](https://dashboard.bavest.co/docs/v2_equities_export_status), [Submit ETF Data Export](https://dashboard.bavest.co/docs/v2_etfs_export_submit), [ETF Export Status](https://dashboard.bavest.co/docs/v2_etfs_export_status), [ETF Asset Class Breakdown](https://dashboard.bavest.co/docs/v2_etfs_asset_class_breakdown), [Earnings Release Filings](https://dashboard.bavest.co/docs/v2_filings_earnings), [Fund Asset Class Breakdown](https://dashboard.bavest.co/docs/v2_funds_asset_class_breakdown).

## Test from a terminal

List the tools (no key needed):

```bash
curl -s https://api.bavest.co/v2/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

Call a tool:

```bash
curl -s https://api.bavest.co/v2/mcp \
  -H 'content-type: application/json' \
  -H "x-api-key: $BAVEST_API_KEY" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"equities_profile","arguments":{"symbol":"AAPL"}}}'
```

---

HTML version: https://dashboard.bavest.co/docs/mcp. Docs index for agents: https://dashboard.bavest.co/llms.txt. OpenAPI: https://dashboard.bavest.co/openapi.json.
