Skip to content
dsh.fish
Bundle

xby-vnstock

一个非官方的MCP服务器,提供访问越南股市数据的工具,包括实时和历史股票价格、公司财务数据、市场统计和基金信息等。

Source
xby-skill
License
MIT
Updated
Updated 4 days ago

Readme

# xby-vnstock

DeepSeek Harness (DSH) 的插件:越南股市数据服务

一个非官方的MCP服务器,提供访问越南股市数据的工具,包括实时和历史股票价格、公司财务数据、市场统计和基金信息等。

## 功能

- **set_xby_apikey** — 在聊天中设置 API 密钥(自动持久化,重启有效)
- **list_all_icb_industries** — List all ICB industries from stock market
    Args:
        output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **list_all_companies_with_details** — List all companies from stock market with details
    Args:
        output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_overview** — Get company overview from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_news** — Get company news from stock market
Args:
    symbol: str
    page_size: int = 10
    page: int = 0
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_events** — Get company events from stock market
Args:
    symbol: str
    page_size: int = 10
    page: int = 0
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_shareholders** — Get company shareholders from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_officers** — Get company officers from stock market
Args:
    symbol: str
    filter_by: Literal['working', "all", 'resigned'] = 'working'
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_subsidiaries** — Get company subsidiaries from stock market
Args:
    symbol: str
    filter_by: Literal["all", "subsidiary"] = "all"
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_reports** — Get company reports from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_dividends** — Get company dividends from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_insider_deals** — Get company insider deals from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_ratio_summary** — Get company ratio summary from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_company_trading_stats** — Get company trading stats from stock market
Args:
    symbol: str
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_all_symbol_groups** — Get all symbol groups from stock market
    Args:
        output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_all_symbols_by_group** — Get all symbols from stock market
Args:
    group: str (group name to get symbols)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_all_symbols_by_industry** — Get all symbols from stock market
Args:
    industry: str = None (if None, return all symbols)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame or json
- **get_all_symbols** — Get all symbols from stock market
    Args:
        output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame or json
- **get_all_symbols_detailed** — Get all symbols detailed from stock market
    Args:
        output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_income_statements** — Get income statements of a company from stock market
Args:   
    symbol: str (symbol of the company to get income statements)
    period: Literal['quarter', 'year'] = 'year' (period to get income statements)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_balance_sheets** — Get balance sheets of a company from stock market
Args:
    symbol: str (symbol of the company to get balance sheets)
    period: Literal['quarter', 'year'] = 'year' (period to get balance sheets)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_cash_flows** — Get cash flows of a company from stock market
Args:
    symbol: str (symbol of the company to get cash flows)
    period: Literal['quarter', 'year'] = 'year' (period to get cash flows)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_finance_ratios** — Get finance ratios of a company from stock market
Args:
    symbol: str (symbol of the company to get finance ratios)
    period: Literal['quarter', 'year'] = 'year' (period to get finance ratios)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_raw_report** — Get raw report of a company from stock market
Args:
    symbol: str (symbol of the company to get raw report)
    period: Literal['quarter', 'year'] = 'year' (period to get raw report)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **list_all_funds** — List all funds from stock market
Args:
    fund_type: Literal['BALANCED', 'BOND', 'STOCK', None ] = None (if None, return funds in all types)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **search_fund** — Search fund by name from stock market
Args:
    keyword: str (partial match for fund name to search)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_fund_nav_report** — Get nav report of a fund from stock market
Args:
    symbol: str (symbol of the fund to get nav report)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_fund_top_holding** — Get top holding of a fund from stock market
Args:
    symbol: str (symbol of the fund to get top holding)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_fund_industry_holding** — Get industry holding of a fund from stock market
Args:
    symbol: str (symbol of the fund to get industry holding)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_fund_asset_holding** — Get asset holding of a fund from stock market
Args:
    symbol: str (symbol of the fund to get asset holding)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_gold_price** — Get gold price from stock market
Args:
    date: str = None (if None, return today's price. Format: YYYY-MM-DD)
    source: Literal['SJC', 'BTMC'] = 'SJC' (source to get gold price)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_exchange_rate** — Get exchange rate of all currency pairs from stock market
Args:
    date: str = None (if None, return today's price. Format: YYYY-MM-DD)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_quote_price_with_indicators** — Get quote price with indicators of a symbol from stock market.

Indicators can be specified with or without parameters:
- Simple: "rsi", "macd", "stochastic"
- With params: "rsi(window=21)", "macd(fast=12, slow=26, signal=9)"

Args:
    symbol: str (symbol to get price)
    indicators: list[str] (list of indicators with optional parameters)
        Examples:
        - ["rsi", "macd"] - use default parameters
        - ["rsi(window=21)", "macd(fast=12, slow=26)"] - custom parameters
        - ["stochastic(k=14, d=3)", "cci(window=20)"] - mixed
    start_date: str (format: YYYY-MM-DD)
    end_date: str = None (end date to get price. None means today)
    interval: Literal['1m', '5m', '15m', '30m', '1H', '1D', '1W', '1M'] = '1D' (interval to get price)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame with OHLCV data and requested indicator columns
- **get_quote_history_price** — Get quote price history of a symbol from stock market
Args:
    symbol: str (symbol to get history price)
    start_date: str (format: YYYY-MM-DD)
    end_date: str = None (end date to get history price. None means today)
    interval: Literal['1m', '5m', '15m', '30m', '1H', '1D', '1W', '1M'] = '1D' (interval to get history price)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_quote_intraday_price** — Get quote intraday price from stock market
Args:
    symbol: str (symbol to get intraday price)
    page_size: int = 500 (max: 100000) (number of rows to return)
    page: int = 1 (page number to get intraday price from)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_quote_price_depth** — Get quote price depth from stock market
Args:
    symbol: str (symbol to get price depth)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame
- **get_price_board** — Get price board from stock market
Args:
    symbols: list[str] (list of symbols to get price board)
    output_format: Literal['json', 'dataframe', 'toon'] = 'toon' (output format, 'toon' is optimized for AI)
Returns:
    pd.DataFrame

## 安装

### 方式一:从 GitHub 直接安装(推荐)

```bash
# 格式: dsh plugin --profile <profile> add github:<owner>/<repo>
dsh plugin --profile web add github:xby_skill/xby-vnstock
```

### 方式二:从本地目录安装(开发模式)

```bash
# 仅用于本地开发调试
dsh plugin --profile web add /absolute/path/to/xby-vnstock
```

### 方式三:通过 cordis.patch.yml 开发调试

```bash
dsh web --profile web --patch /absolute/path/to/dsh-ocr-plugin/cordis.patch.yml
```



## 配置

### 获取 API 密钥

前往 [小笨羊官网](https://xiaobenyang.com) 注册并获取 API 密钥。

Install

dsh plugin --profile web add github:xby-skill/xby-vnstock#d980c5200b9c3cfdd537ea60f162821d1a6d29fe

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
Source