Finance MCP
Finance MCP is an intelligent agent toolkit and MCP server for financial research that integrates multiple data sources and tools for comprehensive analysis of Chinese A-share stocks.
Core Capabilities:
Stock Market Analysis: Analyze historical A-share price/volume data, trends, and technical indicators (MACD) using Tushare; extract and identify financial entities (stocks, bonds, funds, ETFs, cryptocurrencies) from natural language and retrieve their codes
Web Data Collection: Scrape web content from URLs using Crawl4AI; perform internet searches via DashScope, Tavily, or mock search backends
Code & Command Execution: Execute arbitrary Python code for custom analysis and calculations; run shell commands for file operations and scripts
ReAct Agent: AI agent that combines multiple tools through reasoning and tool chaining to answer complex financial research questions
TongHuaShun Integration: Access comprehensive Chinese stock data through 13 specialized tools covering company profiles, shareholder data, operational analysis, equity structure, financial reports, earnings forecasts, news, concepts, dividends, major positions, company events, and industry comparisons
External MCP Services: Connect to Tongyi Search and BochaAI Search for expanded searching capabilities
Technical Features:
Flexible Deployment: Multiple transport modes (stdio, SSE, HTTP RESTful API with streaming) for local and remote access
Zero-Code Configuration: Create research flows through YAML files with 20+ pre-configured scenarios
Modular Architecture: Enable/disable functional modules as needed with smart multi-level caching to improve efficiency and reduce API costs
MCP Protocol Support: Compatible with Claude Desktop and other MCP clients
Provides deep research capabilities through LangChain-based operators for conducting financial research workflows.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Finance MCPanalyze recent financial performance of Apple Inc. (AAPL)"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Finance-MCP
📖 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
Related MCP server: AgentSkills MCP
📰 Latest Updates
[2025-12] 🎉 Released finance-mcp v0.1.x
🚀 Quick Start
Installation
Install Finance MCP using pip:
pip install finance-mcpOr using uv:
uv pip install finance-mcpStdio 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 keysStep 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.pyThis 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 |
|
|
crawl_url | Scrape and parse web content |
|
|
extract_entities_code | Identify financial entities from text and complete stock codes (currently uses dashscope_search, replaceable) |
|
|
execute_code | Execute arbitrary Python code | - |
|
execute_shell | Execute shell commands | - |
|
dashscope_search | Web search based on DashScope |
|
|
tavily_search | Web search based on Tavily |
|
|
mock_search | Mock search for LLM simulation | - |
|
react_agent | ReAct agent combining multiple tools for answering complex questions | - |
|
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 |
|
|
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. |
|
|
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. |
|
|
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. |
|
|
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. |
|
|
crawl_ths_worth | Get earnings forecast information by A-share stock code, including performance forecasts, detailed forecast tables, research report ratings, etc. |
|
|
crawl_ths_news | Get news and announcements by A-share stock code, including news-price correlation, announcement lists, hot news, research report lists, etc. |
|
|
crawl_ths_concept | Get concept and theme information by A-share stock code, including regular concepts, other concepts, theme highlights, concept comparison, etc. |
|
|
crawl_ths_position | Get major position information by A-share stock code, including institutional holdings summary, holding details, takeover situations, IPO allocation institutions, etc. |
|
|
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. |
|
|
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. |
|
|
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. |
|
|
crawl_ths_field | Get industry comparison information by A-share stock code, including industry position, industry news, etc. |
|
|
External MCP Services
Note: External MCP services are called via SSE (Server-Sent Events). You need to configure the
BAILIAN_MCP_API_KEYenvironment variable in.env.
Service Name | Description | Dependencies | Input Parameters |
tongyi_search | WebSearch service based on DashScope |
|
|
bochaai_search | BochaAI search service based on DashScope |
|
|
Server Configuration Parameters
Parameter | Description | Example |
| Configuration files to load (comma-separated). Available: |
|
| Transport mode: |
|
| Host address (for sse/http transports only) |
|
| Port number (for sse/http transports only) |
|
| Default LLM model name (overrides config file) |
|
| JSON array of flow names to disable. Tip: Disable flows if you don't have the required API keys (e.g., |
|
For the full set of available options and defaults, refer to default.yaml.
Environment Variables
Variable | Required | Description |
| ✅ Yes | API key for OpenAI-compatible LLM service |
| ✅ Yes | Base URL for OpenAI-compatible LLM service |
| ⚠️ Optional | For DashScope search and entity extraction |
| ⚠️ Optional | For historical data analysis |
| ⚠️ Optional | For Tavily web search |
| ⚠️ 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-2507Step 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:
Install the package in development mode:
pip install -e .Install pre-commit hooks:
pip install pre-commit
pre-commit run --all-filesSubmit 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
Available Tools
9 toolscrawl_urlC
Web content parsing tool: retrieves and formats web page content based on the provided URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | the provided URL |
TDQS
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 mentions 'retrieves and formats web page content,' which implies a read-only operation, but doesn't specify details like rate limits, authentication needs, error handling, formatting specifics, or whether it follows redirects. For a web crawling tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Web content parsing tool: retrieves and formats web page content based on the provided URL.' It is front-loaded with the tool's purpose and contains no redundant information, making it appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of web crawling (e.g., handling different content types, errors, or formatting) and the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'formats' entails, what content is returned, or any behavioral constraints. For a tool with no structured data beyond a basic input schema, more context is needed to ensure reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'url' parameter documented as 'the provided URL.' The description adds minimal value beyond this, only implying the URL is used to fetch content. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't significantly enhance parameter understanding beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'retrieves and formats web page content based on the provided URL.' It specifies the verb ('retrieves and formats'), resource ('web page content'), and mechanism ('based on the provided URL'). However, it doesn't explicitly differentiate from sibling tools like 'dashscope_search' or 'tavily_search', which might also retrieve web content through different mechanisms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'crawl_url' over sibling tools like 'dashscope_search' or 'tavily_search', nor does it specify prerequisites, exclusions, or optimal use cases. The agent must infer usage from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dashscope_searchA
Use search keywords to retrieve relevant information from the internet. If you have multiple keywords, please call this tool separately for each one.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | search keyword |
TDQS
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 mentions retrieving information from the internet but doesn't cover important behavioral aspects like rate limits, authentication needs, result format, pagination, or error handling. For a search tool with no annotations, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: two sentences that directly address purpose and usage guidelines. Every sentence earns its place with no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an internet search tool with no annotations and no output schema, the description is insufficient. It doesn't explain what kind of information is returned, how results are formatted, whether there are limitations, or how it differs from sibling search tools. The description provides basic usage but lacks completeness for effective tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'query' documented as 'search keyword'. The description adds no additional parameter semantics beyond what the schema provides (it just repeats 'search keywords'). Since schema coverage is high, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'retrieve relevant information from the internet' using 'search keywords'. It specifies the action (retrieve) and resource (internet information). However, it doesn't explicitly differentiate from sibling tools like 'tavily_search' or 'mock_search', which appear to be similar search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'If you have multiple keywords, please call this tool separately for each one.' This gives clear instructions on when and how to use the tool versus alternatives (like batching queries). No misleading guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_codeC
Execute python code can be used in scenarios such as analysis or calculation, and the final result can be printed using the print function.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | code to be executed |
TDQS
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 mentions that results can be printed using `print`, but doesn't disclose critical behavioral traits such as execution environment, safety risks (e.g., code injection), permissions needed, timeouts, or output handling. This leaves significant gaps for a tool that executes arbitrary code.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is reasonably concise and front-loaded with the main action. However, it could be more structured by separating usage guidance from behavioral details, and the phrasing 'can be used in scenarios such as' is slightly verbose without adding much clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of executing arbitrary code, no annotations, and no output schema, the description is incomplete. It lacks essential context such as execution environment, error handling, security implications, and what the return values or outputs look like beyond printing. This is inadequate for a tool with significant behavioral implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'code' parameter documented as 'code to be executed'. The description adds minimal value by implying Python code and the use of `print`, but doesn't provide additional syntax, format details, or constraints beyond what the schema already states. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool 'Execute python code' and mentions scenarios like 'analysis or calculation', which provides a general purpose. However, it doesn't clearly distinguish this from sibling tools like 'execute_shell' or 'history_calculate', and the phrasing is somewhat vague rather than specific about what exactly gets executed or how.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions scenarios such as 'analysis or calculation' but provides no explicit guidance on when to use this tool versus alternatives like 'execute_shell' or 'history_calculate'. There's no mention of prerequisites, exclusions, or specific contexts that would help an agent choose correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_shellB
A tool capable of executing shell commands can use pwd to check the current location, cd to navigate to a new directory, ls to view the contents of a directory, and execute scripts.
Note that the starting directory is always the same each time the tool is invoked. If you need to perform multiple operations within a specific directory, you must include the full path in each command, for example: cd aa/bb && bash xxx.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | command to be executed |
TDQS
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 effectively explains key traits: the tool executes shell commands, the starting directory is fixed per invocation, and full paths are needed for multi-step operations. This adds valuable context beyond the basic schema, though it could mention security implications or output handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and examples, followed by important behavioral notes. It uses two sentences efficiently, with no wasted words. However, the first sentence is slightly verbose ('A tool capable of executing shell commands can use...'), and it could be more streamlined without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (executing arbitrary shell commands) and lack of annotations or output schema, the description does a fair job. It covers the fixed starting directory and path advice, which are critical for usage. However, it misses details like error handling, security warnings, or output format, leaving gaps for a tool with significant behavioral implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the 'command' parameter well-documented in the schema. The description doesn't add specific syntax or format details for the parameter beyond implying it accepts shell commands like 'pwd' or 'cd'. Since the schema already covers the parameter adequately, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool 'executes shell commands' and provides examples (pwd, cd, ls, scripts), which clarifies its purpose. However, it doesn't distinguish this tool from potential siblings like 'execute_code'—both could involve command execution, leaving the differentiation unclear. The purpose is understandable but lacks sibling-specific context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a note about the starting directory being fixed and advises using full paths for multiple operations, which offers some usage context. However, it doesn't explicitly state when to use this tool versus alternatives like 'execute_code' or other siblings, nor does it provide exclusions or prerequisites. Guidance is minimal and not comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_entities_codeC
Extract financial entities from the query, including types such as "stock", "bond", "fund", "cryptocurrency", "index", "commodity", "etf", etc. For entities like stocks or ETF funds, search for their corresponding codes. Finally, return the financial entities appearing in the query, including their types and codes.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query about financial entities. |
TDQS
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 describes the extraction and code search behavior but lacks details on permissions, rate limits, error handling, or output format (e.g., structure of returned entities). For a tool with no annotations, this is a significant gap in behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, stating the core purpose in the first sentence. Both sentences earn their place by adding specific entity types and code search details. It could be slightly more structured but avoids redundancy and is efficiently sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It explains what the tool does but omits critical behavioral aspects like output structure, error conditions, or limitations. For a tool with 1 parameter and no structured support, more context is needed to be fully helpful to an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'query' documented as a natural language query about financial entities. The description adds context by specifying the types of financial entities (e.g., stock, bond) and the code search for stocks/ETFs, but doesn't provide additional syntax or format details beyond what the schema implies. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: extracting financial entities from a query, identifying their types, and searching for codes for stocks/ETFs. It specifies the resource (financial entities) and verb (extract, search, return). However, it doesn't explicitly differentiate from sibling tools like dashscope_search or tavily_search, which might also process queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, exclusions (e.g., when not to use it), or compare it to sibling tools like dashscope_search or tavily_search, which might handle similar queries. Usage is implied only by the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
history_calculateA
对于给定的A股股票代码(其他市场的股票请不要使用此工具),有现成的历史股价数据,其数据结构如下:
名称 类型 描述
ts_code str 股票代码
trade_date str 交易日期
open float 开盘价
high float 最高价
low float 最低价
close float 收盘价
pre_close float 昨收价
change float 涨跌额
pct_chg float 涨跌幅
vol float 成交量 (手)
amount float 成交额 (千元)你需要输入你想分析的股票代码以及你的问题。该工具将为你生成并执行相应的代码,并返回结果。 注意:
你无需编写任何代码——只需直接提问即可,例如:“过去一周涨了多少,有没有出现顶背离?”、“近期市场趋势如何?”、“MACD是否形成了金叉?”。
该工具只能基于上述数据结构中的数据回答问题,请勿提出需要超出该数据范围信息的问题。
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | A-share stock code (e.g. '600000' or '000001'). | |
| query | Yes | User question about the stock's historical performance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it generates and executes code automatically (users don't need to write code), it's limited to the given data structure, and it returns results. However, it lacks details on potential limitations like rate limits, error handling, or authentication needs. No contradiction with annotations exists since none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the purpose and data structure, followed by usage notes. It uses bullet points for clarity. However, some parts could be more concise (e.g., the data table might be verbose for a description), and the second note repeats information about not writing code.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a tool that generates/executes code (implying complexity), the description is moderately complete. It covers purpose, data constraints, and usage guidelines, but lacks details on output format, error cases, or performance characteristics. For a code-execution tool, more behavioral context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('code' and 'query') adequately. The description adds some context by specifying 'A-share stock code' and giving query examples, but doesn't provide significant additional meaning beyond what's in the schema (e.g., no format details for 'code' beyond 'A-share', no constraints on 'query' length). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes historical A-share stock price data based on a specific data structure and generates/executes code to answer questions about stock performance. It specifies the resource (A-share stocks) and verb (analyze historical data), though it doesn't explicitly distinguish from sibling tools like 'execute_code' or 'dashscope_search' that might also process queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for A-share stocks only (not other markets), based on the specified data structure, and for questions about historical performance. It includes explicit 'do not' guidance (e.g., 'other markets...请不要使用此工具', '请勿提出需要超出该数据范围信息的问题'). However, it doesn't explicitly mention when to use alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mock_searchB
Use search keywords to retrieve relevant information from the internet. If you have multiple keywords, please call this tool separately for each one.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | search keyword |
TDQS
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 mentions that the tool retrieves information from the internet but doesn't specify behavioral traits such as rate limits, authentication needs, response format, or error handling. For a search tool with no annotation coverage, this leaves significant gaps in understanding how it operates beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences that directly address the tool's function and a usage note. It's front-loaded with the core purpose, and the second sentence adds necessary operational guidance without redundancy. However, it could be slightly more structured by explicitly separating purpose from instructions, but overall it's efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a search tool, no annotations, and no output schema, the description is incomplete. It lacks details on what the tool returns (e.g., format, pagination), error conditions, or how it differs from sibling tools. While it states the basic purpose, it doesn't provide enough context for an agent to use it effectively without trial and error, especially compared to other search-related tools in the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'query' parameter documented as 'search keyword'. The description adds minimal value by restating 'search keywords' but doesn't provide additional semantics like examples, formatting tips, or constraints beyond what the schema already covers. Given the high schema coverage, a baseline score of 3 is appropriate as the description doesn't compensate with extra insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'retrieve relevant information from the internet' using 'search keywords'. It specifies the verb ('retrieve') and resource ('information from the internet'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'dashscope_search' or 'tavily_search', which appear to be similar search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage guidance by stating 'If you have multiple keywords, please call this tool separately for each one,' which implies a constraint on batching. However, it doesn't explain when to use this tool versus alternatives like 'dashscope_search' or 'tavily_search', nor does it mention any prerequisites or exclusions. The guidance is limited to operational details without broader context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
react_agentD
A React agent that answers user queries.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | query |
TDQS
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. The description only states it 'answers user queries' without explaining how it works, what kind of answers it provides, whether it has limitations, rate limits, authentication needs, or what happens when invoked. This is completely inadequate for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence. However, this conciseness comes at the cost of being under-specified rather than efficient. While it's front-loaded with the core function, the sentence doesn't earn its place by providing necessary context or differentiation from sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and competes with multiple query-related sibling tools, the description is completely inadequate. It doesn't explain what makes this tool unique, how it behaves, what it returns, or when to use it. For a tool in this complex context, the description fails to provide essential information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with one parameter 'query' described as 'query'. The description doesn't add any meaningful information about this parameter beyond what the schema already provides. Since schema coverage is high, the baseline score of 3 is appropriate - the description neither compensates nor adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'A React agent that answers user queries' is tautological - it essentially restates the tool name 'react_agent' with minimal elaboration. While it mentions answering queries, it doesn't specify what type of queries, what domain it operates in, or how it differs from other query-answering tools like dashscope_search or tavily_search among the siblings. The purpose is vague rather than specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like dashscope_search and tavily_search that also handle queries, there's no indication of what makes this React agent unique or appropriate for certain contexts. No explicit or implied usage scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tavily_searchC
Use search keywords to retrieve relevant information from the internet.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | search keyword |
TDQS
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 mentions retrieving information but lacks details on rate limits, authentication needs, result format, pagination, or error handling. This is inadequate for a search tool that likely has operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality ('Use search keywords to retrieve relevant information') with no wasted words. It's appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no annotations and no output schema, the description is insufficient. It doesn't explain what kind of information is returned, how results are structured, or any limitations (e.g., number of results, sources). Given the complexity of internet search and lack of structured data, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'query' clearly documented as 'search keyword'. The description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('retrieve') and resource ('relevant information from the internet'), and distinguishes it from siblings like 'crawl_url' or 'mock_search' by focusing on search functionality. However, it doesn't explicitly differentiate from 'dashscope_search' which appears to be another search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'dashscope_search' or 'mock_search', nor does it mention any prerequisites or exclusions. It only states the basic function without contextual usage information.
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. Dates show when Glama detected each change.
9 tool updates
- First observed
crawl_url - First observed
dashscope_search - First observed
execute_code - First observed
execute_shell - First observed
extract_entities_code - First observed
history_calculate - First observed
mock_search - First observed
react_agent - First observed
tavily_search
TDQS
Multiple tools have overlapping or unclear purposes. dashscope_search, mock_search, and tavily_search all appear to perform internet searches with similar descriptions, creating significant ambiguity. Additionally, execute_code and execute_shell both handle code execution but in different environments, which could confuse agents about when to use each. The finance-specific tools (extract_entities_code, history_calculate) are more distinct but the overall set has poor separation.
The naming follows mixed conventions. Most tools use snake_case (crawl_url, dashscope_search, execute_code, etc.), which is good, but there's inconsistency in verb usage and structure. Some names describe actions (crawl_url, execute_code), others describe functions (extract_entities_code, history_calculate), and react_agent uses a different pattern entirely. While readable, there's no consistent verb_noun pattern throughout the set.
With 9 tools, the count is reasonable for a finance server that appears to combine web research, code execution, and financial analysis. However, the presence of three nearly identical search tools (dashscope_search, mock_search, tavily_search) suggests some redundancy that inflates the count unnecessarily. The scope feels slightly bloated rather than tightly focused.
For a 'Finance MCP', the tool surface has significant gaps. While it includes some financial entity extraction and A-share stock analysis, there's no coverage of core financial operations like portfolio management, transaction execution, market data retrieval beyond specific stocks, or integration with financial APIs. The tools are more generic (web crawling, code execution, search) than finance-specific, leaving the domain poorly served despite the server name.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Investment research superagent: podcasts, SEC filings, and no-code research pipelines.
Evidence-backed capital-change intelligence and sourced financial data for AI agents
Finance research agent for thesis, trade note, and market-state review.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables iterative deep research by integrating AI agents with search engines, web scraping, and large language models for efficient data gathering and comprehensive reporting.8323MIT
- AlicenseBqualityDmaintenanceProvides comprehensive financial research tools including A-share stock analysis, web scraping, entity extraction, and multi-source search capabilities for building intelligent financial research agents.425Apache 2.0
- AlicenseAqualityCmaintenanceEnables AI agents to perform professional-grade deep research by aggregating real-time data from multiple sources, evaluating source credibility, and generating comprehensive reports.311Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform grounded equity research by analyzing tickers from SEC filings and market data, producing citation-guarded memos with pre-computed fundamentals.MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/FlowLLM-AI/finance-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server