概述
內容詳情
替代品
什麼是Financial Modeling Prep MCP Server?
這是一個基於Model Context Protocol(MCP)的金融數據服務,為AI助手提供訪問和分析金融數據的標準化接口。它集成了Financial Modeling Prep的API,涵蓋股票、公司基本面、市場數據和經濟指標等廣泛金融信息。如何使用Financial Modeling Prep MCP Server?
您可以通過HTTP請求訪問服務,支持三種使用模式:動態模式(按需加載工具)、靜態模式(預加載指定工具集)和傳統模式(加載全部工具)。需要先獲取FMP訪問令牌才能使用。適用場景
適用於金融分析、投資研究、市場監控、財務建模、經濟分析等場景,特別適合需要即時金融數據的AI助手和自動化工具。主要功能
如何使用
使用案例
常見問題
相關資源
安裝
🚀 金融建模準備MCP(模型上下文協議)服務器
金融建模準備MCP(模型上下文協議)服務器為AI助手提供了訪問和分析金融數據、股票信息、公司基本面和市場洞察的能力,使人工智能能夠更好地服務於金融領域。
🚀 快速開始
生產環境部署
對於生產環境,你可以通過Smithery註冊表使用該MCP服務器,它提供了託管和管理的MCP服務器: 🚀 在Smithery上查看
Smithery是一個幫助開發者查找和交付旨在與AI代理通信的AI原生服務的平臺。所有服務都遵循模型上下文協議(MCP)規範,並提供:
- MCP服務器的集中發現
- MCP服務器的託管和分發
- 工具集成的標準化接口
使用Smithery進行會話配置
使用Smithery時,你可以通過在MCP客戶端中傳遞配置來配置各個會話。Smithery平臺會處理HTTP請求格式和會話管理。
Smithery的示例配置:
// 動態模式會話
{
"DYNAMIC_TOOL_DISCOVERY": "true"
}
// 靜態模式會話
{
"FMP_TOOL_SETS": "search,company,quotes"
}
// 傳統模式(所有工具)
{}
有關詳細的集成說明,請遵循Smithery文檔,以將MCP客戶端連接到託管服務器。
本地開發
服務器作為一個HTTP服務器運行,公開了一個模型上下文協議端點。每個請求都可以通過查詢參數包含特定於會話的配置。
基本服務器設置
本地開發:
# 克隆並設置
git clone https://github.com/imbenrabi/Financial-Modeling-Prep-MCP-Server
cd Financial-Modeling-Prep-MCP-Server
npm install
npm run build
# 在開發環境中運行
FMP_ACCESS_TOKEN=YOUR_TOKEN npm run dev
# 或者使用CLI參數
npm run dev -- --fmp-token=YOUR_TOKEN
npm run dev -- --port=4000 --fmp-token=YOUR_TOKEN
服務器級模式配置
🔐 服務器級動態模式(所有會話使用動態模式):
# CLI參數(優先級最高)
npm run dev -- --fmp-token=YOUR_TOKEN --dynamic-tool-discovery
# 環境變量
DYNAMIC_TOOL_DISCOVERY=true FMP_ACCESS_TOKEN=YOUR_TOKEN npm run dev
🔧 服務器級靜態模式(所有會話使用指定的工具集):
# CLI參數(優先級最高)
npm run dev -- --fmp-token=YOUR_TOKEN --fmp-tool-sets=search,company,quotes
# 環境變量
FMP_TOOL_SETS=search,company,quotes FMP_ACCESS_TOKEN=YOUR_TOKEN npm run dev
📚 服務器級傳統模式(所有會話獲取所有工具):
# 默認行為 - 無需特定配置
npm run dev -- --fmp-token=YOUR_TOKEN
FMP_ACCESS_TOKEN=YOUR_TOKEN npm run dev
自定義端口配置
# 通過環境變量更改服務器端口
PORT=4000 npm run dev -- --fmp-token=YOUR_TOKEN
# 通過CLI參數更改服務器端口
npm run dev -- --port=4000 --fmp-token=YOUR_TOKEN
Docker使用
Docker部署支持所有配置方法,並能正確處理環境變量。
使用環境變量運行Docker
# 基本部署
docker run -p 8080:8080 -e FMP_ACCESS_TOKEN=YOUR_TOKEN your-image-name
# 使用服務器級動態模式
docker run -p 8080:8080 \
-e FMP_ACCESS_TOKEN=YOUR_TOKEN \
-e DYNAMIC_TOOL_DISCOVERY=true \
your-image-name
# 使用服務器級靜態模式
docker run -p 8080:8080 \
-e FMP_ACCESS_TOKEN=YOUR_TOKEN \
-e FMP_TOOL_SETS=search,company,quotes \
your-image-name
使用Docker Compose
創建一個docker-compose.yml文件:
version: "3.8"
services:
fmp-mcp:
image: your-image-name
ports:
- "8080:8080"
environment:
- FMP_ACCESS_TOKEN=YOUR_FMP_ACCESS_TOKEN
- PORT=8080
# 可選:服務器級模式強制
- DYNAMIC_TOOL_DISCOVERY=true # 所有會話使用動態模式
# 或者
- FMP_TOOL_SETS=search,company,quotes # 所有會話使用這些工具集
# 或者兩者都不設置以使用傳統模式(所有工具)
然後運行:
docker-compose up
使用.env文件與Docker Compose
創建一個.env文件:
FMP_ACCESS_TOKEN=YOUR_FMP_ACCESS_TOKEN
PORT=8080
# 可選:選擇一種服務器級模式
DYNAMIC_TOOL_DISCOVERY=true
# 或者
# FMP_TOOL_SETS=search,company,quotes
# 或者兩者都註釋掉以使用傳統模式
並在你的docker-compose.yml中引用它:
version: "3.8"
services:
fmp-mcp:
image: your-image-name
ports:
- "8080:8080"
env_file:
- .env
✨ 主要特性
- 全面覆蓋:可訪問24個類別下的253+個金融工具。
- 工具集過濾:僅加載所需工具,降低複雜性並提高性能。
- 即時數據:提供即時股票報價、市場數據和財務信息。
- 財務報表:包含損益表、資產負債表、現金流量表和財務比率。
- 市場分析:提供技術指標、分析師預測和市場表現指標。
- 經濟數據:涵蓋國債利率、經濟指標和宏觀經濟信息。
- 另類數據:包括ESG評分、內幕交易、國會交易和社會情緒。
📦 安裝指南
本地開發安裝
# 克隆並設置
git clone https://github.com/imbenrabi/Financial-Modeling-Prep-MCP-Server
cd Financial-Modeling-Prep-MCP-Server
npm install
npm run build
Docker部署
使用環境變量運行Docker
# 基本部署
docker run -p 8080:8080 -e FMP_ACCESS_TOKEN=YOUR_TOKEN your-image-name
使用Docker Compose
創建docker-compose.yml文件並運行docker-compose up。
💻 使用示例
基礎用法
初始化動態模式會話
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"clientInfo": {
"name": "my-client",
"version": "1.0.0"
},
"capabilities": {}
}
}'
高級用法
啟用工具集(動態模式)
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "enable_toolset",
"arguments": {
"toolset": "search"
}
}
}'
📚 詳細文檔
服務器架構
此MCP服務器採用由Smithery SDK支持的基於狀態會話的架構,用於管理請求/會話生命週期。資源重用通過以clientId(從訪問令牌派生)為鍵的客戶端級緩存處理。
關鍵特性
- 客戶端級緩存:每個
clientId維護一個McpServer/DynamicToolsetManager。無令牌請求使用每個請求的匿名ID(無重用)。 - 會話隔離:會話由SDK管理,但緩存不使用
sessionId。 - 狀態管理:會話在多個請求中保持其狀態。
- 模式強制:服務器級配置可以覆蓋會話級設置。
- 基於HTTP的協議:通過HTTP與JSON-RPC格式的消息進行通信。
- 動態工具管理:工具可以在每個會話的運行時加載/卸載。
請求流程
- 客戶端請求 → HTTP POST到
/mcp端點 - 會話管理 → 服務器根據配置創建或檢索會話(緩存和重用以
clientId為鍵) - 模式解析 → 服務器確定操作模式(動態/靜態/傳統)
- 工具註冊 → 根據解析的模式加載特定於會話的工具
- 請求處理 → 使用可用工具處理MCP請求
- 響應 → JSON-RPC響應發送回客戶端
配置與模式強制
服務器支持多種配置方法,具有明確的優先級層次結構,以確保可預測的行為。
服務器模式
服務器以三種模式之一運行:
- 🔀 動態模式 (
DYNAMIC_TOOL_DISCOVERY=true)- 僅從3個元工具開始:
enable_toolset、disable_toolset、get_toolset_status - 通過元工具調用按需加載工具
- 最適合:工具需求變化的靈活、特定任務的工作流
- 僅從3個元工具開始:
- 🔧 靜態模式 (
FMP_TOOL_SETS=search,company,quotes)- 在會話創建時預加載特定工具集
- 所有指定工具立即可用
- 最適合:具有可預測使用模式的已知、一致的工具需求
- 📚 傳統模式(默認,無特定配置)
- 在會話創建時加載所有253+個工具
- 與所有功能的最大兼容性
- 最適合:無需配置複雜性的全功能訪問
配置優先級
服務器在確定操作模式時遵循嚴格的優先級層次結構:
🥇 CLI參數(優先級最高)
↓
🥈 環境變量
↓
🥉 會話配置(優先級最低)
⚠️ 重要提示
當設置了服務器級配置(CLI參數或環境變量)時,它們將覆蓋所有會話級配置。這確保了服務器實例上所有會話的一致行為。
示例覆蓋場景:
# 使用CLI參數啟動服務器
npm run dev -- --dynamic-tool-discovery
# 所有會話請求將使用動態模式,無論會話配置如何
# 像{"FMP_TOOL_SETS": "search,company"}這樣的會話配置將被忽略
配置方法
- CLI參數(服務器級 - 覆蓋一切)
npm run dev -- --fmp-token=TOKEN --dynamic-tool-discovery
npm run dev -- --fmp-token=TOKEN --fmp-tool-sets=search,company,quotes
npm run dev -- --port=4000 --fmp-token=TOKEN
- 環境變量(服務器級 - 覆蓋會話配置)
DYNAMIC_TOOL_DISCOVERY=true npm run dev
FMP_TOOL_SETS=search,company,quotes npm run dev
- 會話配置(會話級 - 通過HTTP查詢參數)
# 查詢參數中的Base64編碼JSON配置
curl -X POST "http://localhost:8080/mcp?config=eyJEWU5BTUlDX1RPT0xfRElTQ09WRVJZIjoidHJ1ZSJ9"
⚠️ 配置警告
- 服務器級模式是全局的:它們會影響服務器實例上的所有會話。
- 會話配置被忽略:當服務器級模式激活時,會話配置將被忽略。
- 不允許混合:當服務器級強制激活時,不同會話不能有不同的模式。
- 需要重啟:更改服務器級配置需要重啟服務器。
選擇性工具加載
雖然MCP客戶端可以自動過濾工具,但大型工具集可能會影響性能。為了優化體驗,你可以指定要加載的工具類別,而不是一次加載所有253個工具:
可用工具集
| 工具集 | 描述 | 示例工具 |
|---|---|---|
search |
搜索與目錄 | 搜索股票、公司查找、符號目錄 |
company |
公司簡介與信息 | 公司簡介、高管信息、員工數量 |
quotes |
即時報價 | 即時股票價格、市場數據、價格變化 |
statements |
財務報表 | 損益表、資產負債表、現金流量、比率 |
calendar |
財務日曆 | 收益日曆、股息、首次公開募股、股票拆分 |
charts |
價格圖表與歷史 | 歷史價格、技術圖表、市場走勢 |
news |
財經新聞 | 市場新聞、新聞稿、財經文章 |
analyst |
分析師覆蓋 | 價格目標、評級、分析師預測 |
market-performance |
市場表現 | 行業表現、漲幅榜、跌幅榜、最活躍 |
insider-trades |
內幕交易 | 公司內幕活動、所有權變更 |
institutional |
機構持股 | 13F文件、基金持股、機構所有權 |
indexes |
市場指數 | 標準普爾500指數、納斯達克指數、道瓊斯指數、指數成分股 |
economics |
經濟數據 | 國債利率、GDP、通貨膨脹、經濟指標 |
crypto |
加密貨幣 | 加密貨幣價格、市場數據、數字資產 |
forex |
外匯 | 貨幣對、匯率、外匯數據 |
commodities |
商品 | 黃金、石油、農產品、期貨 |
etf-funds |
ETF與共同基金 | 基金持股、業績、基金信息 |
esg |
ESG與可持續性 | 環境、社會、治理評級 |
technical-indicators |
技術指標 | RSI、SMA、EMA、MACD、布林帶 |
senate |
政府交易 | 國會和參議院交易披露 |
sec-filings |
SEC文件 | 10-K、10-Q、8-K文件、監管文件 |
earnings |
收益與財報 | 收益報告、財報電話記錄 |
dcf |
DCF估值 | 貼現現金流模型、估值 |
bulk |
批量數據 | 大規模數據下載用於分析 |
動態工具集管理(BETA)
🚧 此功能目前處於BETA階段。API和行為可能會在未來版本中更改。
動態工具集管理功能允許你在運行時啟用和禁用工具類別,而不是在啟動時預先配置它們。這提供了更大的靈活性,並可以通過僅在需要時加載所需工具來幫助優化性能。
工作原理
當啟用動態工具集管理時,每個會話僅從3個元工具開始:
enable_toolset- 在運行時啟用特定工具集disable_toolset- 禁用先前啟用的工具集get_toolset_status- 檢查當前哪些工具集處於活動狀態
AI助手可以使用這些元工具在其會話中根據不同任務動態加載和卸載特定工具類別。
配置選項
服務器級配置(影響所有會話)
命令行參數:
# 為所有會話啟用動態工具集管理
npm run dev -- --fmp-token=YOUR_TOKEN --dynamic-tool-discovery
# 生產部署
node dist/index.js --fmp-token=YOUR_TOKEN --dynamic-tool-discovery
環境變量:
# 設置環境變量
export DYNAMIC_TOOL_DISCOVERY=true
export FMP_ACCESS_TOKEN=YOUR_TOKEN
npm run dev
# 或者內聯
DYNAMIC_TOOL_DISCOVERY=true FMP_ACCESS_TOKEN=YOUR_TOKEN npm start
Docker:
# docker-compose.yml
version: "3.8"
services:
fmp-mcp:
image: your-image-name
ports:
- "8080:8080"
environment:
- FMP_ACCESS_TOKEN=YOUR_FMP_ACCESS_TOKEN
- DYNAMIC_TOOL_DISCOVERY=true # 為所有會話啟用
會話級配置(無服務器覆蓋時)
當未設置服務器級動態模式時,各個會話可以請求動態模式:
# Base64編碼: {"DYNAMIC_TOOL_DISCOVERY":"true"}
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",...}'
示例工作流
- 以動態模式啟動服務器:
DYNAMIC_TOOL_DISCOVERY=true npm start
- AI助手初始化會話並獲取元工具:
// 響應僅包含3個元工具:
{
"tools": [
{ "name": "enable_toolset", "description": "啟用特定工具集" },
{ "name": "disable_toolset", "description": "禁用工具集" },
{ "name": "get_toolset_status", "description": "檢查活動工具集" }
]
}
- AI助手啟用所需工具集:
// 啟用搜索工具集
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"enable_toolset","arguments":{"toolset":"search"}}}
// 啟用報價工具集
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"enable_toolset","arguments":{"toolset":"quotes"}}}
- AI助手使用啟用的工具:
// 現在可以使用搜索和報價工具
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"searchSymbol","arguments":{"query":"AAPL"}}}
{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"getQuote","arguments":{"symbol":"AAPL"}}}
- AI助手可以禁用未使用的工具集:
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "disable_toolset",
"arguments": { "toolset": "search" }
}
}
好處
- 性能提升:每個會話最初加載較少的工具,啟動更快。
- 靈活性:僅加載當前任務所需的工具。
- 資源高效:通過在每個會話中禁用未使用的工具集,減少內存使用。
- 任務導向:非常適合處理特定財務分析任務的AI助手。
- 會話隔離:每個會話可以有不同的活動工具集。
發起HTTP請求
服務器在/mcp端點公開了一個模型上下文協議端點,接受JSON-RPC格式的請求。每個請求可以通過查詢參數包含可選的會話配置。
端點格式
POST http://localhost:8080/mcp[?config=BASE64_ENCODED_CONFIG]
必需的請求頭
Content-Type: application/json
Accept: application/json, text/event-stream
會話配置
會話配置以Base64編碼的JSON形式作為config查詢參數傳遞。當沒有服務器級模式強制時,這允許每個會話有不同的工具配置。
配置示例
- 動態模式會話:
# 配置: {"DYNAMIC_TOOL_DISCOVERY":"true"}
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
# 結果: eyJEWU5BTUlDX1RPT0xfRElTQ09WRVJZIjoidHJ1ZSJ9
- 靜態模式會話:
# 配置: {"FMP_TOOL_SETS":"search,company,quotes"}
CONFIG_BASE64=$(echo -n '{"FMP_TOOL_SETS":"search,company,quotes"}' | base64)
# 結果: eyJGTVBfVE9PTF9TRVRTIjoic2VhcmNoLGNvbXBhbnkscXVvdGVzIn0=
- 傳統模式會話:
# 配置: {} (空對象)
CONFIG_BASE64=$(echo -n '{}' | base64)
# 結果: e30=
請求示例
1. 初始化動態模式會話
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"clientInfo": {
"name": "my-client",
"version": "1.0.0"
},
"capabilities": {}
}
}'
預期響應:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": {
"listChanged": true
}
},
"serverInfo": {
"name": "fmp-mcp-server",
"version": "1.0.0"
}
}
}
2. 列出可用工具
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}'
預期響應(動態模式):
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "enable_toolset",
"description": "在運行時啟用特定工具集",
"inputSchema": {
"type": "object",
"properties": {
"toolset": {
"type": "string",
"description": "要啟用的工具集名稱"
}
},
"required": ["toolset"]
}
},
{
"name": "disable_toolset",
"description": "禁用先前啟用的工具集"
},
{
"name": "get_toolset_status",
"description": "檢查當前哪些工具集處於活動狀態"
}
]
}
}
3. 啟用工具集(動態模式)
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "enable_toolset",
"arguments": {
"toolset": "search"
}
}
}'
4. 調用金融工具
CONFIG_BASE64=$(echo -n '{"FMP_TOOL_SETS":"search,quotes"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "searchSymbol",
"arguments": {
"query": "Apple"
}
}
}'
5. 獲取股票報價
CONFIG_BASE64=$(echo -n '{"FMP_TOOL_SETS":"quotes"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "getQuote",
"arguments": {
"symbol": "AAPL"
}
}
}'
會話和客戶端行為
- 會話持久性:每個唯一的
config參數創建一個單獨的會話(由SDK管理)。 - 工具狀態:在動態模式下,啟用/禁用的工具集可能會在相同的
clientId的請求中重用。 - 隔離性:會話不會相互干擾工具配置;緩存以
clientId為鍵。 - 緩存:客戶端存儲(LRU + TTL)為每個
clientId維護一個McpServer/DynamicToolsetManager。
錯誤處理
常見錯誤響應:
// 無效配置
{
"jsonrpc": "2.0",
"error": {
"code": -32000,
"message": "錯誤請求: 無效配置"
},
"id": null
}
// 工具不可用
{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "未找到工具: toolName"
},
"id": 1
}
// 缺少必需參數
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "缺少必需參數: symbol"
},
"id": 2
}
可用工具
⚠️ 重要提示
服務器級配置覆蓋會話配置:
- 當使用CLI參數(
--dynamic-tool-discovery,--fmp-tool-sets)時,它們適用於所有會話。- 當設置環境變量(
DYNAMIC_TOOL_DISCOVERY,FMP_TOOL_SETS)時,它們適用於所有會話。- 通過查詢參數的會話級配置在服務器級模式激活時將被忽略。
- 這確保了服務器實例上所有會話的一致行為。
配置優先級:CLI參數 > 環境變量 > 會話配置
示例:如果服務器以
--dynamic-tool-discovery啟動,所有會話將使用動態模式,即使它們在會話配置中請求{"FMP_TOOL_SETS":"search,company"}。
此MCP為AI助手提供了以下工具來訪問金融數據:
搜索工具
- searchSymbol:按名稱或代碼搜索股票代碼
- searchName:按名稱搜索公司
- searchCIK:按CIK編號搜索公司
- searchCUSIP:按CUSIP編號搜索證券
- searchISIN:按ISIN編號搜索證券
- stockScreener:根據各種標準篩選股票
- searchExchangeVariants:搜索不同交易所的符號變體
- searchCompaniesByName:按名稱搜索公司
- searchCompaniesBySymbol:按符號搜索公司
- searchCompaniesByCIK:按CIK編號搜索公司
目錄和符號列表
- getCompanySymbols:獲取所有公司符號列表
- getFinancialStatementSymbols:獲取有可用財務報表的公司列表
- getCIKList:獲取SEC註冊實體的CIK編號列表
- getSymbolChanges:獲取股票符號變更列表
- getETFList:獲取ETF列表
- getActivelyTradingList:獲取活躍交易公司列表
- getEarningsTranscriptList:獲取有收益財報的公司列表
- getAvailableExchanges:獲取可用交易所列表
- getAvailableSectors:獲取可用行業列表
- getAvailableIndustries:獲取可用產業列表
- getAvailableCountries:獲取可用國家列表
- getAvailableTranscriptSymbols:獲取有可用財報的符號列表
- getAllIndustryClassification:獲取所有行業分類
- getIndustryClassificationList:獲取行業分類列表
公司信息
- getCompanyProfile:獲取詳細的公司簡介信息
- getCompanyExecutives:獲取公司高管信息
- getCompanyDescription:獲取公司描述
- getCompanyOutlook:獲取公司前景信息
- getCompanyRating:獲取公司評級信息
- getHistoricalRating:獲取公司歷史評級
- getCompanyUpgradesDowngrades:獲取公司升級和降級信息
- getCompanyGrade:獲取公司評分信息
- getCompanyPeers:獲取與給定公司類似的公司
- getMarketCap:獲取公司市值
- getHistoricalMarketCap:獲取歷史市值
- getSharesFloat:獲取公司流通股信息
- getHistoricalSharesFloat:獲取歷史流通股信息
- getEarningsSurprises:獲取歷史收益驚喜
- getEarningCallTranscript:獲取特定的收益財報
- getEarningCallTranscriptsBySymbol:獲取某個符號的所有收益財報
- getCompanyNotes:獲取公司備註
- getCompanyProfileByCIK:按CIK獲取公司簡介
- getCompanySECProfile:獲取公司SEC簡介
- getDelistedCompanies:獲取退市公司列表
- getEmployeeCount:獲取公司員工數量
- getHistoricalEmployeeCount:獲取歷史員工數量
- getBatchMarketCap:批量獲取市值數據
- getAllShareFloat:獲取所有流通股數據
- getLatestMergersAcquisitions:獲取最新的併購信息
- searchMergersAcquisitions:搜索併購信息
- getExecutiveCompensation:獲取高管薪酬數據
- getExecutiveCompensationBenchmark:獲取高管薪酬基準數據
- getAcquisitionOwnership:獲取收購所有權數據
財務報表
- getIncomeStatement:獲取公司損益表
- getBalanceSheet:獲取公司資產負債表
- getBalanceSheetStatement:獲取公司資產負債表
- getCashFlowStatement:獲取公司現金流量表
- getIncomeStatementAsReported:獲取報告的損益表
- getBalanceSheetAsReported:獲取報告的資產負債表
- getBalanceSheetStatementAsReported:獲取報告的資產負債表
- getCashFlowStatementAsReported:獲取報告的現金流量表
- getFullFinancialStatementAsReported:獲取報告的完整財務報表
- getFinancialStatementFullAsReported:獲取報告的完整財務報表
- getFinancialReportDates:獲取可用財務報告的日期
- getFinancialReportsDates:獲取可用財務報告的日期
- getLatestFinancialStatements:獲取最新財務報表
- getIncomeStatementTTM:獲取過去十二個月的損益表
- getBalanceSheetStatementTTM:獲取過去十二個月的資產負債表
- getCashFlowStatementTTM:獲取過去十二個月的現金流量表
- getIncomeStatementGrowth:獲取損益表增長
- getBalanceSheetStatementGrowth:獲取資產負債表增長
- getCashFlowStatementGrowth:獲取現金流量表增長
- getFinancialStatementGrowth:獲取財務報表增長
- getFinancialReportJSON:以JSON格式獲取財務報告
- getFinancialReportXLSX:以XLSX格式獲取財務報告
- getRevenueProductSegmentation:獲取收入產品細分
- getRevenueGeographicSegmentation:獲取收入地理細分
財務指標和分析
- getKeyMetrics:獲取公司關鍵財務指標
- getKeyMetricsTTM:獲取過去十二個月的關鍵指標
- getRatios:獲取公司財務比率
- getFinancialRatios:獲取公司財務比率
- getFinancialRatiosTTM:獲取過去十二個月的財務比率
- getFinancialGrowth:獲取財務增長指標
- getIncomeStatementGrowth:獲取損益表增長指標
- getBalanceSheetGrowth:獲取資產負債表增長指標
- getCashFlowStatementGrowth:獲取現金流量表增長指標
- getDCFValuation:獲取股票的DCF(貼現現金流)估值
- getLeveredDCFValuation:獲取股票的槓桿DCF估值
- calculateCustomDCF:使用用戶定義的參數計算自定義DCF估值
- calculateCustomLeveredDCF:使用用戶定義的參數計算自定義槓桿DCF估值
- getEnterpriseValue:獲取公司企業價值
- getFinancialScore:獲取公司財務評分
- getFinancialScores:獲取公司財務評分
- getOwnerEarnings:獲取公司所有者收益
技術指標
- getSMA:獲取簡單移動平均線(SMA)指標
- getEMA:獲取指數移動平均線(EMA)指標
- getWMA:獲取加權移動平均線(WMA)指標
- getDEMA:獲取雙指數移動平均線(DEMA)指標
- getTEMA:獲取三指數移動平均線(TEMA)指標
- getWilliams:獲取威廉姆斯%R指標
- getADX:獲取平均方向指數(ADX)指標
- getStandardDeviation:獲取標準差指標
- getRSI:獲取相對強弱指數(RSI)指標
報價和價格數據
- getQuote:獲取當前股票報價信息
- getBatchQuotes:獲取多個符號的報價
- getQuoteShort:獲取縮寫的股票報價信息
- getBatchQuotesShort:獲取多個符號的縮寫報價
- getHistoricalPrice:獲取歷史價格數據
- getHistoricalPriceChart:獲取歷史價格圖表數據
- getHistoricalDailyPrice:獲取歷史每日價格數據
- getHistoricalStockSplits:獲取歷史股票拆分信息
- getHistoricalDividends:獲取歷史股息信息
- getTechnicalIndicator:獲取股票的技術指標
- getLightChart:獲取價格圖表的輕量級版本
- getFullChart:獲取價格圖表的完整版本
- getUnadjustedChart:獲取未調整的價格圖表
- getDividendAdjustedChart:獲取股息調整後的價格圖表
- getIntradayChart:獲取日內價格圖表
- getAftermarketQuote:獲取盤後報價
- getAftermarketTrade:獲取盤後交易數據
- getBatchAftermarketQuote:批量獲取盤後報價
- getBatchAftermarketTrade:批量獲取盤後交易數據
- getStockPriceChange:獲取股票價格變化信息
市場指數和表現
- getIndexList:獲取所有市場指數列表
- getIndexQuotes:獲取市場指數報價
- getIndexQuote:獲取特定指數的報價
- getIndexShortQuote:獲取指數的縮寫報價
- getAllIndexQuotes:獲取所有市場指數的報價
- getSP500Constituents:獲取標準普爾500指數成分股
- getHistoricalSP500Changes:獲取標準普爾500指數的歷史變化
- getNasdaqConstituents:獲取納斯達克指數成分股
- getDowJonesConstituents:獲取道瓊斯指數成分股
- getHistoricalNasdaqChanges:獲取納斯達克指數的歷史變化
- getHistoricalDowJonesChanges:獲取道瓊斯指數的歷史變化
- getSectorPerformance:獲取行業表現數據
- getHistoricalSectorPerformance:獲取歷史行業表現
- getBiggestGainers:獲取漲幅最大的股票
- getBiggestLosers:獲取跌幅最大的股票
- getMostActiveStocks:獲取最活躍的股票
- getHistoricalIndexFullChart:獲取歷史指數完整圖表
- getHistoricalIndexLightChart:獲取歷史指數輕量級圖表
- getIndex1MinuteData:獲取指數的1分鐘數據
- getIndex5MinuteData:獲取指數的5分鐘數據
- getIndex1HourData:獲取指數的1小時數據
- getSectorPerformanceSnapshot:獲取行業表現快照
- getSectorPESnapshot:獲取行業市盈率快照
- getIndustryPerformanceSnapshot:獲取產業表現快照
- getIndustryPerformanceSummary:獲取產業表現總結
- getIndustryPESnapshot:獲取產業市盈率快照
- getHistoricalIndustryPerformance:獲取歷史產業表現
- getHistoricalIndustryPE:獲取歷史產業市盈率
- getHistoricalSectorPE:獲取歷史行業市盈率
市場數據
- getMarketHours:獲取特定交易所的市場交易時間
- getExchangeMarketHours:獲取特定交易所的市場交易時間
- getHolidaysByExchange:獲取特定交易所的假期信息,可選擇日期範圍過濾
- getAllExchangeMarketHours:獲取所有交易所的市場交易時間
- getEarningsCalendar:獲取收益公告日曆
- getIPOCalendar:獲取首次公開募股日曆
- getStockSplitCalendar:獲取股票拆分日曆
- getDividendCalendar:獲取股息日曆
- getEconomicCalendar:獲取經濟事件日曆
- getIPODisclosures:獲取首次公開募股披露信息
- getIPOProspectuses:獲取首次公開募股招股說明書
新聞和新聞稿
- getFMPArticles:獲取FMP的財經新聞文章
- getGeneralNews:獲取一般財經新聞
- getStockNews:獲取特定股票的新聞
- getStockNewsSentiment:獲取帶有情緒分析的新聞
- getPressReleases:獲取公司新聞稿
- searchStockNews:搜索股票新聞
- searchPressReleases:搜索新聞稿
- getCryptoNews:獲取加密貨幣新聞
- searchCryptoNews:搜索加密貨幣新聞
- getForexNews:獲取外匯新聞
- searchForexNews:搜索外匯新聞
SEC文件
- getLatestFinancialFilings:獲取最新的財務文件
- getFilingsBySymbol:按符號獲取文件
- getFilingsByCIK:按CIK編號獲取文件
- getFilingsByFormType:按表格類型獲取文件
- getLatest8KFilings:獲取最新的8-K文件
- getSecFilingExtract:獲取SEC文件摘錄
- getFilingExtractAnalyticsByHolder:按持有人獲取文件摘錄分析
內幕和機構交易
- getInsiderTrading:獲取內幕交易數據
- getInsiderRoster:獲取公司內幕人員名單
- getInsiderRosterStatistics:獲取內幕人員名單統計信息
- getInsiderTransactionTypes:獲取內幕交易類型
- getInsiderOwnership:獲取內幕人員所有權信息
- getInstitutionalOwnership:獲取機構所有權數據
- getInstitutionalHolders:獲取公司的機構持有人
- getInstitutionalHoldersList:獲取機構持有人列表
- getInstitutionalHolderPortfolioDates:獲取機構持有人的投資組合日期
- get13FFilings:獲取13F文件
- get13FDates:獲取13F文件的日期
- getForm13FFilingDates:獲取13F文件的提交日期
- getLatestInsiderTrading:獲取最新的內幕交易數據
- searchInsiderTrades:搜索內幕交易
- searchInsiderTradesByName:按報告人姓名搜索內幕交易
- getInsiderTradeStatistics:獲取內幕交易統計信息
- getLatestInstitutionalFilings:獲取最新的機構文件
- getHolderPerformanceSummary:獲取持有人表現,總結
- getHolderIndustryBreakdown:獲取持有人行業細分
- getPositionsSummary:獲取持倉總結
ETF和基金
- getETFHolder:獲取ETF持有人信息
- getETFSectorWeighting:獲取ETF行業權重
- getETFCountryWeighting:獲取ETF國家權重
- getETFExposure:獲取ETF對股票的敞口
- getFundInfo:獲取基金信息
- getFundHolder:獲取基金持有人信息
- getFundSectorWeighting:獲取基金行業權重
- getFundHoldings:獲取基金持倉
- getFundCountryAllocation:獲取基金國家分配
- getFundAssetExposure:獲取基金資產敞口
- getDisclosure:獲取最新的基金披露持有人信息
- getFundDisclosure:按年/季度獲取全面的基金披露數據
- searchFundDisclosures:按持有人姓名搜索基金披露
- getFundDisclosureDates:獲取基金披露日期(可選CIK)
- getETFHoldersBulk:批量獲取ETF持有人信息
- getETFQuotes:獲取ETF報價
- getMutualFundQuotes:獲取共同基金報價
政府交易
- getGovernmentTradingList:獲取政府交易列表
- getSenateTrading:獲取參議院交易數據
- getHouseTrading:獲取眾議院交易數據
- getSenateTrades:獲取參議院交易信息
- getSenateTradesByName:按姓名獲取參議院交易信息
- getHouseTrades:獲取眾議院交易信息
- getHouseTradesByName:按姓名獲取眾議院交易信息
- getLatestSenateDisclosures:獲取最新的參議院披露信息
- getLatestHouseDisclosures:獲取最新的眾議院披露信息
加密貨幣和外匯
- getCryptocurrencyList:獲取加密貨幣列表
- getCryptocurrencyQuote:獲取加密貨幣報價
- getCryptocurrencyShortQuote:獲取縮寫的加密貨幣報價
- getCryptocurrencyBatchQuotes:獲取多個加密貨幣的報價
- getCryptocurrencyHistoricalLightChart:獲取加密貨幣的輕量級歷史圖表
- getCryptocurrencyHistoricalFullChart:獲取加密貨幣的完整歷史圖表
- getCryptocurrency1MinuteData:獲取加密貨幣的1分鐘數據
- getCryptocurrency5MinuteData:獲取加密貨幣的5分鐘數據
- getCryptocurrency1HourData:獲取加密貨幣的1小時數據
- getForexList:獲取外匯對列表
- getForexQuote:獲取外匯對報價
- getForexShortQuote:獲取縮寫的外匯報價
- getForexBatchQuotes:獲取多個外匯對的報價,可選擇縮寫格式
- getForexHistoricalLightChart:獲取外匯的輕量級歷史圖表,可選擇日期範圍
- getForexHistoricalFullChart:獲取外匯的完整歷史圖表,可選擇日期範圍
- getForex1MinuteData:獲取外匯的1分鐘數據,可選擇日期範圍
- getForex5MinuteData:獲取外匯的5分鐘數據,可選擇日期範圍
- getForex1HourData:獲取外匯的1小時數據,可選擇日期範圍
收益
- getEarningsReports:獲取收益報告
- getEarningsTranscript:獲取收益財報
- getEarningsTranscriptDates:獲取收益財報日期
- getLatestEarningsTranscripts:獲取最新的收益財報
- getEarningsSurprisesBulk:批量獲取收益驚喜
特殊數據集
- getCOTList:獲取交易員持倉報告(COT)列表
- getCOTReports:獲取特定符號的COT報告,可選擇日期範圍過濾
- getCOTAnalysis:獲取特定符號的COT分析,可選擇日期範圍過濾
- getGovernmentTradingList:獲取政府交易列表
- getSenateTrading:獲取參議院交易數據
- getHouseTrading:獲取眾議院交易數據
- getESGDisclosures:獲取特定符號的ESG披露信息
- getESGRatings:獲取特定符號的ESG評級
- getESGBenchmarks:獲取ESG基準數據,可選擇年份過濾
商品
- listCommodities:獲取所有可用商品的列表,包括其符號、名稱、交易所、交易月份和貨幣
經濟
- getTreasuryRates:獲取國債利率,可選擇日期範圍過濾
- getEconomicIndicators:按名稱獲取經濟指標,可選擇日期範圍過濾
- getEconomicCalendar:獲取經濟事件日曆,可選擇日期範圍過濾
- getMarketRiskPremium:獲取市場風險溢價數據
籌資
- getLatestCrowdfundingCampaigns:獲取最新的眾籌活動
- searchCrowdfundingCampaigns:搜索眾籌活動
- getCrowdfundingCampaignsByCIK:按CIK獲取眾籌活動
- getLatestEquityOfferings:獲取最新的股權發行
- searchEquityOfferings:搜索股權發行
- getEquityOfferingsByCIK:按CIK獲取股權發行
批量數據工具
重要說明:所有批量端點以CSV格式返回原始字符串數據,而不是解析後的JSON對象。此端點以CSV文件形式返回響應。提供的示例響應代表單個記錄。這種設計保留了原始FMP API格式,併為大型數據集提供了更好的性能。
- getCompanyProfilesBulk:批量獲取公司簡介(CSV格式)
- getStockRatingsBulk:批量獲取股票評級(CSV格式)
- getDCFValuationsBulk:批量獲取DCF估值(CSV格式)
- getFinancialScoresBulk:批量獲取財務評分(CSV格式)
- getPriceTargetSummariesBulk:批量獲取價格目標總結(CSV格式)
- getUpgradesDowngradesConsensusBulk:批量獲取升級/降級共識(CSV格式)
- getKeyMetricsTTMBulk:批量獲取關鍵指標TTM(CSV格式)
- getRatiosTTMBulk:批量獲取比率TTM(CSV格式)
- getStockPeersBulk:批量獲取股票同行(CSV格式)
- getEODDataBulk:批量獲取每日收盤價格數據(CSV格式)
- getIncomeStatementsBulk:批量獲取損益表(CSV格式)
- getIncomeStatementGrowthBulk:批量獲取損益表增長數據(CSV格式)
- getBalanceSheetStatementsBulk:批量獲取資產負債表(CSV格式)
- getBalanceSheetGrowthBulk:批量獲取資產負債表增長數據(CSV格式)
- getCashFlowStatementsBulk:批量獲取現金流量表(CSV格式)
- getCashFlowGrowthBulk:批量獲取現金流量增長數據(CSV格式)
- getFinancialRatiosBulk:批量獲取財務比率(CSV格式)
- getKeyMetricsBulk:批量獲取關鍵指標(CSV格式)
- getFinancialGrowthBulk:批量獲取財務增長數據(CSV格式)
獲取金融建模準備訪問令牌
要獲取金融建模準備訪問令牌:
- 訪問金融建模準備網站
- 點擊“註冊”創建賬戶
- 驗證你的電子郵件地址
- 登錄後,導航到你的儀表盤以找到你的API密鑰
- 如需更多數據訪問權限,考慮升級到付費計劃(入門級、高級版、終極版或企業版)
金融建模準備提供不同的定價層級,具有不同的數據訪問級別和API調用限制。有關更多信息,請訪問FMP定價頁面。
貢獻代碼
歡迎貢獻代碼!以下是貢獻的步驟:
- 分叉倉庫
- 創建你的功能分支 (
git checkout -b feature/amazing-feature) - 提交你的更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打開拉取請求
每個拉取請求都會觸發一個GitHub Actions工作流,用於驗證構建過程。
開發設置
# 克隆倉庫
git clone https://github.com/imbenrabi/Financial-Modeling-Prep-MCP-Server
cd Financial-Modeling-Prep-MCP-Server
# 安裝依賴
npm install
# 構建項目
npm run build
# 使用你的API密鑰在開發模式下運行
FMP_ACCESS_TOKEN=your_api_key npm run dev
# 或者通過CLI參數直接指定API密鑰
npm run dev -- --fmp-token=your_api_key
開發服務器默認在端口8080上啟動。你可以使用PORT環境變量配置端口:
PORT=4000 FMP_ACCESS_TOKEN=your_api_key npm run dev
帶有服務器級模式強制的開發
服務器級靜態模式(所有會話使用特定工具集):
# 環境變量方法
FMP_TOOL_SETS=search,company,quotes FMP_ACCESS_TOKEN=your_api_key npm run dev
# CLI參數方法(優先級更高)
npm run dev -- --fmp-token=your_api_key --fmp-tool-sets=search,company,quotes
服務器級動態模式(所有會話從元工具開始):
# 環境變量方法
DYNAMIC_TOOL_DISCOVERY=true FMP_ACCESS_TOKEN=your_api_key npm run dev
# CLI參數方法(優先級更高)
npm run dev -- --fmp-token=your_api_key --dynamic-tool-discovery
會話級配置(默認 - 無服務器強制):
# 啟動服務器而不進行模式強制
npm run dev -- --fmp-token=your_api_key
# 各個會話可以通過HTTP請求指定自己的配置
測試不同配置
開發時,你可以測試不同的配置場景:
- 測試會話級配置:
# 啟動服務器而不進行強制
npm run dev -- --fmp-token=your_api_key
# 測試動態模式會話
CONFIG_BASE64=$(echo -n '{"DYNAMIC_TOOL_DISCOVERY":"true"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" -d '...'
# 測試靜態模式會話
CONFIG_BASE64=$(echo -n '{"FMP_TOOL_SETS":"search,quotes"}' | base64)
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" -d '...'
- 測試服務器級強制:
# 以服務器級動態模式,啟動
npm run dev -- --fmp-token=your_api_key --dynamic-tool-discovery
# 所有會話將使用動態模式,無論會話配置如何
curl -X POST "http://localhost:8080/mcp?config=${CONFIG_BASE64}" -d '...'
運行測試
項目使用Vitest進行測試。你可以通過以下幾種方式運行測試:
# 在監視模式下運行測試(用於開發)
npm test
# 運行一次測試
npm run test:run
# 運行測試並生成覆蓋率報告
npm run test:coverage
覆蓋率報告將在coverage/目錄中生成,並在終端中顯示。你可以在瀏覽器中打開coverage/index.html查看詳細的HTML覆蓋率報告。
問題和錯誤報告
如果你遇到任何錯誤、有功能請求或需要項目幫助,請在GitHub上打開一個問題: 📝 打開問題
報告問題時,請包括:
- 問題或功能請求的清晰描述
- 重現問題的步驟(如果適用)
- 你的環境詳細信息(Node.js版本、操作系統)
- 任何相關的錯誤消息或日誌
- 預期行為與實際行為
這有助於我們更快地理解和解決問題。
🔧 技術細節
服務器架構技術細節
此MCP服務器採用基於狀態會話的架構,由Smithery SDK提供支持,用於管理請求和會話的生命週期。資源重用通過客戶端級緩存實現,該緩存以clientId(從訪問令牌派生)為鍵。
客戶端級緩存
每個clientId對應一個McpServer和DynamicToolsetManager實例。對於無令牌的請求,使用每個請求的匿名ID,且不會進行資源重用。
會話隔離
會話由SDK管理,但緩存機制不依賴於sessionId。這確保了會話之間的獨立性,避免了會話數據的相互干擾。
狀態管理
會話在多個請求之間保持其狀態,使得服務器能夠處理複雜的業務邏輯。例如,在進行一系列的金融數據查詢時,會話可以記住之前的查詢條件和上下文信息。
模式強制
服務器級配置可以覆蓋會話級設置,確保所有會話遵循統一的規則。例如,當服務器設置為動態模式時,所有會話都將使用動態模式,無論其會話級配置如何。
基於HTTP的協議
服務器通過HTTP協議與客戶端進行通信,使用JSON-RPC格式的消息。這種標準化的協議使得服務器與客戶端之間的通信更加穩定和可靠。
動態工具管理
工具可以在運行時根據會話的需求進行加載和卸載。這為服務器提供了更高的靈活性,能夠根據不同的業務場景動態調整工具集。
請求流程
- 客戶端請求:客戶端通過HTTP POST請求將請求發送到
/mcp端點。 - 會話管理:服務器根據配置創建或檢索會話,緩存和重用機制以
clientId為鍵。 - 模式解析:服務器根據配置確定操作模式,如動態模式、靜態模式或傳統模式。
- 工具註冊:根據解析的模式,加載特定於會話的工具。
- 請求處理:使用可用的工具處理MCP請求。
- 響應:服務器將處理結果以JSON-RPC格式的響應發送回客戶端。
配置與模式強制技術細節
服務器支持多種配置方法,包括CLI參數、環境變量和會話配置。這些配置方法具有明確的優先級層次結構,以確保服務器的行為可預測。
服務器模式
服務器可以在三種模式下運行:動態模式、靜態模式和傳統模式。
動態模式
當DYNAMIC_TOOL_DISCOVERY設置為true時,服務器進入動態模式。在這種模式下,服務器僅初始化3個元工具:enable_toolset、disable_toolset和get_toolset_status。工具可以在運行時根據需要通過元工具調用進行加載和卸載。這種模式適用於工具需求變化頻繁的場景,提供了最大的靈活性。
靜態模式
通過設置FMP_TOOL_SETS參數,服務器可以進入靜態模式。在靜態模式下,服務器在會話創建時預加載指定的工具集。所有指定的工具在會話開始時立即可用,適用於工具需求固定的場景。
傳統模式
如果沒有設置特定的配置,服務器將默認進入傳統模式。在傳統模式下,服務器在會話創建時加載所有253+個工具,提供了最大的功能覆蓋,但可能會影響性能。
配置優先級
服務器在確定操作模式時,遵循嚴格的優先級層次結構:CLI參數 > 環境變量 > 會話配置。這確保了服務器級配置能夠覆蓋會話級配置,保證了所有會話的一致性。
配置警告
- 服務器級模式具有全局性,會影響服務器上的所有會話。
- 當服務器級模式激活時,會話級配置將被忽略。
- 不允許在不同會話中混合使用不同的模式。
- 更改服務器級配置需要重啟服務器。
選擇性工具加載技術細節
為了優化性能,服務器支持選擇性工具加載。用戶可以指定要加載的工具類別,而不是一次性加載所有253個工具。
可用工具集
服務器提供了多個工具集,包括搜索工具、公司信息工具、報價工具等。每個工具集包含一組相關的工具,用於滿足不同的業務需求。
工具集過濾
MCP客戶端可以自動過濾工具,但對於大型工具集,這可能會影響性能。通過選擇性工具加載,用戶可以根據實際需求選擇加載的工具集,減少不必要的資源消耗。
動態工具集管理技術細節
動態工具集管理是服務器的一個重要特性,允許在運行時動態加載和卸載工具。
工作原理
當啟用動態工具集管理時,每個會話從3個元工具開始:enable_toolset、disable_toolset和get_toolset_status。AI助手可以使用這些元工具在會話中根據不同的任務動態加載和卸載特定的工具類別。
配置選項
動態工具集管理可以通過服務器級配置或會話級配置啟用。
服務器級配置
可以通過命令行參數、環境變量或Docker配置來啟用服務器級動態工具集管理。這將影響服務器上的所有會話。
會話級配置
當沒有設置服務器級動態模式時,各個會話可以通過HTTP請求的查詢參數請求動態模式。
示例工作流
以下是一個動態工具集管理的示例工作流:
- 以動態模式啟動服務器。
- AI助手初始化會話並獲取元工具。
- AI助手根據任務需求啟用所需的工具集。
- AI助手使用啟用的工具完成任務。
- AI助手可以根據需要禁用未使用的工具集,以釋放資源。
好處
動態工具集管理提供了更高的性能、靈活性和資源效率。每個會話可以根據實際需求動態調整工具集,減少了初始加載時間和內存使用。
發起HTTP請求技術細節
服務器通過/mcp端點接受JSON-RPC格式的HTTP請求。每個請求可以包含可選的會話配置,通過查詢參數傳遞。
端點格式
請求的端點格式為POST http://localhost:8080/mcp[?config=BASE64_ENCODED_CONFIG]。其中,config參數是Base64編碼的JSON配置。
必需的請求頭
請求必須包含Content-Type: application/json和Accept: application/json, text/event-stream頭,以確保請求和響應的格式正確。
會話配置
會話配置以Base64編碼的JSON形式作為config查詢參數傳遞。這允許每個會話有不同的工具配置,當沒有服務器級模式強制時,提供了更大的靈活性。
會話和客戶端行為
- 會話持久性:每個唯一的
config參數創建一個單獨的會話,由SDK管理。 - 工具狀態:在動態模式下,啟用/禁用的工具集可能會在相同的
clientId的請求中重用。 - 隔離性:會話之間不會相互干擾工具配置,緩存以
clientId為鍵。 - 緩存:客戶端存儲使用LRU + TTL策略,為每個
clientId維護一個McpServer和DynamicToolsetManager實例。
錯誤處理
服務器提供了詳細的錯誤處理機制,當請求出現問題時,會返回相應的錯誤信息。常見的錯誤包括無效配置、工具不可用和缺少必需參數等。
📄 許可證
本項目採用Apache License Version 2.0許可協議。
替代品












