Vnprices Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Vnprices Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server that provides Vietnamese financial market data through Claude Desktop. Fetch historical prices for stocks, forex, cryptocurrencies, and international indices using the vnstock3 library.
#### 1. get_stock_history Fetch historical stock price data for Vietnamese stocks (e.g., VCI, VNM, HPG).
#### 2. get_forex_history Fetch historical forex exchange rate data (e.g., USDVND, EURVND).
#### 3. get_crypto_history Fetch historical cryptocurrency price data (e.g., BTC, ETH).
#### 4. get_index_history Fetch historical index data for Vietnamese market indices (VNINDEX, HNXINDEX, UPCOMINDEX).
#### 5. calculate_returns Calculate expected returns for a portfolio of Vietnamese stocks using mean historical or exponential moving average methods.
#### 6. optimize_portfolio Perform Mean-Variance Optimization to find the maximum Sharpe ratio portfolio for Vietnamese stocks.
#### 7. full_portfolio_optimization Perform comprehensive portfolio optimization with multiple strategies (max Sharpe, min volatility, max utility) for Vietnamese stocks.
Note: Currently supports annual periods only. Quarterly data support planned for future releases.
#### 8. get_income_statement Fetch annual income statement (profit & loss) for Vietnamese stocks.
#### 9. get_balance_sheet Fetch annual balance sheet for Vietnamese stocks.
#### 10. get_cash_flow Fetch annual cash flow statement for Vietnamese stocks.
#### 11. get_financial_ratios Fetch annual financial ratios (P/B, ROE, etc.) for Vietnamese stocks.
#### 12. get_dividend_history Fetch complete dividend history for Vietnamese stocks.
#### 13. get_company_info Fetch comprehensive company information for Vietnamese stocks including overview, shareholders, officers, subsidiaries, events, news, reports, financial ratios summary, and trading statistics.
#### 14. get_sjc_gold_price Fetch SJC gold prices (current or historical from 2016-01-02).
#### 15. get_btmc_gold_price Fetch BTMC (Bảo Tín Minh Châu) gold prices (current only).
#### 16. get_vcb_exchange_rate Fetch VCB (Vietcombank) exchange rates for a specific date.
#### 17. get_fund_listing Get list of all available mutual funds with filtering by fund type (BALANCED, BOND, STOCK).
#### 18. search_funds Search for mutual funds by symbol or partial name.
#### 19. get_fund_nav_report Get historical NAV report for a specific mutual fund.
#### 20. get_fund_top_holdings Get top 10 holdings for a specific mutual fund.
#### 21. get_fund_industry_allocation Get industry allocation breakdown for a specific mutual fund.
#### 22. get_fund_asset_allocation Get asset allocation breakdown for a specific mutual fund.
vnstock3 Documentation:
Besides the docs, I highly recommend watching this tutorial and following NetworkChuck's instructions. This guy is awesome!
vnprices-mcp/
├── server.py # MCP server implementation
├── Dockerfile # Container definition
├── requirements.txt # Python dependencies
└── README.md # This fileFirst, clone this repository:
git clone https://github.com/gahoccode/vnprices-mcp.git
cd vnprices-mcpCopy the vnstock catalog and configuration files to the MCP directory:
# Create the catalogs directory if it doesn't exist
mkdir -p ~/.docker/mcp/catalogs
# Copy the catalog file
cp vnstock-catalog.yaml ~/.docker/mcp/catalogs/custom.yaml
# Copy the config file
cp config.yaml ~/.docker/mcp/config.yaml
# Copy the registry file
cp registry.yaml ~/.docker/mcp/registry.yamlEdit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"mcp-gateway": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "/var/run/docker.sock:/var/run/docker.sock",
"-v", "/Users/YOUR_USERNAME/.docker/mcp:/mcp",
"docker/mcp-gateway",
"--catalog=/mcp/catalogs/docker-mcp.yaml",
"--catalog=/mcp/catalogs/custom.yaml",
"--config=/mcp/config.yaml",
"--registry=/mcp/registry.yaml",
"--transport=stdio"
]
}
}
}Important: Replace YOUR_USERNAME with your actual macOS username.
After configuration:
For detailed usage examples and sample queries, see examples/questions.md.
Quick examples:
Get VCI stock prices from January 1, 2024 to December 31, 2024Find the optimal portfolio weights for VCI, VNM, HPG to maximize Sharpe ratioGet the annual income statement for VCI stockShow me major shareholders of VCI stockIf you modify server.py or other files:
# 1. Navigate to project directory
cd vnprices-mcp
# 2. Rebuild Docker image
docker build -t vnprices-mcp:latest .
docker build -t mcp-gateway .
# 2. Stop and remove old gateway container
docker stop mcp-gateway && docker rm mcp-gateway
# 3. Verify new image
docker images | grep vnprices-mcp
# 4. Check image ID changed
docker images vnprices-mcp
# 5. Run gateway
docker run -d \
--name mcp-gateway \
-v $(pwd)/catalogs:/mcp/catalogs \
-v $(pwd)/registry.yaml:/mcp/registry.yaml \
-v $(pwd)/config.yaml:/mcp/config.yaml \
-p 3000:3000 \
mcp-gateway
# 6. Restart Claude Desktop completely
# Quit (Cmd+Q) and restartWhile Claude Desktop is running:
# Find the gateway container
docker ps | grep mcp-gateway
# View logs (replace <container-id> with actual ID)
docker logs -f <container-id>
# Or in one command
docker logs -f $(docker ps -q -f ancestor=docker/mcp-gateway)# Remove stopped containers
docker container prune
# Remove unused images
docker image prune
# Full cleanup (careful!)
docker system prune -aIf things aren't working:
# 1. Stop Claude Desktop
# 2. Remove old containers
docker rm -f $(docker ps -aq -f ancestor=vnprices-mcp:latest)
docker rm -f $(docker ps -aq -f ancestor=docker/mcp-gateway)
# 3. Remove old image
docker rmi vnprices-mcp:latest
# 4. Rebuild from scratch
docker build --no-cache -t vnprices-mcp:latest .
# 5. Verify files exist
ls -la ~/.docker/mcp/
cat ~/.docker/mcp/config.yaml
cat ~/.docker/mcp/catalogs/custom.yaml
# 6. Test gateway manually (see above)
# 7. Restart Claude Desktopvnprices-mcp/
├── server.py # MCP server implementation
│ ├── handle_list_tools() # Register available tools
│ └── handle_call_tool() # Execute tool calls
├── Dockerfile # Container configuration
├── requirements.txt # Python dependencies
└── README.md # Documentationhandle_list_tools():types.Tool(
name="your_new_tool",
description="What it does",
inputSchema={
"type": "object",
"properties": {
"param": {"type": "string"}
},
"required": ["param"]
}
)handle_call_tool():elif name == "your_new_tool":
# Your implementation
result = {"data": "response"}
return [types.TextContent(type="text", text=json.dumps(result))]docker build -t vnprices-mcp:latest .~/.docker/mcp/catalogs/custom.yaml:tools:
- name: your_new_toolMIT License - Feel free to use and modify.
Contributions welcome! Please:
For issues or questions:
Built with ❤️ for the Vietnamese developer community
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.