Skip to content

LLM-powered MCP server for building financial deep-research agents, integrating web search, Crawl4AI scraping, and entity extraction into composable analysis flows.

License

Notifications You must be signed in to change notification settings

FlowLLM-AI/finance-mcp

Repository files navigation

Finance MCP Logo Finance-MCP

Python Version PyPI Version License English 简体中文 GitHub Stars

📖 Project Overview

Finance MCP is an intelligent agent toolkit and MCP server designed for financial research scenarios. Built on the FlowLLM framework, it integrates components such as Crawl4AI, Tushare, Tavily/DashScope search, and more, helping you quickly build professional financial research agent systems.

💡 Why Choose Finance MCP?

  • Zero-Code Configuration: Combine operators through YAML configuration files without writing service code
  • Out-of-the-Box: Pre-configured 20+ financial research-related flows covering common research scenarios
  • Multi-Protocol Support: Supports both MCP (stdio/SSE/HTTP) and HTTP RESTful API
  • Smart Caching: Built-in multi-level caching mechanism to improve efficiency and reduce costs
  • Modular Design: Each functional module is independently configurable, supporting enable/disable as needed

📰 Latest Updates

  • [2025-12] 🎉 Released finance-mcp v0.1.x

🚀 Quick Start

Installation

Install Finance MCP using pip:

pip install finance-mcp

Or using uv:

uv pip install finance-mcp

Stdio Mode

This mode runs Finance MCP directly through uvx, communicating via standard input/output. Ideal for local MCP clients.

{
  "mcpServers": {
    "finance-mcp": {
      "command": "uvx",
      "args": [
        "finance-mcp",
        "config=default,ths",
        "mcp.transport=stdio",
        "llm.default.model_name=qwen3-30b-a3b-thinking-2507",
        "disabled_flows='[\"tavily_search\",\"mock_search\",\"react_agent\"]'"
      ],
      "env": {
        "FLOW_LLM_API_KEY": "xxx",
        "FLOW_LLM_BASE_URL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
        "DASHSCOPE_API_KEY": "xxx",
        "TUSHARE_API_TOKEN": "xxx",
        "TAVILY_API_KEY": "xxx",
        "BAILIAN_MCP_API_KEY": "xxx"
      }
    }
  }
}

Service Mode (HTTP/SSE Server)

This mode starts Finance MCP as a standalone HTTP/SSE server that can be accessed remotely.

Step 1: Configure Environment Variables

Copy example.env to .env and fill in your API keys:

cp example.env .env
# Edit .env and fill in your API keys

Step 2: Start the Server

Start the Finance MCP server with SSE transport:

finance-mcp \
  config=default,ths \
  mcp.transport=sse \
  mcp.host=0.0.0.0 \
  mcp.port=8001 \
  llm.default.model_name=qwen3-30b-a3b-thinking-2507 \
  disabled_flows='["tavily_search","mock_search","react_agent"]'

The service will be available at: http://0.0.0.0:8001/sse

Step 3: Connect from MCP Client

Add this configuration to your MCP client to connect to the remote SSE server:

{
  "mcpServers": {
    "finance-mcp": {
      "type": "sse",
      "url": "http://0.0.0.0:8001/sse"
    }
  }
}

Step 4: Using with FastMCP Client

When running in Service Mode, you can also use the FastMCP Python client to directly access the server:

import asyncio
from fastmcp import Client


async def main():
    async with Client("http://0.0.0.0:8001/sse") as client:
        for tool in client.list_tools():
            print(tool)

        result = await client.call_tool(
            name="dashscope_search",
            arguments={"query": "Recent news about Zijin Mining"}
        )
    print(result)


asyncio.run(main())

One-Command Test

python test_op/test_project_sse.py

This will start the server, connect via FastMCP client, and test all available tools automatically.

🚀 MCP Tools

Default Tools

Tool Name Description Dependencies Input Parameters
history_calculate Price-volume analysis based on Tushare A-share historical data TUSHARE_API_TOKEN code: 601899
query: How much did it rise in the past week? Any MACD golden cross?
crawl_url Scrape and parse web content crawl4ai url: https://example.com
extract_entities_code Identify financial entities from text and complete stock codes (currently uses dashscope_search, replaceable) DASHSCOPE_API_KEY query: I want to learn about Kweichow Moutai stock
execute_code Execute arbitrary Python code - code: print(1+1)
execute_shell Execute shell commands - command: ls
dashscope_search Web search based on DashScope DASHSCOPE_API_KEY query: Recent news about Zijin Mining
tavily_search Web search based on Tavily TAVILY_API_KEY query: financial news
mock_search Mock search for LLM simulation - query: test query
react_agent ReAct agent combining multiple tools for answering complex questions - query: Help me analyze Zijin Mining's trend for the next week

TongHuaShun Tools

Note: These tools are implemented via crawl4ai. High concurrency may result in IP blocking.

Tool Name Description Dependencies Input Parameters
crawl_ths_company Get company profile information by A-share stock code, including details, executive introductions, issuance-related info, subsidiaries, etc., and return query-relevant information crawl4ai code: 600519
query: What are the company's main business and executive situation?
crawl_ths_holder Get shareholder research information by A-share stock code, including shareholder count, top 10 circulating shareholders, top 10 shareholders, bondholders, controlling hierarchy, etc. crawl4ai code: 600519
query: How have shareholder count and major shareholder structure changed recently?
crawl_ths_operate Get operational analysis information by A-share stock code, including main business introduction, operational data, main business composition, customers & suppliers, business review, product prices, etc. crawl4ai code: 600519
query: What is the company's main business composition and operational situation?
crawl_ths_equity Get equity structure information by A-share stock code, including unlock schedule, total equity composition, A-share structure chart, historical equity changes, etc. crawl4ai code: 600519
query: What restricted shares will be unlocked in the next year?
crawl_ths_capital Get capital operation information by A-share stock code, including funding sources, project investments, M&A, equity investments, IPO participation, equity transfers, pledge/unfreeze, etc. crawl4ai code: 600519
query: What recent M&A or capital operations has the company had?
crawl_ths_worth Get earnings forecast information by A-share stock code, including performance forecasts, detailed forecast tables, research report ratings, etc. crawl4ai code: 600519
query: What are the earnings forecasts and institutional ratings for the next three years?
crawl_ths_news Get news and announcements by A-share stock code, including news-price correlation, announcement lists, hot news, research report lists, etc. crawl4ai code: 600519
query: What are the recent important announcements or news?
crawl_ths_concept Get concept and theme information by A-share stock code, including regular concepts, other concepts, theme highlights, concept comparison, etc. crawl4ai code: 600519
query: What concept themes does this stock involve?
crawl_ths_position Get major position information by A-share stock code, including institutional holdings summary, holding details, takeover situations, IPO allocation institutions, etc. crawl4ai code: 600519
query: What is the institutional holding trend and major institutional holdings?
crawl_ths_finance Get financial analysis information by A-share stock code, including financial diagnosis, financial indicators, indicator change explanations, asset-liability composition, financial reports, DuPont analysis, etc. crawl4ai code: 600519
query: What is the company's profitability and financial structure?
crawl_ths_bonus Get dividend and financing information by A-share stock code, including dividend diagnosis, dividend history, additional issuance allocation details, additional issuance overview, rights issue overview, etc. crawl4ai code: 600519
query: What is the historical dividend situation and recent financing arrangements?
crawl_ths_event Get company events by A-share stock code, including executive shareholding changes, shareholder shareholding changes, guarantee details, violations, institutional research, investor interactions, etc. crawl4ai code: 600519
query: What are the recent major events or executive shareholding changes?
crawl_ths_field Get industry comparison information by A-share stock code, including industry position, industry news, etc. crawl4ai code: 600519
query: What is the company's position in its industry?

External MCP Services

Note: External MCP services are called via SSE (Server-Sent Events). You need to configure the BAILIAN_MCP_API_KEY environment variable in .env.

Service Name Description Dependencies Input Parameters
tongyi_search WebSearch service based on DashScope BAILIAN_MCP_API_KEY query: Recent news about Zijin Mining
bochaai_search BochaAI search service based on DashScope BAILIAN_MCP_API_KEY query: financial news

Server Configuration Parameters

Parameter Description Example
config Configuration files to load (comma-separated). Available: default (core flows), ths (TongHuaShun stock data), stream_agent (streaming agents), external_mcp (external MCP services) config=default,ths
mcp.transport Transport mode: stdio (Claude Desktop), sse (web apps), http (RESTful), streamable-http mcp.transport=stdio
mcp.host Host address (for sse/http transports only) mcp.host=0.0.0.0
mcp.port Port number (for sse/http transports only) mcp.port=8001
llm.default.model_name Default LLM model name (overrides config file) llm.default.model_name=qwen3-30b-a3b-thinking-2507
disabled_flows JSON array of flow names to disable. Tip: Disable flows if you don't have the required API keys (e.g., tavily_search requires TAVILY_API_KEY) disabled_flows='["react_agent"]'

For the full set of available options and defaults, refer to default.yaml.

Environment Variables

Variable Required Description
FLOW_LLM_API_KEY ✅ Yes API key for OpenAI-compatible LLM service
FLOW_LLM_BASE_URL ✅ Yes Base URL for OpenAI-compatible LLM service
DASHSCOPE_API_KEY ⚠️ Optional For DashScope search and entity extraction
TUSHARE_API_TOKEN ⚠️ Optional For historical data analysis
TAVILY_API_KEY ⚠️ Optional For Tavily web search
BAILIAN_MCP_API_KEY ⚠️ Optional For external MCP services

HTTP RESTful API with Streaming Support

Finance MCP also supports HTTP RESTful API mode with streaming capabilities. This allows you to access flows directly via HTTP endpoints, not just through MCP protocol.

Step 1: Start HTTP Server

Start the Finance MCP server with HTTP backend:

finance-mcp \
  config=default,stream_agent \
  backend=http \
  http.host=0.0.0.0 \
  http.port=8002 \
  llm.default.model_name=qwen3-30b-a3b-thinking-2507

Step 2: Make Streaming HTTP Requests

All flows configured with stream: true will be exposed as streaming HTTP endpoints. Responses are streamed in real-time using Server-Sent Events (SSE) format.

Example: Request streaming deep research (inspired by open_deep_research):

curl -X POST http://0.0.0.0:8002/langchain_deep_research \
  -H "Content-Type: application/json" \
  -d '{"query": "I want to learn about Kweichow Moutai stock"}'

The response will be streamed in real-time, showing:

  • Thinking process and reasoning
  • Tool calls and intermediate results
  • Final comprehensive answer

Note: By default, this uses DashScope search, but you can replace it with other search backends (e.g., Tavily) by modifying the stream_agent.yaml configuration.

🤝 Contributing

We welcome contributions! To get started:

  1. Install the package in development mode:
pip install -e .
  1. Install pre-commit hooks:
pip install pre-commit
pre-commit run --all-files
  1. Submit a pull request with your changes.

⚖️ License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

📈 Star History

Star History Chart

About

LLM-powered MCP server for building financial deep-research agents, integrating web search, Crawl4AI scraping, and entity extraction into composable analysis flows.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •