Skip to main content

VNStock MCP Server

The unofficial MCP server that provides Vietnamese stock market financial data, allowing you to interact with your Claude Desktop using natural language processing capabilities.

Features

  • 🚀 Dual Transport Support: Auto-detects STDIO (local) or HTTP (cloud) transport
  • ☁️ Cloud Deployment: One-click deploy to Render.com free tier
  • 🤖 LLM-Powered: Natural language processing with Anthropic Claude
  • 📊 Beautiful Output: Formatted tables, charts, and data visualization
  • 🔧 Tool Management: Automatic tool discovery and validation
  • 🎯 Smart Parsing: Vietnamese stock symbol and date format support
  • ⚡ Error Handling: Robust error recovery and user-friendly messages

Quick Start

1. Installation

For End Users (Recommended)

# Install from PyPI and run directly
uvx vnstock-mcp@latest

For Developers

# Clone the repository
git clone https://github.com/gahoccode/vnstock-mcp.git
cd vnstock-mcp

# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

2. Run the Server

End Users (uvx method)

# Run directly from PyPI
uvx vnstock-mcp@latest

Developers (local development)

# Run from source
uv run python src/vnstock_mcp/server.py

Usage Examples

> Show me FPT's financial statements for 2024
> What are HPG's key financial ratios?
> Get VCB exchange rates for today

Project Structure

vnstock-mcp/
├── pyproject.toml          # Project configuration and dependencies
├── src/
│   └── vnstock_mcp/        # Python package
│       ├── __init__.py     # Package initialization
│       ├── server.py       # MCP server (API Layer)
│       ├── config.py       # Configuration constants
│       ├── exceptions.py   # Custom exceptions
│       ├── core/           # Service Layer (business logic)
│       │   ├── base.py     # BaseService with async patterns
│       │   ├── financial.py
│       │   ├── company.py
│       │   └── fund.py
│       ├── models/         # Model Layer (result types)
│       │   ├── base.py     # ServiceResult, DataFrameResult
│       │   ├── financial.py
│       │   ├── company.py
│       │   └── fund.py
│       └── utils/          # Utility functions
│           └── data_transform.py
├── docs/                   # Architecture documentation
│   ├── ARCHITECTURE.md     # System architecture overview
│   └── adr/                # Architecture Decision Records
│       ├── 001-layered-architecture.md
│       ├── 002-result-objects.md
│       └── 003-lazy-imports.md
├── tests/                  # Test suite
│   ├── __init__.py
│   └── conftest.py         # Pytest configuration
├── dist/                   # Built packages
├── sample questions/       # Usage examples
├── uv.lock                 # Dependency lock file
└── README.md               # This file

For detailed architecture documentation, see docs/ARCHITECTURE.md.

uv vs uvx: Which to Use?

  • Purpose: Run Python packages directly from PyPI
  • Use case: End users who just want to use the MCP server
  • Command: uvx vnstock-mcp@latest
  • Benefits:
    • No local setup required
    • Automatic dependency management
    • Isolated execution environment
  • Purpose: Python project and package management
  • Use case: Developers who want to modify/contribute to the code
  • Command: uv run python src/vnstock_mcp/server.py
  • Benefits:
    • Full source code access
    • Development workflow
    • Ability to make changes

Claude Desktop Integration

To use this MCP server with Claude Desktop, add the following configuration to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

Method 1: Using uvx (if PATH configured)

{
  "mcpServers": {
    "vnstock-mcp": {
      "command": "uvx",
      "args": ["vnstock-mcp"]
    }
  }
}

Method 2: Using uvx (if PATH NOT configured)

{
  "mcpServers": {
    "vnstock-mcp": {
      "command": "/Users/YOUR_USERNAME/.local/bin/uvx",
      "args": ["vnstock-mcp"]
    }
  }
}

Method 3: Development from source (script path)

{
  "mcpServers": {
    "vnstock-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/USERNAME/PATH_TO/src/vnstock_mcp",
        "run",
        "server.py"
      ]
    }
  }
}

Method 4: Development from source (Python module)

{
  "mcpServers": {
    "vnstock-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/USERNAME/PATH_TO/vnstock-mcp",
        "run",
        "python",
        "-m",
        "vnstock_mcp.server"
      ]
    }
  }
}

Note:

  • Replace YOUR_USERNAME with your actual username in Method 2
  • Replace USERNAME and PATH_TO with your actual username and path in Method 3 and 4
  • After quitting and restarting Claude Desktop, if it still can't detect the mcp server, check if uvx is in your PATH. If not, add ~/.local/bin to your PATH:
# For zsh (macOS default)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# For bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Publishing to PyPI

For maintainers, use the automated publish script:

# Set UV_PUBLISH_TOKEN in .env file, then run:
python dev/publish.py

Or publish manually:

uv publish --token $UV_PUBLISH_TOKEN

License

This project is part of the vnstock-mcp ecosystem. See the main repository for licensing information.

Metadata

Release files for vnstock-mcp 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vnstock-mcp 0.3.0
File Size Uploaded Provenance
vnstock_mcp-0.3.0.tar.gz 14.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for vnstock-mcp 0.3.0
File Interpreter ABI Platform
vnstock_mcp-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 30.2 kB

Release files / vnstock_mcp-0.3.0.tar.gz

Download URL vnstock_mcp-0.3.0.tar.gz
Size 14.2 kB
Tags Source
SHA-256 checksum
How to use checksums
813f763dac3fdc21a2b7c831166c5651d14add42190704b9f83c93bc4243cc9b
BLAKE2b-256 checksum
How to use checksums
bd6467ced457b2a571102af0cdf3d073b4d1023fefc045f19f9996162b1df3b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.22

Release files / vnstock_mcp-0.3.0-py3-none-any.whl

Download URL vnstock_mcp-0.3.0-py3-none-any.whl
Size 15.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2a1f8d3f0b09ae2c7e83de2053c10609806208281dba7740368dc4e2422d982f
BLAKE2b-256 checksum
How to use checksums
47ce154b4e1d5bec75f09df20e87f986b2ba1cc2853d3966359b6bd5bc8addf3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.22

Security for vnstock-mcp 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page