Skip to main content
Glama
sacahan

CasualMarket

by sacahan

CasualMarket - 台灣股票交易 MCP Server

Python 3.12+ FastMCP License: MIT Tests

一個功能完整的台灣股票交易 MCP Server,提供超過 23 個專業工具,涵蓋即時股價查詢、財務分析、市場資訊、模擬交易等多種功能。基於 FastMCP 2.7.0+ 框架開發,具備智慧快取和頻率限制機制。

部署模式

stdio 模式: 本地開發與 Claude Desktop 整合
Docker + SSE 模式: 容器化部署,HTTP 介面訪問

Related MCP server: Stock Analysis MCP Server

目錄

快速開始

CasualMarket MCP Server 已發佈在 PyPI,您可以直接透過 uvx 安裝並在支援 MCP 的工具中使用,無需本地配置。

系統需求:

最簡單的方式是根據您使用的工具,按照下方「MCP 安裝與配置」部分進行配置即可。

MCP 安裝與配置

Claude Desktop 配置

編輯 Claude Desktop 配置檔:

配置檔位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

配置內容(推薦方式 - 使用 GitHub Repo):

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

配置內容(本地開發方式):

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "/path/to/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

Cursor 配置

編輯 Cursor 配置檔:

配置檔位置:

  • macOS: ~/Library/Application Support/Cursor/User/settings.json

  • Windows: %APPDATA%\Cursor\User\settings.json

  • Linux: ~/.config/Cursor/User/settings.json

配置內容:

settings.json 中加入以下配置:

{
  "mcpServerSettings": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

或者直接編輯 .cursor/mcp.json

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

VS Code 配置(通過 Claude 擴展)

如果使用 VS Code 中的 Claude 擴展,配置方法類似:

配置檔位置:

  • macOS: ~/Library/Application Support/Code/User/settings.json

  • Windows: %APPDATA%\Code\User\settings.json

  • Linux: ~/.config/Code/User/settings.json

配置內容:

{
  "claude.mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

CodePilot / 其他 MCP 客戶端

對於支援 MCP 協定的其他工具,通用配置範本:

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

配置參數說明

MCP Server 支援以下環境變數:

API 和快取相關:

參數

說明

預設值

LOG_LEVEL

日誌級別

INFO

MARKET_MCP_API_TIMEOUT

API 請求超時時間(秒)

10

MARKET_MCP_API_RETRIES

API 請求重試次數

5

MARKET_MCP_CACHE_TTL

快取存活時間(秒)

1800

MARKET_MCP_CACHE_MAX_SIZE

快取最大條目數

1000

MARKET_MCP_CACHE_MAX_MEMORY_MB

快取最大記憶體使用(MB)

200.0

MARKET_MCP_CACHING_ENABLED

是否啟用快取

true

限速相關:

參數

說明

預設值

MARKET_MCP_RATE_LIMIT_INTERVAL

每個股票的請求間隔(秒)

1.0

MARKET_MCP_RATE_LIMIT_GLOBAL_PER_MINUTE

全域每分鐘請求限制

200

MARKET_MCP_RATE_LIMIT_PER_SECOND

每秒請求限制

50

MARKET_MCP_RATE_LIMITING_ENABLED

是否啟用限速功能

false

監控相關:

參數

說明

預設值

MARKET_MCP_MONITORING_STATS_RETENTION_HOURS

統計資料保留時間(小時)

24

MARKET_MCP_MONITORING_CACHE_HIT_RATE_TARGET

快取命中率目標(百分比)

80.0

推薦配置範例(快速開始):

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO",
        "MARKET_MCP_API_TIMEOUT": "10",
        "MARKET_MCP_CACHE_TTL": "1800",
        "MARKET_MCP_CACHE_MAX_SIZE": "1000"
      }
    }
  }
}

高效能配置範例(啟用限速和監控):

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "INFO",
        "MARKET_MCP_API_TIMEOUT": "15",
        "MARKET_MCP_CACHE_TTL": "3600",
        "MARKET_MCP_CACHE_MAX_SIZE": "2000",
        "MARKET_MCP_CACHE_MAX_MEMORY_MB": "500",
        "MARKET_MCP_RATE_LIMITING_ENABLED": "true",
        "MARKET_MCP_RATE_LIMIT_INTERVAL": "2.0",
        "MARKET_MCP_RATE_LIMIT_GLOBAL_PER_MINUTE": "100"
      }
    }
  }
}

調試配置範例(詳細日誌):

{
  "mcpServers": {
    "casual-market": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/sacahan/CasualMarket", "casual-market-mcp"],
      "env": {
        "LOG_LEVEL": "DEBUG",
        "MARKET_MCP_API_TIMEOUT": "20",
        "MARKET_MCP_CACHE_TTL": "600",
        "MARKET_MCP_CACHING_ENABLED": "true"
      }
    }
  }
}

Docker 部署

除了 stdio 模式外,CasualMarket 也支援透過 Docker 容器化部署,並提供 SSE (Server-Sent Events) HTTP 介面。

快速啟動

方式 1: 使用預構建鏡像(推薦)

# 克隆專案
git clone https://github.com/sacahan/CasualMarket.git
cd CasualMarket

# 拉取並啟動
./scripts/docker-run.sh pull
./scripts/docker-run.sh up

# 查看日誌
./scripts/docker-run.sh logs

# 測試服務
./scripts/docker-run.sh test

方式 2: 本地構建

# 構建鏡像
./scripts/docker-run.sh build

# 啟動服務
DOCKER_IMAGE_NAME=casualmarket-mcp:latest ./scripts/docker-run.sh up

方式 3: Docker Compose

# 啟動服務
docker-compose up -d

# 停止服務
docker-compose down

服務端點

容器啟動後,可透過以下端點訪問:

  • 根端點: http://localhost:8000/ - 服務資訊

  • 健康檢查: http://localhost:8000/health - 服務狀態

  • SSE 端點: http://localhost:8000/sse - MCP 協議通訊(POST)

  • API 文檔: http://localhost:8000/docs - FastAPI 自動生成文檔

SSE 客戶端範例

import requests
import json

# 列出可用工具
response = requests.post(
    "http://localhost:8000/sse",
    json={
        "jsonrpc": "2.0",
        "id": 1,
        "method": "tools/list",
        "params": {}
    }
)

# 呼叫工具 - 查詢台積電股價
response = requests.post(
    "http://localhost:8000/sse",
    json={
        "jsonrpc": "2.0",
        "id": 2,
        "method": "tools/call",
        "params": {
            "name": "get_taiwan_stock_price",
            "arguments": {"symbol": "2330"}
        }
    }
)

完整的客戶端範例請參考 examples/sse_client_example.py

Docker 優勢

  • 依賴預先安裝: 所有套件在建構時下載完成,執行時無需等待

  • 多階段建構: 最小化映像檔大小

  • 健康檢查: 自動監控服務狀態

  • 持久化支援: 日誌和資料庫可掛載到 host 機器

  • 環境隔離: 與其他服務完全隔離

詳細的 Docker 部署說明請參閱 docs/DOCKER.md

核心功能

交易工具 (4個)

  • 即時股價查詢 - 股票代碼或公司名稱查詢

  • 模擬買入/賣出 - 完整的交易模擬,包含手續費和交易稅

  • 日交易統計 - 每日成交量、成交值、平均價格

財務分析工具 (6個)

  • 損益表/資產負債表 - 自動行業別偵測

  • 公司基本資料 - 董事長、資本額、員工數等

  • 股利分配歷史 - 殖利率、現金股利、股票股利

  • 月營收追蹤 - 營收數據與成長率

  • 估值比率 - PE、PB、ROE、殖利率等關鍵指標

  • 除權息行事曆 - 重要除權息日期提醒

交易統計工具 (3個)

  • 月交易統計 - 月度成交量、成交值、平均價格

  • 年交易統計 - 年度數據與年度漲跌幅

  • 月平均價格 - 包含加權平均、中位數等多維度分析

市場資訊工具 (5個)

  • 融資融券 - 市場籌碼面分析

  • 即時交易統計 - 5分鐘更新的市場數據

  • ETF排名 - 定期定額投資排名

  • 市場指數 - 發行量加權、未含金融等多種指數

  • 歷史指數 - 精選10個重要市場指標

節假日工具 (2個)

  • 國定假日查詢 - 台灣節假日詳細資訊

  • 交易日判斷 - 智慧判斷股市開盤狀態

外資分析工具 (3個)

  • 外資持股(按產業別) - 外資持股分布統計

  • 外資持股排名 - 外資持股前20名個股

  • 資金流向分析 - 外資買賣超數據

工具列表

工具名稱

描述

分類

get_taiwan_stock_price

即時股價查詢

交易

buy_taiwan_stock

模擬買入股票

交易

sell_taiwan_stock

模擬賣出股票

交易

get_stock_daily_trading

日交易統計

交易

get_company_income_statement

綜合損益表

財務

get_company_balance_sheet

資產負債表

財務

get_company_profile

公司基本資料

財務

get_company_dividend

股利分配資訊

財務

get_company_monthly_revenue

月營收資訊

財務

get_stock_valuation_ratios

估值比率

財務

get_dividend_rights_schedule

除權息行事曆

財務

get_stock_monthly_trading

月交易統計

統計

get_stock_yearly_trading

年交易統計

統計

get_stock_monthly_average

月平均價格

統計

get_margin_trading_info

融資融券資訊

市場

get_real_time_trading_stats

即時交易統計

市場

get_etf_regular_investment_ranking

ETF定期定額排名

市場

get_market_index_info

台灣加權指數

市場

get_market_historical_index

市場重要指數

市場

get_taiwan_holiday_info

節假日查詢

節假日

check_taiwan_trading_day

交易日判斷

節假日

get_foreign_investment_by_industry

外資持股(按產業別)

外資

get_top_foreign_holdings

外資持股前20名

外資

使用範例

以下是透過 Claude Desktop 或其他 MCP 客戶端使用這些工具的範例。

股票價格查詢

使用者提問:

"請查詢台積電目前的股價"

AI 回應: AI 會自動調用 get_taiwan_stock_price 工具,參數為 "台積電""2330",然後返回即時股價、漲跌幅、成交量等資訊。

工具調用:

{
  "tool": "get_taiwan_stock_price",
  "arguments": {
    "symbol": "2330"
  }
}

模擬交易

使用者提問:

"幫我模擬買入 1000 股台積電"

AI 回應: AI 會調用 buy_taiwan_stock 工具,計算手續費和總成本,並返回完整的交易結果。

工具調用:

{
  "tool": "buy_taiwan_stock",
  "arguments": {
    "symbol": "2330",
    "quantity": 1000
  }
}

限價交易範例:

"以每股 510 元的價格買入 2000 股台積電"

{
  "tool": "buy_taiwan_stock",
  "arguments": {
    "symbol": "2330",
    "quantity": 2000,
    "price": 510.0
  }
}

財務資訊查詢

使用者提問:

"請分析台積電的財務狀況,包括損益表和公司基本資料"

AI 回應: AI 會依序調用多個工具來獲取完整資訊:

  1. 公司基本資料

{
  "tool": "get_company_profile",
  "arguments": {
    "symbol": "2330"
  }
}
  1. 損益表

{
  "tool": "get_company_income_statement",
  "arguments": {
    "symbol": "2330"
  }
}
  1. 估值比率

{
  "tool": "get_stock_valuation_ratios",
  "arguments": {
    "symbol": "2330"
  }
}

綜合分析範例

使用者提問:

"我想了解台積電是否適合投資,請幫我分析股價、財務狀況、股利配息和外資持股情況"

AI 工作流程:

AI 會智慧地調用多個工具來完成綜合分析:

  1. 查詢即時股價 (get_taiwan_stock_price)

  2. 獲取公司基本資料 (get_company_profile)

  3. 查看估值比率 (get_stock_valuation_ratios)

  4. 檢查股利配息記錄 (get_company_dividend)

  5. 查詢外資持股前 20 名 (get_top_foreign_holdings)

  6. 分析月營收趨勢 (get_company_monthly_revenue)

然後將所有資訊整合,提供完整的投資建議。

市場統計

使用者提問:

"現在台股大盤的情況如何?"

AI 回應:

{
  "tool": "get_real_time_trading_stats",
  "arguments": {}
}

AI 會返回當前市場的即時統計,包括成交量、漲跌家數、漲停跌停股票等。

節假日與交易日判斷

使用者提問:

"2025年10月10日是交易日嗎?"

AI 回應:

{
  "tool": "check_taiwan_trading_day",
  "arguments": {
    "date": "2025-10-10"
  }
}

AI 會告訴你該日期是否為交易日,並說明原因(是否為週末或國定假日)。

對話式交互範例

完整對話流程:

使用者: "請幫我查詢鴻海的股價,如果股價低於 100 元,就模擬買入 2000 股"

AI 執行:

  1. 先調用 get_taiwan_stock_price("鴻海") 查詢股價

  2. 根據返回結果判斷價格

  3. 如果符合條件,調用 buy_taiwan_stock("2317", 2000)

  4. 整合結果並回覆使用者

使用者: "今天外資買超最多的是哪些股票?"

AI 執行:

  1. 調用 get_top_foreign_holdings() 獲取外資持股資訊

  2. 分析買賣超數據

  3. 整理並回覆前幾名的股票及買超金額

支援

許可證

MIT License - 詳見 LICENSE 檔案

重要提示

  • 本工具僅供學習和研究用途

  • 股票資料可能有延遲,請勿用於實際交易決策

  • 模擬交易功能不涉及真實資金

  • 使用本工具產生的結果需自行承擔風險

鳴謝


更新時間: 2025年10月22日
版本: 0.1.0

Available Tools

23 tools
buy_taiwan_stockA

模擬台灣股票買入操作。

執行模擬的股票買入交易,計算手續費、交易稅等費用。 注意:台股最小交易單位為1000股(1張)。

使用範例: buy_taiwan_stock("2330", 1000) # 市價買入1張台積電 buy_taiwan_stock("2330", 2000, 510.0) # 限價510元買入2張台積電

Args: symbol: 股票代碼 (例如: "2330") quantity: 購買股數,必須是1000的倍數 (台股最小單位為1000股) price: 指定價格 (可選,不指定則為市價)

Returns: MCPToolResponse[TradingResultData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (TradingResultData): 交易結果資訊,包含: * symbol: 股票代碼 * action: 交易動作 ("buy") * quantity: 交易股數 * price: 成交價格 * total_amount: 交易總金額 * fee: 手續費 * tax: 交易稅 * net_amount: 實際支付金額 * timestamp: 交易時間 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 交易失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 交易股數不符合規定(非1000的倍數) - 指定價格超出漲跌停限制 - 模擬交易系統異常

ParametersJSON Schema
NameRequiredDescriptionDefault
priceNo
symbolYes
quantityYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: it is a simulated (模擬) operation, computes fees and tax, enforces the 1000-share lot rule, and defines the exact return structure including all fields. It also lists specific error scenarios, providing complete transparency about what can go wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into purpose, examples, Args, Returns, and Raises sections. It is comprehensive without being bloated; every sentence adds value, and the critical lot-size rule is highlighted early and repeated in the args section for emphasis.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description is complete. It covers input semantics, return fields, error causes, and usage examples. An agent can invoke this tool correctly without needing additional external documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must and does compensate. It explains symbol (股票代碼), quantity (must be multiples of 1000), and optional price (defaults to market price), reinforced by concrete examples. Every parameter's meaning and constraints are fully detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: '模擬台灣股票買入操作' (simulate Taiwan stock buy operation) and details that it executes simulated buy transactions while calculating fees and taxes. It distinguishes itself from sibling tools like sell_taiwan_stock by the buy action, and from get_* tools which are read-only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for simulated buying, with examples showing how to use market and limit orders. It does not explicitly name alternatives or say when not to use it, but the buy vs. sell distinction is obvious from the tool name and sibling list, so the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_taiwan_trading_dayA

檢查台灣股市是否為交易日。

綜合考慮週末和國定假日,判斷指定日期是否為台灣股市的交易日。 台灣股市交易日條件:非週末且非國定假日。

使用範例: check_taiwan_trading_day("2025-01-01") # 元旦(非交易日) check_taiwan_trading_day("2025-10-06") # 中秋節(非交易日) check_taiwan_trading_day("2025-10-07") # 一般工作日(交易日) check_taiwan_trading_day("2025-10-11") # 週六(非交易日)

Args: date: 要檢查的日期,格式為 YYYY-MM-DD (例如: "2025-01-01")

Returns: MCPToolResponse[TradingDayStatusData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (TradingDayStatusData): 交易日狀態資訊,包含: * date: 查詢日期 * is_trading_day: 是否為交易日 * is_weekend: 是否為週末 * is_holiday: 是否為國定假日 * holiday_name: 節假日名稱(如果是節假日) * reason: 不是交易日的原因(如果不是交易日) - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 日期格式錯誤 - API 服務異常 - 網路連線問題

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the response structure, success/error fields, possible failure reasons, and example outcomes. It does not mention authorization or rate limits, but for a read-only date-checking tool the behavior is described sufficiently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with purpose, examples, arguments, returns, and error conditions. It front-loads the core purpose and each section adds necessary information. Although lengthy, the length is justified because there is no output schema and the return structure must be explained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only date check with no annotations and no output schema, the description is essentially complete: it gives the input format, the decision logic, examples, return fields, and error scenarios. The only minor gap is distinguishing it from get_taiwan_holiday_info, which was already reflected in the usage-guidelines score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only declares 'date' as a string with no description, giving 0% schema coverage. The description compensates fully by specifying the YYYY-MM-DD format, providing concrete examples, and explaining the parameter purpose. This is exactly the kind of compensation needed for a single low-information schema parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks whether a given date is a Taiwan stock market trading day, with specific conditions (not weekend, not holiday). It is unambiguous and distinct in function from price/order tools, but it does not explicitly differentiate itself from the sibling get_taiwan_holiday_info, so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives examples and explains the trading-day condition, making the intended use clear. However, it does not explicitly say when to prefer this tool over alternatives such as get_taiwan_holiday_info, nor does it describe exclusions or edge cases like makeup workdays or rescheduled holidays.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_balance_sheetA

取得上市公司資產負債表。

自動偵測公司所屬行業並使用相應的財務報表格式。 不同行業的資產負債表科目會有所不同,系統會自動適配。

使用範例: get_company_balance_sheet("2330") # 查詢台積電資產負債表 get_company_balance_sheet("2884") # 查詢玉山金資產負債表

Args: symbol: 公司股票代碼 (例如: "2330")

Returns: MCPToolResponse[dict]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (dict): 資產負債表資訊,包含: * report_period: 報告期間 * total_assets: 總資產 * current_assets: 流動資產 * non_current_assets: 非流動資產 * total_liabilities: 總負債 * current_liabilities: 流動負債 * non_current_liabilities: 非流動負債 * equity: 股東權益 * book_value_per_share: 每股淨值 * debt_to_equity_ratio: 負債權益比 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 公司代碼不存在 - 財報資料尚未公布 - OpenAPI 服務異常

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and goes beyond a bare summary: it discloses automatic industry-specific report adaptation, the unified MCPToolResponse envelope, the exact data fields, and likely failure causes. This is strong behavioral context, though it stops short of discussing data freshness or external service dependencies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized with purpose first, then usage examples, parameters, returns, and errors. It is somewhat long, but every section adds information that the schema and annotations do not provide, so the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description supplies the return shape, error conditions, and examples, making it largely complete. It lacks only comparative information about when to use the other financial-statement tools and any mention of units/currency, but those are minor given the clear domain context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must define the symbol parameter; it does so clearly ('公司股票代碼') and reinforces with two real ticker examples. It could add more rules like leading-zero handling, but for a single string parameter the intent is unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence '取得上市公司資產負債表' states a specific operation and resource, and the financial-statement type clearly differentiates it from siblings like get_company_income_statement. The industry-adaptation note further clarifies what the returned balance sheet covers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete invocation examples but provides no guidance on when to choose this tool over siblings (e.g., get_company_income_statement) or what problem it solves that others don't. Usage context is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_dividendA

取得公司股利分配資訊。

提供公司歷年股利分配記錄,包括現金股利、股票股利、 除息日期、發放日期等完整股利資訊。

使用範例: get_company_dividend("2330") # 查詢台積電股利資訊 get_company_dividend("0050") # 查詢0050 ETF配息資訊

Args: symbol: 公司股票代碼 (例如: "2330")

Returns: MCPToolResponse[DividendData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (DividendData): 股利分配資訊,包含: * symbol: 股票代碼 * dividend_history: 歷年股利列表,每項包含: - year: 配息年度 - cash_dividend: 現金股利 - stock_dividend: 股票股利 - total_dividend: 總股利 - dividend_yield: 殖利率 - ex_dividend_date: 除息日 - payment_date: 發放日 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 公司代碼不存在 - 尚無股利分配記錄 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on the full burden of behavioral disclosure. It documents the return envelope, nested dividend fields, and common failure modes such as invalid symbols, missing dividend records, and temporary source unavailability. It stops short of specifying currency units, date formats, or explicitly confirming read-only behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The docstring-style organization with Args, Returns, and Raises sections makes the definition easy to parse. Every major section adds value, especially given the absence of annotations and output schema. The opening sentence is slightly redundant with the following explanation, but overall the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter lookup, the description is fairly complete: it covers purpose, expected inputs, return structure, field meanings, and error conditions. The main gaps are explicit sibling differentiation and some formatting/unit details, but an agent can still invoke the tool correctly and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the single parameter 'symbol' is clearly defined as a stock code and illustrated with '2330' and '0050'. This is adequate for a one-parameter tool, though it does not specify constraints like numeric-only formats or whether ETF codes are supported beyond the example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action and resource: retrieving a company's dividend distribution history, including cash dividends, stock dividends, ex-dividend dates, and payment dates. It is easily distinguishable from most price/income/financial-statement siblings, though it does not explicitly contrast itself with get_dividend_rights_schedule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the description and concrete examples, such as get_company_dividend("2330"). However, the description does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or edge cases like unsupported symbol formats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_income_statementA

取得上市公司綜合損益表。

自動偵測公司所屬行業並使用相應的財務報表格式。 支援不同行業的特殊會計科目和計算方式。

支援行業別:

  • 一般業:製造業、科技業等傳統產業

  • 金融業:銀行、證券、期貨等金融機構

  • 金控業:金融控股公司

  • 保險業:壽險、產險等保險公司

  • 異業:其他特殊行業

使用範例: get_company_income_statement("2330") # 查詢台積電(一般業) get_company_income_statement("2884") # 查詢玉山金(金控業) get_company_income_statement("2886") # 查詢兆豐金(金控業)

Args: symbol: 公司股票代碼 (例如: "2330")

Returns: MCPToolResponse[dict]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (dict): 綜合損益表資訊,包含: * report_period: 報告期間 * revenue: 營業收入 * operating_cost: 營業成本 * gross_profit: 毛利 * operating_expense: 營業費用 * operating_income: 營業利益 * non_operating_income: 營業外收入 * pre_tax_income: 稅前淨利 * net_income: 稅後淨利 * eps: 每股盈餘 * industry_specific_items: 行業特有科目 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 公司代碼不存在 - 財報資料尚未公布 - OpenAPI 服務異常 - 行業別偵測失敗

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it largely fulfills it. It discloses the industry-detection behavior (自動偵測公司所屬行業並使用相應的財務報表格式), lists supported industry categories, details the complete return structure, and explicitly enumerates likely error reasons. The main gap is that it does not state whether the operation is read-only or if any side effects exist, but for a lookup tool this is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but every section earns its place: purpose, industry support, examples, parameter spec, return format, and error conditions. It is well-structured with clear headers and code blocks, making it scannable despite the length. A small reduction from 5 because the Returns section could arguably be compressed given the absence of an output schema still justifies its detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, the description is remarkably complete. It covers what the tool does, how it behaves across industries, the exact return structure with field names, and the possible error scenarios. An agent has everything needed to invoke it correctly and interpret the result without external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It does: the Args section clearly defines symbol as '公司股票代碼' with the example '2330', and the usage examples provide concrete values for different industry contexts. With only one parameter, this is complete and actionable guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: '取得上市公司綜合損益表' (obtain listed company income statement), which is unambiguous. It distinguishes itself from siblings like get_company_balance_sheet by naming the exact financial statement type and adding the industry-detection behavior, making the tool's scope immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the tool's name and the examples showing common stock symbols, and it explains the industry-specific formatting behavior. However, it does not explicitly state when to prefer this tool over siblings such as get_company_balance_sheet or get_company_profile, nor does it provide exclusion criteria or alternative recommendations. Usage context is clear but not actively differentiated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_monthly_revenueA

取得公司月營收資訊。

提供公司每月營收數據,包括當月營收、年增率、月增率等, 是觀察公司營運狀況的重要指標。

使用範例: get_company_monthly_revenue("2330") # 查詢台積電月營收 get_company_monthly_revenue("2454") # 查詢聯發科月營收

Args: symbol: 公司股票代碼 (例如: "2330")

Returns: MCPToolResponse[MonthlyRevenueData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (MonthlyRevenueData): 月營收資訊,包含: * symbol: 股票代碼 * revenue_data: 月營收列表,每項包含: - year_month: 年月 (YYYY-MM) - revenue: 當月營收 - monthly_growth: 月增率 (%) - yearly_growth: 年增率 (%) - cumulative_revenue: 累計營收 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 公司代碼不存在 - 月營收資料尚未公布 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently describes the return envelope (success, data, error, tool), the structure of the nested revenue_data list, and clearly states that failures are returned as error responses with possible causes such as invalid symbol, unpublished data, or source unavailability. This goes beyond minimal expectations, though it does not disclose details like data freshness or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for summary, examples, Args, Returns, and Raises, and important information is front-loaded in the first sentence. While the first two sentences are slightly redundant, every subsequent section provides useful detail without fluff. The overall length is justified by the absence of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema and no annotations, the description fulfills the full burden by detailing the return value structure (success, data, error, tool), the nested revenue items with their fields, and failure modes. For a simple one-parameter query tool, this is complete enough for an agent to invoke the tool correctly and interpret the response without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a bare string parameter 'symbol' with 0% schema description coverage. The description compensates by defining symbol as '公司股票代碼' and giving concrete examples ('2330' for TSMC, '2454' for MediaTek). This gives an agent enough semantic understanding to format the argument correctly, though it could add format constraints such as numeric string length or exchange rules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb '取得' (get) and the resource '公司月營收資訊' (company monthly revenue information), and expands on the specific data points included (revenue, YoY growth, MoM growth). This distinguishes it from sibling tools like get_company_income_statement or get_stock_monthly_trading by focusing on monthly revenue data rather than broader financial statements or trading statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage is appropriate when querying monthly revenue data of a company, with examples for specific stock symbols. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or conditions, so the guidance remains implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_profileA

取得上市公司基本資訊。

提供公司的基本概況,包括公司名稱、行業別、董事長、 成立日期、實收資本額、員工人數等基本資料。

使用範例: get_company_profile("2330") # 查詢台積電基本資訊 get_company_profile("2317") # 查詢鴻海基本資訊

Args: symbol: 公司股票代碼 (例如: "2330")

Returns: MCPToolResponse[CompanyProfileData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (CompanyProfileData): 公司基本資訊,包含: * symbol: 股票代碼 * company_name: 公司全名 * industry: 所屬行業 * chairman: 董事長姓名 * established: 成立日期 * capital: 實收資本額 * employees: 員工人數 * website: 公司官網 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 公司代碼不存在或已下市 - 資料來源暫時無法存取 - 公司資訊尚未更新

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains the return envelope structure (success, data, error, tool), the fields within CompanyProfileData, and the possible failure reasons such as delisted symbols or unavailable data sources. Since this is a read-only lookup, the '取得/查詢' verbs and lack of side-effect warnings sufficiently convey behavior, though it stops short of explicitly stating that no data is mutated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although the description is somewhat long, it is well-structured into overview, usage examples, Args, Returns, and Raises sections. Every part earns its place because there is no output schema and no annotations to rely on; the format makes it easy to scan and parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with no output schema, the description is complete: it specifies the input format, the expected data fields, the response envelope, and the error conditions. There is no missing information an agent would need to call this tool correctly and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the schema only says 'symbol' is a required string. The description compensates fully by defining symbol as '公司股票代碼' with '2330' and '2317' examples and showing exactly how to call the function. This adds meaning the schema alone cannot provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: '取得上市公司基本資訊' (get basic information for a listed company), and then enumerates the exact fields returned, such as company name, industry, chairman, established date, capital, and employees. This clearly distinguishes it from sibling tools that cover income statements, balance sheets, dividends, and other financial-specific data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining that this tool returns company basic profile data and gives concrete usage examples with real Taiwan stock symbols. It does not explicitly state when not to use it or name alternative tools, but the scope is clear enough that an agent can infer it is for basic company information rather than financial statements or trading operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dividend_rights_scheduleA

取得除權息行事曆。

提供上市公司的除權息相關日期資訊,包括除權息交易日、 停止過戶日、股東會日期等重要時程。

使用範例: get_dividend_rights_schedule() # 查詢所有公司除權息行事曆 get_dividend_rights_schedule("2330") # 查詢台積電除權息行事曆 get_dividend_rights_schedule("0050") # 查詢0050除權息行事曆

Args: symbol: 股票代碼 (可選,空字串或不提供則查詢全部)

Returns: MCPToolResponse[DividendScheduleData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data: 除權息行事曆資訊列表,每項包含: * symbol: 股票代碼 * company_name: 公司名稱 * ex_dividend_date: 除權息交易日 * cash_dividend: 現金股利 * stock_dividend: 股票股利 * record_date: 停止過戶日 * payment_date: 發放日 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 指定的股票代碼不存在 - 尚無除權息資料 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses error conditions such as nonexistent symbol, no data available, and data source unavailability, plus explains the return envelope structure (success, data, error, tool). With no annotations provided, this meaningful behavioral context helps the agent anticipate failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with sections for overview, examples, args, returns, and errors. It is somewhat long but every section provides necessary context for an agent to use the tool correctly. The primary functionality is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single optional parameter, no annotations, and no output schema, the description covers the call pattern, the return data fields, and failure scenarios. It does not specify the exact date format or whether the returned data is sorted by date, but these are minor gaps for a schedule-listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only states symbol is a string with default empty. The description adds meaning by explaining its optionality: leaving it empty or omitting it queries all companies, while providing a ticker queries that specific company. Examples with 2330 and 0050 reinforce the expected format. With 0% schema coverage, the description carries the full burden and largely succeeds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a dividend rights schedule (除權息行事曆) and lists the specific information included: ex-dividend dates, record dates, cash/stock dividends, and payment dates. This is distinct from sibling tools like get_company_dividend and get_taiwan_stock_price, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage examples show calling with no arguments for all companies or with a symbol for a specific company. It does not explicitly say when to use this instead of get_company_dividend, which appears to be the closest sibling, so it lacks an explicit alternative comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_etf_regular_investment_rankingA

取得ETF定期定額排名資訊。

提供ETF定期定額投資人數排名,反映一般投資人偏好的ETF標的, 可作為ETF投資參考指標,資料顯示前10名熱門標的。

使用範例: get_etf_regular_investment_ranking() # 查詢ETF定期定額排名

Args: 無參數

Returns: MCPToolResponse[ETFRankingData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data: ETF排名資訊列表(前10名),每項包含: * rank: 排名 * symbol: ETF代碼 * name: ETF名稱 * investment_amount: 投資金額 * investor_count: 定期定額人數 * average_investment: 平均投資金額 * monthly_growth: 月成長率 (%) - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱 - metadata: 包含報告期間等額外資訊

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 排名資料尚未更新 - 資料來源暫時無法存取 - 服務暫時異常

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly explains the data scope (top 10), the response structure, and possible error reasons, which is strong for a read-only ranking tool. It does not explicitly state 'read-only', but the nature of a get operation is clear and it adds meaningful context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for Args, Returns, and Raises, and it front-loads the purpose. It is somewhat verbose with the full return field list, but since there is no output schema, this information is necessary and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter query tool with no annotations and no output schema, the description is remarkably complete: it explains the purpose, usage example, return fields, and error conditions. An agent has everything it needs to invoke the tool correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters, and the description explicitly confirms '無參數' along with an invocation example. The baseline for zero parameters is 4, and the description fully compensates by removing any ambiguity about arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('取得' / get) and resource ('ETF定期定額排名資訊'), and explains that it returns a ranking of regular ETF investment by investor count. It distinguishes itself from sibling tools by naming the exact data type and top-10 scope, so an agent can identify its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a general use case ('可作為ETF投資參考指標') and a usage example, but it does not explicitly state when to use this tool versus alternatives or when not to use it. The usage context is implied rather than explicitly contrasted with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_foreign_investment_by_industryA

取得外資持股(按產業別)。

提供外資在各產業的持股狀況統計,包括持股比重、買賣超金額等, 可用於觀察外資對不同產業的偏好與資金流向。

使用範例: get_foreign_investment_by_industry() # 查詢外資前10個產業持股(預設) get_foreign_investment_by_industry(count=5) # 查詢外資前5個產業持股 get_foreign_investment_by_industry(count=20) # 查詢外資前20個產業持股

Args: count (int): 限制返回的產業數量,預設為10個產業

Returns: MCPToolResponse[ForeignInvestmentByIndustryData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data: 外資產業持股資訊,包含: * industry_foreign_investment: 產業列表,每項包含: - 產業別: 產業名稱 - 外資持股: 外資持股相關數據 - 買賣超: 買賣超金額等資訊 * total_industries: 總產業數量 * displayed_industries: 顯示的產業數量 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 非交易日無資料 - 資料來源暫時無法存取 - 服務暫時異常

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It signals a read-style query through '查詢' and '取得' and documents failure modes (non-trading day, source unavailable, service error). It does not explicitly state 'read-only' or side-effect-free, but for a data-retrieval tool the verb choice is sufficiently clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Examples, Args, Returns, Raises) and is front-loaded with the core purpose. Every section adds information not present in the schema, and the length is justified by the absence of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no annotations and no output schema, the description covers purpose, parameter semantics, call examples, return structure, and error conditions. Nothing an agent needs to invoke and interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates: it explains the count parameter's meaning, default value (10), and provides three usage examples (count=5, 10, 20). The schema only declares integer and default, so the description is the sole source of semantic content for the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource pair ('取得外資持股') and immediately scopes it by industry ('按產業別'), then lists the metrics captured (持股比重, 買賣超). This distinguishes it from sibling get_top_foreign_holdings, which addresses holdings at a different granularity, and makes the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states an explicit use case ('可用於觀察外資對不同產業的偏好與資金流向') and provides multiple parameterized examples showing intended call patterns. However, it does not explicitly mention alternative tools or state when not to use it, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_margin_trading_infoA

取得融資融券資訊。

提供市場整體及個股的融資融券統計資料,包括融資餘額、 融券餘額、資券相抵等,可用於觀察市場籌碼面變化。

使用範例: get_margin_trading_info() # 查詢融資融券資訊

Args: 無參數

Returns: MCPToolResponse[MarginTradingData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (MarginTradingData): 融資融券資訊,包含: * trading_date: 資料日期 * financing: 融資資訊 - balance: 融資餘額 (億元) - daily_buy: 今日融資買進 - daily_sell: 今日融資賣出 - net_change: 淨變化 - utilization_rate: 使用率 (%) * securities_lending: 融券資訊 - balance: 融券餘額 (億元) - daily_lend: 今日融券借出 - daily_return: 今日融券返還 - net_change: 淨變化 - utilization_rate: 使用率 (%) * margin_trading_summary: 整體摘要 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 非交易日無資料 - 資料來源暫時無法存取 - 服務暫時異常

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral transparency burden. It explains the unified response format, enumerates return fields, and lists realistic failure scenarios including non-trading days and temporary service problems. The only gap is ambiguity about how '個股' data is delivered when the tool has no parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into clear sections: summary, usage example, args, returns, and raises. The usage example is slightly redundant, but the detailed Returns and Raises sections justify the length because there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument read tool, the description covers the key information an agent needs: what data is returned, the structure of the response, and likely failure conditions. The main omission is clarifying whether individual-stock data is returned or how to access it, given the claim about '個股' with zero parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and the description explicitly states '無參數', so there is no parameter ambiguity. With zero parameters, the baseline is 4, and the description confirms the absence rather than requiring the agent to infer it from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource ('融資融券資訊') and the scope ('市場整體及個股'), and explains the intended analytical use ('觀察市場籌碼面變化'). This makes it distinguishable from siblings such as price, revenue, or foreign-holdings tools, though it does not explicitly name any sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when margin trading statistics such as financing balance, short-selling balance, and offset ratio are needed. It does not explicitly mention when not to use it or name alternatives, but the use case is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_historical_indexA

取得市場重要指數資料。

精選10個最重要的市場指數,提供完整的市場概覽:

  1. 發行量加權股價指數 - 台灣股市大盤主指數

  2. 未含金融指數 - 排除金融股的市場指數

  3. 未含電子指數 - 排除電子股的市場指數

  4. 臺灣50指數 - 台灣市值前50大企業指數

  5. 臺灣中型100指數 - 台灣中型企業代表指數

  6. 電子工業類指數 - 電子產業整體表現

  7. 金融保險類指數 - 金融保險產業指數

  8. 半導體類指數 - 半導體產業指數

  9. 電腦及週邊設備類指數 - 電腦硬體產業指數

  10. 通信網路類指數 - 通訊網路產業指數

使用範例: get_market_historical_index() # 查詢市場重要指數

Args: 無參數

Returns: MCPToolResponse[dict]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (dict): 市場指數資料,包含: * indices: 指數列表(10個),每項包含: - 日期: 資料日期 - 指數: 指數名稱 - 收盤指數: 收盤點數 - 漲跌: 漲跌符號 - 漲跌點數: 漲跌點數 - 漲跌百分比: 漲跌幅百分比 - 特殊處理註記: 特殊狀況註記 * count: 指數數量 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱 - metadata: 包含資料來源等額外資訊

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 資料來源暫時無法存取 - 無法取得市場指數資料

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does a solid job: it details the exact return structure, error conditions, and source metadata. It also implicitly communicates read-only behavior through the verb '取得'. It stops short of stating frequency, latency, or historical depth, but this is a strong disclosure for a simple read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (purpose, index list, usage, args, returns, raises) and the purpose statement is front-loaded. The 10-index list is valuable context, though the usage example more or less repeats the first line, adding slight redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema and no annotations, the description goes far beyond a bare phrase by documenting the full return structure and possible errors. It lacks details on time range or rendering order, but for a no-parameter tool that returns a known set of indices, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, which earns a baseline of 4. The description explicitly confirms 'Args: 無參數' and shows a call with empty parentheses, leaving no ambiguity for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('取得' market index data) and the resource ('市場重要指數資料'), and enumerates the 10 specific indices included. However, it does not explicitly differentiate itself from the sibling tool get_market_index_info, such as noting that this returns historical data while the other does not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a basic usage example but gives no guidance on when to use this tool versus alternative market index tools. There is no mention of exclusions or conditions that would route an agent to a sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_index_infoA

取得台灣加權指數資訊。

提供台灣股市最主要的「發行量加權股價指數」即時資訊, 包括指數點數、漲跌幅等關鍵數據。

使用範例: get_market_index_info() # 查詢發行量加權股價指數

Args: 無參數

Returns: MCPToolResponse[dict]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (dict): 發行量加權股價指數資訊,包含: * 日期: 資料日期 * 指數: 指數名稱 * 收盤指數: 收盤點數 * 漲跌: 漲跌符號 * 漲跌點數: 漲跌點數 * 漲跌百分比: 漲跌幅百分比 * 特殊處理註記: 特殊狀況註記 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱 - metadata: 包含資料來源等額外資訊

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 非交易時段 - 資料來源暫時無法存取 - 發行量加權股價指數資料不存在

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it does substantial work: it details the unified response envelope (success, data, error, tool, metadata), enumerates the exact fields returned, and lists three concrete failure modes (non-trading hours, source unavaidable, missing data). It only omits minor behaviors like possible data latency or cacheing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into clear sections (summary, usage example, args, returns, raises), and the core purpose is front-loaded in the first line. The Returns section is verbose, but that length is justified by the absence of an output schema — it substitutes for structured documentation. Every section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and no annotations, the description is highly complete: it replaces the missing output schema with a field-by-field return breakdown and documents error conditions. The only noticeable gap is the lack of explicit differentiation from get_market_historical_index, but nothing an agent needs to invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the baseline is 4. The description explicitly states 無參數 (no parameters) and shows the exact invocation syntax get_market_index_info(), so there is zero ambiguity about the call contract. No additional parameter semantics could be expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (取得/retrieve) and a precisely identified resource (發行量加權股價指數, Taiwan's main stock market index), and clarifies it provides 即時資訊 (real-time information). This sufficiently distinguishes it from the sibling get_market_historical_index, which covers historical data. An agent can confidently select this tool for current weighted-index quotes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description shows a concrete usage example and states it queries real-time index data, which implies appropriate usage. However, it never names alternatives — notably the sibling get_market_historical_index — or states when NOT to use this tool. Explicit routing such as 'for historical index data use get_market_historical_index' would elevate this.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_real_time_trading_statsA

取得即時交易統計資訊。

提供市場即時交易狀態,包括當盤成交量、成交金額、 漲跌家數分布等,資料每5分鐘更新一次。

使用範例: get_real_time_trading_stats() # 查詢即時交易統計

Args: 無參數

Returns: MCPToolResponse[TradingStatsData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (TradingStatsData): 即時交易統計資訊,包含: * update_time: 資料更新時間 * market_status: 市場狀態 * total_volume: 總成交量 (億股) * total_value: 總成交金額 (億元) * transaction_count: 總成交筆數 * advancing_stocks: 上漲家數 * declining_stocks: 下跌家數 * unchanged_stocks: 平盤家數 * limit_up_stocks: 漲停家數 * limit_down_stocks: 跌停家數 * top_gainers: 漲幅前幾名列表 * top_losers: 跌幅前幾名列表 * active_stocks: 成交量前幾名列表 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 非交易時段 - 資料來源暫時無法存取 - 服務暫時異常

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It explicitly states the 5-minute update interval, potential failure conditions (非交易時段、資料來源暫時無法存取、服務暫時異常), and the complete response structure. This is thorough transparency for a zero-parameter read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into Usage, Args, Returns, and Raises sections. The lengthy Returns section is justified because no output schema is present, so all return fields need documentation. The only minor redundancy is rephrasing the purpose in the usage example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description documents all return fields, units, wrapper structure, and error scenarios, making external documentation unnecessary. For a zero-parameter read-only tool, this is comprehensive enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the empty input schema already documents this. The description reinforces it with '無參數' and a usage example, adding confirmation without introducing ambiguity. Since there are no parameters to explain, the baseline score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: '取得即時交易統計資訊' and enumerates concrete market-wide metrics such as 當盤成交量、成交金額、漲跌家數分布. This clearly distinguishes the tool from sibling tools that focus on individual stocks, historical data, or index quotes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is clear from the word '即時' and the note '資料每5分鐘更新一次', implying this tool is for current market-wide trading statistics. It does not explicitly name alternatives or state when not to use it, but the context is unambiguous enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_daily_tradingA

取得股票日交易統計資訊。

提供指定股票當日的詳細交易統計,包括成交量、成交金額、 委買委賣資訊等交易面數據。

使用範例: get_stock_daily_trading("2330") # 查詢台積電日交易資訊 get_stock_daily_trading("0050") # 查詢0050 ETF日交易資訊

Args: symbol: 股票代碼 (例如: "2330")

Returns: MCPToolResponse[dict]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (dict): 日交易統計資訊,包含: * trading_date: 交易日期 * total_volume: 總成交量 * total_value: 總成交金額 * transaction_count: 成交筆數 * average_price: 平均成交價 * bid_ask_spread: 買賣價差 * market_cap: 市值 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 非交易日或市場尚未開盤 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It thoroughly discloses the return envelope (success, data, error, tool), enumerates the data fields within data, and lists realistic error causes (nonexistent symbol, non-trading day, source unavailable). It does not cover read-only guarantees, authentication, or rate limits, but the return and error behavior is well specified for a GET-style data query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into clear sections (overview, examples, Args, Returns, Raises) with the primary purpose front-loaded. The first two sentences are somewhat redundant ('取得股票日交易統計資訊' vs '提供指定股票當日的詳細交易統計'), but overall the length is justified by the detailed return-field enumeration and error logging.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description provides everything an agent needs to invoke it correctly: parameter meaning, example calls, full return structure and field names, and likely failure scenarios. There is no missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema merely defines symbol as a required string with no description (0% coverage). The description compensates fully by defining the parameter as '股票代碼' (stock symbol) and providing two concrete examples ('2330', '0050'). This leaves no ambiguity about what value to supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with an explicit verb and resource: '取得股票日交易統計資訊' (retrieve stock daily trading statistics). It then details the data covered (成交量, 成交金額, 委買委賣資訊) and gives concrete examples. The '日' (daily) qualifier distinguishes it from sibling tools like get_stock_monthly_trading, get_stock_yearly_trading, and get_real_time_trading_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through examples and the phrase '當日' (current day), which signals this tool is for daily end-of-day trading statistics. However, the description does not explicitly state when to prefer this tool over alternatives or mention any exclusion conditions, so the agent must infer routing from sibling names and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_monthly_averageA

取得股票月平均價格。

計算股票每月的平均成交價格,可用於觀察價格趨勢、 技術分析參考,以及定期定額投資績效評估。

使用範例: get_stock_monthly_average("2330") # 查詢台積電月均價 get_stock_monthly_average("0050") # 查詢0050月均價

Args: symbol: 股票代碼 (例如: "2330")

Returns: MCPToolResponse[MonthlyAverageData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (MonthlyAverageData): 月平均價格資訊,包含: * symbol: 股票代碼 * monthly_averages: 月平均列表,每項包含: - year_month: 年月 (YYYY-MM) - average_price: 月平均成交價 - weighted_average: 加權平均價 - median_price: 中位數價格 - volume_weighted_price: 成交量加權價 - trading_days: 交易日數 - monthly_change: 月變化百分比 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 月均價資料尚未計算 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does a good job: it documents the MCPToolResponse wrapper, nested data fields, and failure reasons. It still doesn't mention data freshness, delivery window, or authentication expectations, but for a read-only data query it is fairly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is well-organized with sections (purpose, examples, args, returns, raises) and front-loaded. It is a bit repetitive in the opening sentences and longer than necessary in the return list, but the detail is useful since there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter query with no output schema and no annotations, the description is complete: input semantics, usage examples, full return structure, nested fields, and likely error causes are all present. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the lone parameter. It defines symbol as 股票代碼 and gives real examples ('2330', '0050'), fully compensating for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves/calculates monthly average transaction prices for a stock, which is a specific verb+resource. It is implicitly distinct from monthly trading-volume siblings by focusing on average price, but it does not explicitly name or contrast an alternative sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit use contexts (trend observation, technical analysis, regular-amount investment performance) and a concrete invocation example. It lacks 'when not to use' or explicit alternative routing, so it does not reach 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_monthly_tradingA

取得股票月交易資訊。

提供股票每月的交易統計資料,包括月成交量、月成交金額、 月均價、最高最低價等,適合中長期趨勢分析。

使用範例: get_stock_monthly_trading("2330") # 查詢台積電月交易資訊 get_stock_monthly_trading("0050") # 查詢0050月交易資訊

Args: symbol: 股票代碼 (例如: "2330")

Returns: MCPToolResponse[MonthlyTradingData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (MonthlyTradingData): 月交易資訊,包含: * symbol: 股票代碼 * monthly_data: 月交易列表,每項包含: - year_month: 年月 (YYYY-MM) - total_volume: 月成交量 - total_value: 月成交金額 - average_price: 月均價 - highest_price: 月最高價 - lowest_price: 月最低價 - trading_days: 交易日數 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 月交易資料尚未彙整 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full transparency burden. It discloses the unified response envelope, success flag, data structure, and monthly record fields, making the read-only retrieval behavior clear. No hidden side effects or mutations are suggested.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a brief purpose statement, usage examples, and a structured Returns list. It is slightly repetitive by repeating '月交易資訊' in adjacent sentences, but the main purpose is front-loaded and the content earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema and no annotations, the description covers invocation, parameter meaning, return structure, and expected fields. It does not mention sorting order or historical depth of monthly data, but those are not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description compensates by explaining that symbol is a stock code and by giving two concrete examples ('2330', '0050'). This is sufficient for the single required parameter, though it does not specify formatting constraints or market scope.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves monthly trading statistics for a stock, including monthly volume, value, average price, and high/low prices. It is specific about the resource and scope, but it does not explicitly differentiate itself from sibling tools such as get_stock_daily_trading or get_stock_yearly_trading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a usage hint ('適合中長期趨勢分析') and concrete invocation examples, implying when the tool is appropriate. However, it does not explicitly state when to prefer this tool over alternatives like get_stock_daily_trading, get_stock_yearly_trading, or get_stock_monthly_average, nor does it provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_valuation_ratiosA

取得股票估值比率分析。

提供股票的關鍵估值指標,包括本益比、股價淨值比、殖利率等, 幫助投資人評估股票的投資價值。

使用範例: get_stock_valuation_ratios("2330") # 查詢台積電估值比率 get_stock_valuation_ratios("2454") # 查詢聯發科估值比率

Args: symbol: 股票代碼 (例如: "2330")

Returns: MCPToolResponse[ValuationRatiosData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (ValuationRatiosData): 估值比率資訊,包含: * symbol: 股票代碼 * pe_ratio: 本益比 (Price-to-Earnings) * pb_ratio: 股價淨值比 (Price-to-Book) * dividend_yield: 殖利率 * roe: 股東權益報酬率 * eps: 每股盈餘 * book_value: 每股淨值 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 財務數據不完整 - 計算數據暫時無法取得

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure, and it handles this well: it describes the unified MCPToolResponse envelope, the specific data fields, and the error conditions (invalid symbol, incomplete financial data, temporarily unavailable calculations). It does not mention rate limits or auth, but these are not pressing for a read-only single-parameter retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a front-loaded purpose, usage examples, Args, Returns, and Raises sections. Although lengthy, every part adds value, especially given there is no output schema or annotations to lean on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, the description is unusually complete: it states exactly what is returned, the shape of the response, the error causes, and how to invoke it. Nothing needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only declares a string 'symbol' with zero description coverage, so the description must compensate. It fully does: it names the parameter, explains it as a stock code, and provides two concrete usage examples ('2330', '2454') that establish expected format and semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the operation ('取得股票估值比率分析') and specifies the exact resource: valuation ratios (P/E, P/B, dividend yield). It further enumerates the returned metrics, making it unambiguous what the tool does and how it differs from the many sibling tools focused on prices, trading, income statements, or dividends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool—when a user needs valuation metrics to assess stock investment value—and provides concrete examples. However, it does not explicitly contrast with sibling tools or state when not to use it, so the routing guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_yearly_tradingA

取得股票年交易資訊。

提供股票每年的交易統計資料,包括年成交量、年成交金額、 年均價、年度漲跌幅等,適合長期投資分析與歷史回顧。

使用範例: get_stock_yearly_trading("2330") # 查詢台積電年交易資訊 get_stock_yearly_trading("2454") # 查詢聯發科年交易資訊

Args: symbol: 股票代碼 (例如: "2330")

Returns: MCPToolResponse[YearlyTradingData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (YearlyTradingData): 年交易資訊,包含: * symbol: 股票代碼 * yearly_data: 年交易列表,每項包含: - year: 年度 - total_volume: 年成交量 - total_value: 年成交金額 - average_price: 年均價 - highest_price: 年最高價 - lowest_price: 年最低價 - trading_days: 交易日數 - year_change_percent: 年度漲跌幅 (%) - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 年交易資料尚未彙整 - 資料來源暫時無法存取

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It clarifies the operation is a read-only query ('查詢'/'取得'), describes the MCPToolResponse envelope and all nested data fields, and lists likely failure causes such as invalid symbol, missing aggregated data, and temporary source unavailability. Minor omissions like rate limits or authentication are not material for this simple query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with purpose, examples, Args, Returns, and Raises sections. The detailed return-field breakdown is justified because there is no output schema, so it adds essential value rather than redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with no annotations and no output schema, the description provides everything needed to call it correctly: invocation syntax, expected return structure, and error scenarios. Minor details like ordering of yearly data or unit conventions are not critical for successful use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only declares symbol as a required string with 0% description coverage. The description compensates fully by defining symbol as '股票代碼' and providing real examples ('2330' for TSMC, '2454' for MediaTek), so the meaning and format of the parameter are unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: '取得股票年交易資訊' (get stock yearly trading information). It further enumerates the exact fields returned (yearly volume, amount, average price, yearly change), making it clear that this tool is distinct from sibling tools like get_stock_daily_trading or get_stock_monthly_trading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the intended use case: '適合長期投資分析與歷史回顧' (suitable for long-term investment analysis and historical review), and provides concrete calling examples. It does not explicitly mention when not to use this tool or name sibling alternatives, but the annual scope makes the intended context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taiwan_holiday_infoA

取得台灣節假日資訊。

查詢指定日期是否為台灣的國定假日,並取得節假日的詳細資訊。

使用範例: get_taiwan_holiday_info("2025-01-01") # 查詢元旦 get_taiwan_holiday_info("2025-10-06") # 查詢中秋節 get_taiwan_holiday_info("2025-10-07") # 查詢一般工作日

Args: date: 要查詢的日期,格式為 YYYY-MM-DD (例如: "2025-01-01")

Returns: MCPToolResponse[HolidayInfoData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (HolidayInfoData): 節假日資訊,包含: * date: 查詢日期 * name: 節假日名稱(如果是節假日) * is_holiday: 是否為節假日 * holiday_category: 節假日類別 * description: 節假日描述 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 日期格式錯誤 - API 服務異常 - 網路連線問題

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the unified return structure (MCPToolResponse with success, data, error, tool), lists the holiday data fields, and explicitly mentions possible error causes such as date format, API service failure, and network issues. This provides meaningful behavioral context beyond the name and covers failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with clear sections (overview, usage examples, args, returns, raises). The core purpose is front-loaded, and every section adds necessary information without redundancy. It is detailed but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description provides a complete invocation contract: purpose, parameter format, return schema details, error scenarios, and examples. An agent can call the tool correctly and accurately interpret the result with no missing information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the only parameter 'date'. The description compensates thoroughly by specifying the exact format YYYY-MM-DD and giving concrete examples like '2025-01-01', '2025-10-06', and '2025-10-07'. An agent knows exactly what to pass without opening the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb '查詢' (query) and a specific resource '台灣節假日資訊' (Taiwan holiday info), and further clarifies the exact function: checking if a date is a national holiday and retrieving its details. It is clearly distinct from the stock-related sibling tools, and the holiday focus separates it from check_taiwan_trading_day even without explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides three concrete usage examples covering a holiday, a special holiday, and a regular workday, clearly indicating when to use the tool. However, it does not explicitly mention alternatives or exclusions such as 'use check_taiwan_trading_day for trading day queries', so it lacks explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taiwan_stock_priceA

取得台灣股票即時價格資訊。

支援股票代碼或公司名稱查詢:

  • 股票代碼: 4-6位數字 + 可選字母 (例如: 2330, 0050, 00648R)

  • 公司名稱: 完整或部分公司名稱 (例如: "台積電", "鴻海")

使用範例: get_taiwan_stock_price("2330") # 使用股票代碼 get_taiwan_stock_price("台積電") # 使用公司名稱 get_taiwan_stock_price("0050") # 查詢ETF

Args: symbol: 台灣股票代號或公司名稱

Returns: MCPToolResponse[StockPriceData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (StockPriceData): 股票價格資訊,包含: * symbol: 股票代碼 * company_name: 公司名稱 * current_price: 當前價格 * change: 漲跌金額 * change_percent: 漲跌幅百分比 * volume: 成交量 * high/low/open: 最高/最低/開盤價 * previous_close: 昨收價 * last_update: 最後更新時間 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱 - timestamp: 回應時間戳

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 網路連線問題 - API 服務異常

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It thoroughly explains the unified MCPToolResponse format, enumerates all StockPriceData fields, and clearly states error conditions with likely causes. It does not mention potential data latency or rate limits, but for a read-only query tool the behavioral coverage is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, followed by symbol formats, examples, args, returns, and errors. It is somewhat long but every section contributes useful information, so no part feels wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations and no output schema, the description is complete: it covers input formatting, return structure with field names, and possible error causes. Nothing an agent needs to make a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only declares symbol as a string. The description fully compensates: it defines symbol as a 4-6 digit code with optional letters or a full/partial company name, gives concrete examples including an ETF, and explains partial-name matching. This adds substantial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource statement: '取得台灣股票即時價格資訊' (get Taiwan stock real-time price info). It further clarifies accepted input types (codes vs. names) with examples, but it does not explicitly distinguish itself from siblings like get_real_time_trading_stats or get_stock_daily_trading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the description of querying by code or company name and the examples provided, but there is no explicit statement of when to use this tool versus alternatives. Sibling tools are not referenced, and no exclusions or conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_top_foreign_holdingsA

取得外資持股前20名。

列出外資持股比例最高的前20檔個股,包括持股比例、持股張數、 當日買賣超等資訊,可瞭解外資重點布局標的。

使用範例: get_top_foreign_holdings() # 查詢外資持股前20名

Args: 無參數

Returns: MCPToolResponse[TopForeignHoldingsData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data: 外資持股前20名資訊列表,每項包含: * rank: 排名 * symbol: 股票代碼 * company_name: 公司名稱 * foreign_holding: 外資持股張數 * percentage: 外資持股比例 (%) * recent_change: 近期買賣超變化 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 查詢失敗時返回錯誤回應,可能的原因: - 非交易日無資料 - 資料來源暫時無法存取 - 服務暫時異常

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses failure modes such as non-trading days and temporary service issues, and describes the return envelope. It lacks details like data timing or refresh behavior, but for a read-only no-argument tool the disclosure is reasonably complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, usage example, Args, Returns, and Raises sections. There is minor redundancy between the opening sentence and the explanatory second sentence, but overall every major section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter tool with no output schema and no annotations, the description fully covers the return fields, error cases, and invocation. An agent has everything it needs to call the tool and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is trivially complete and the description's explicit '無參數' plus usage example adds no necessary semantics. The baseline of 4 for zero-parameter tools is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it retrieves the top 20 stocks by foreign shareholding percentage, and lists the main returned fields. This clearly distinguishes it from related siblings like get_foreign_investment_by_industry, which covers industry-level foreign investment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('可瞭解外資重點布局標的') and a usage example, making the intended context evident. However, it does not explicitly contrast this tool with alternatives such as get_foreign_investment_by_industry, so some routing inferences are left to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sell_taiwan_stockA

模擬台灣股票賣出操作。

執行模擬的股票賣出交易,計算手續費、證券交易稅等費用。 注意:台股最小交易單位為1000股(1張),賣出時需扣除0.3%證券交易稅。

使用範例: sell_taiwan_stock("2330", 1000) # 市價賣出1張台積電 sell_taiwan_stock("2330", 1000, 530.0) # 限價530元賣出1張台積電

Args: symbol: 股票代碼 (例如: "2330") quantity: 賣出股數,必須是1000的倍數 (台股最小單位為1000股) price: 指定價格 (可選,不指定則為市價)

Returns: MCPToolResponse[TradingResultData]: 統一格式的回應,包含: - success (bool): 操作是否成功 - data (TradingResultData): 交易結果資訊,包含: * symbol: 股票代碼 * action: 交易動作 ("sell") * quantity: 交易股數 * price: 成交價格 * total_amount: 交易總金額 * fee: 手續費 * tax: 證券交易稅(0.3%) * net_amount: 實際收入金額 * timestamp: 交易時間 - error (str): 錯誤訊息(失敗時) - tool (str): 工具名稱

Raises: 交易失敗時返回錯誤回應,可能的原因: - 股票代碼不存在 - 交易股數不符合規定(非1000的倍數) - 指定價格超出漲跌停限制 - 模擬交易系統異常

ParametersJSON Schema
NameRequiredDescriptionDefault
priceNo
symbolYes
quantityYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses simulation semantics, 0.3% transaction tax, the 1000-share lot rule, optional price behavior, failure modes, and the full response structure. This makes the operational behavior predictable and goes well beyond minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into intro, note, examples, Args, Returns, and Raises sections; every section contributes useful information. The 1000-share rule appears in both the note and Args, but this minor redundancy does not hurt clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a trading action with no output schema, but the description provides input constraints, return fields and their meanings, tax rate, example calls, and error conditions. An agent has everything needed to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate; it fully explains symbol with an example, quantity with the mandatory 1000-multiple constraint, and price as optional/market/default. This adds real meaning beyond the bare schema names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: simulating a Taiwan stock sell transaction and computing fees/tax. It also distinguishes the tool from the sibling getters and from buy_taiwan_stock by naming the sell/simulation action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Concrete call examples show market and limit orders, and the description states that omitting price means a market order. It also warns about the 1000-share minimum unit. It does not explicitly name alternatives or when-not-to-use, but the sell-vs-buy/getting context is clear.

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.

  1. 23 tool updatesv0.1.0
    • First observedbuy_taiwan_stock
    • First observedcheck_taiwan_trading_day
    • First observedget_company_balance_sheet
    • First observedget_company_dividend
    • First observedget_company_income_statement
    • First observedget_company_monthly_revenue
    • First observedget_company_profile
    • First observedget_dividend_rights_schedule
    • First observedget_etf_regular_investment_ranking
    • First observedget_foreign_investment_by_industry
    • First observedget_margin_trading_info
    • First observedget_market_historical_index
    • First observedget_market_index_info
    • First observedget_real_time_trading_stats
    • First observedget_stock_daily_trading
    • First observedget_stock_monthly_average
    • First observedget_stock_monthly_trading
    • First observedget_stock_valuation_ratios
    • First observedget_stock_yearly_trading
    • First observedget_taiwan_holiday_info
    • First observedget_taiwan_stock_price
    • First observedget_top_foreign_holdings
    • First observedsell_taiwan_stock

TDQS

A3.8/5.0

Scored across 23 tools

Disambiguation3/5

Most tools are distinct, but several pairs have overlapping purposes: get_stock_monthly_trading vs get_stock_monthly_average, get_market_index_info vs get_market_historical_index, and get_company_dividend vs get_dividend_rights_schedule. Descriptions help clarify intent, but an agent could easily select the wrong tool in these cases.

Naming Consistency4/5

Tools overwhelmingly follow a get_<resource>_<metric> snake_case pattern, with buy/sell/check as clear action verbs. Minor inconsistency exists in mixing 'stock', 'company', and 'market' prefixes and a few long names, but the overall convention is predictable.

Tool Count3/5

23 tools is on the heavy side, though the domain of Taiwan stock market data plus simulated trading is broad enough to justify many of them. A few redundant tools, such as monthly average vs monthly trading and the two market index tools, make the set feel larger than necessary.

Completeness3/5

The data surface is strong: prices, financial statements, dividends, indices, foreign holdings, margin trading, and calendar helpers are covered. However, buy_taiwan_stock and sell_taiwan_stock exist without any holdings, account balance, or order-history tools, so the simulated trading workflow has a notable dead end.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A stock data MCP server based on BaoStock that provides multiple interfaces for retrieving stock market data.
    119
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A FastMCP-based server that provides tools for analyzing stock market data, including concept sector strength, financial indicators, F10 information, market emotion indicators, and tracking limit-up stocks.
    11
    -
  • A
    license
    C
    quality
    D
    maintenance
    Provides comprehensive Taiwan stock market data and analysis through MCP tools. Enables querying real-time stock prices, historical data, company information, technical analysis, and market overviews for TWSE and TPEx listed companies.
    8
    16
    MIT