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 for a free trial key, or sign in 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.
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 Cursorlink format: Cursor docs
- Add to VS Codelink format: VS Code docs
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.
- In Claude, open Customize, then Connectors.
- Click +, then Add custom connector.
- Name it Bavest and paste the URL below. Leave the OAuth fields empty.
- In a chat, switch Bavest on under + and Connectors.
https://api.bavest.co/v2/mcp?api_key=YOUR_API_KEYClaude Code
Setup: one command in your terminal.
- Run the command below. It adds Bavest for all your projects.
- Check it with claude mcp list.
claude mcp add --transport http bavest https://api.bavest.co/v2/mcp --header "x-api-key: YOUR_API_KEY" --scope userCursor
Setup: ~/.cursor/mcp.json, or .cursor/mcp.json in one project.
- Open ~/.cursor/mcp.json (create it if it is missing).
- Paste the block below. If the file already has servers, add the bavest entry inside mcpServers.
- Restart Cursor, or switch the server on under Settings, MCP.
{
"mcpServers": {
"bavest": {
"url": "https://api.bavest.co/v2/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}ChatGPT
Setup: developer mode, on paid ChatGPT plans.
- In ChatGPT settings, turn on Developer mode.
- Add a new app or connector and paste the URL below as the MCP server URL.
- Choose no authentication: the key is already in the URL.
https://api.bavest.co/v2/mcp?api_key=YOUR_API_KEYVS Code
Setup: .vscode/mcp.json, for Copilot agent mode.
- Create .vscode/mcp.json in your project.
- Paste the block below, then start bavest with the command MCP: List Servers.
{
"servers": {
"bavest": {
"type": "http",
"url": "https://api.bavest.co/v2/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}Windsurf
Setup: ~/.codeium/windsurf/mcp_config.json, for Cascade.
- In Windsurf, open Cascade, then Manage MCPs, then View raw config.
- Paste the block below. If the file already has servers, add the bavest entry inside mcpServers.
- Click Refresh in Manage MCPs.
{
"mcpServers": {
"bavest": {
"serverUrl": "https://api.bavest.co/v2/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}Other clients
Setup: any client that speaks MCP over HTTP.
- Transport: Streamable HTTP. The server answers every POST with one JSON reply.
- Send the key in the x-api-key header. If the client cannot set headers, use the URL with ?api_key=.
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_KEYTools
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.
REST only, no MCP tool (9): Equity Metrics History Export, Submit Equity Data Export, Metric History, Equities Metrics History Export Status, Submit ETF Data Export, ETF Export Status, ETF Asset Class Breakdown, Earnings Release Filings, Fund Asset Class Breakdown.
Test from a terminal
curl -s https://api.bavest.co/v2/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'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"}}}'This page as Markdown: /docs/mcp.md

