🚀 OpenDart MCP 服务器
OpenDart MCP 服务器用于爬取和缓存数据,它可以从 OpenDart 获取股票的基本信息(基本面数据)。同时,该服务器基于模型上下文协议(Model Context Protocol, MCP)构建和部署,为大语言模型(LLM)提供访问外部工具和服务的权限。借助 FastMCP,能够以快速且符合 Python 风格的方式构建 MCP 服务器和客户端。支持的模型包括 Gemini 3.0 Pro 和 Gemini 3.0 Flash。
✨ 主要特性
- 从
OpenDart 获取股票的基本信息(基本面)。
- 构建和部署 MCP 服务器,为 LLM 提供外部工具和服务的访问权限。
- 使用 FastMCP 快速构建 MCP 服务器和客户端。
- 支持 Gemini 3.0 Pro 和 Gemini 3.0 Flash 模型。
📦 安装指南
部署(Cloud Run)
环境变量设置
MCP_SERVER_NAME=opendart-mcp-server
export GOOGLE_CLOUD_PROJECT=sayouzone-ai
GCP 配置(仅需执行一次)
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
gcloud iam service-accounts create mcp-server-sa --display-name="MCP Server Service Account"
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=user:$(gcloud config get-value account) \
--role='roles/run.invoker'
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=serviceAccount:mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \
--role="roles/secretmanager.secretAccessor"
部署命令
gcloud run deploy $MCP_SERVER_NAME \
--service-account=mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--region=us-central1 \
--source=. \
--labels=dev-tutorial=stocks-mcp
gcloud run deploy $MCP_SERVER_NAME \
--region=us-central1 \
--source=. \
--labels=dev-tutorial=stocks-mcp
gcloud run deploy $MCP_SERVER_NAME \
--service-account=mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--region=us-central1 \
--source=. \
--labels=dev-tutorial=stocks-mcp
gcloud run deploy $MCP_SERVER_NAME \
--region=us-central1 \
--source=. \
--labels=dev-tutorial=stocks-mcp
📚 详细文档
包结构
├── opendart/
│ ├── __init__.py # 定义公开 API
│ ├── client.py # OpenDART HTTP 客户端
│ ├── models.py # 数据类 (DTO)
│ ├── utils.py # 实用函数和常量
│ ├── crawler.py # 集成接口 (外观模式)
│ ├── examples.py # 使用示例
│ └── parsers/
│ ├── __init__.py
│ ├── document.py # 文档 API 解析器
│ ├── document_viewer.py # 文档查看器 API 解析器
│ ├── disclosure.py # 披露信息 API 解析器
│ ├── finance.py # 定期报告财务信息 API 解析器
│ ├── material_facts.py # 重大事项报告主要信息 API 解析器
│ ├── ownership.py # 股权披露综合信息 API 解析器
│ ├── registration.py # 证券申报书主要信息 API 解析器
│ └── reports.py # 定期报告主要信息 API 解析器
├── tests/
│ ├── test_opendart.py # OpenDART 测试 (本地源)
│ └── test_opendart_.py # OpenDART 测试 (sayou-stock)
├── __init__.py
├── .gitignore
├── Dockerfile
├── LICENSE
├── opendarts.py
├── pyproject.toml
├── README.md
├── requirements.txt
└── server.py
部署 sayou-stock
git push origin main
git tag sayou-stock-v0.1.1
git push origin sayou-stock-v0.1.1
测试
Gemini 测试
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)")
export ID_TOKEN=$(gcloud auth print-identity-token)
settings.json 配置
{
"ide": {
"hasSeenNudge": true
},
"mcpServers": {
"opendart-remote": {
"httpUrl": "https://opendart-mcp-server-$PROJECT_NUMBER.us-central1.run.app/mcp",
"headers": {
"Authorization": "Bearer $ID_TOKEN"
}
}
},
"security": {
"auth": {
"selectedType": "gemini-api-key"
}
}
}
复制配置文件
cp settings.json ~/.gemini/
运行 Gemini
gemini
错误信息
> /mcp
Configured MCP servers:
🟢 stocks-remote - Ready (4 tools)
Tools:
- find_fnguide_data
- find_yahoofinance_data
- get_yahoofinance_fundamentals
- save_fundamentals_data_to_gcs
🟢 zoo-remote - Ready (2 tools, 1 prompt)
Tools:
- get_animal_details
- get_animals_by_species
Prompts:
- find
ℹ Gemini CLI update available! 0.14.0 → 0.15.0
Installed via Homebrew. Please update with "brew upgrade".
Using: 2 MCP servers
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ > Type your message or @path/to/file │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
~/.../src/sayou/mcp/stocks_mcp (main*) no sandbox (see /docs) auto
> 삼성전자
ℹ Gemini CLI update available! 0.14.0 → 0.15.0
Installed via Homebrew. Please update with "brew upgrade".
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ x find_fnguide_data (stocks-remote MCP Server) {"stock":"삼성전자"} │
│ │
│ MCP tool 'find_fnguide_data' reported tool error for function call: {"name":"find_fnguide_data","args":{"stock":"삼성전자"}} with │
│ response: [{"functionResponse":{"name":"find_fnguide_data","response":{"error":{"content":[{"type":"text","text":"Error calling tool │
│ 'find_fnguide_data': BrowserType.launch: Executable doesn't exist at │
│ /root/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell\n╔══════════════════════════════════════════════════ │
│ ══════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new │
│ browsers: ║\n║ ║\n║ playwright install │
│ ║\n║ ║\n║ <3 Playwright Team │
│ ║\n╚════════════════════════════════════════════════════════════╝"}],"isError":true}}}}] │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ - Shell playwright install [current working directory /Users/seongjungkim/Development/sayouzone/base-framework/src/sayou/mcp/stocks_mcp] … │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
📄 许可证
本项目包含 LICENSE 文件,具体许可信息请查看该文件。
🔗 参考文档