金融建模准备MCP(模型上下文协议)服务器为AI助手提供了访问和分析金融数据、股票信息、公司基本面和市场洞察的能力,使人工智能能够更好地服务于金融领域。
对于生产环境,你可以通过Smithery注册表使用该MCP服务器,它提供了托管和管理的MCP服务器: 🚀 在Smithery上查看
Smithery是一个帮助开发者查找和交付旨在与AI代理通信的AI原生服务的平台。所有服务都遵循模型上下文协议(MCP)规范,并提供:
使用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 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.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文件:
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
# 克隆并设置
git clone https://github.com/imbenrabi/Financial-Modeling-Prep-MCP-Server
cd Financial-Modeling-Prep-MCP-Server
npm install
npm run build
# 基本部署
docker run -p 8080:8080 -e FMP_ACCESS_TOKEN=YOUR_TOKEN your-image-name
创建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(无重用)。sessionId。/mcp端点clientId为键)服务器支持多种配置方法,具有明确的优先级层次结构,以确保可预测的行为。
服务器以三种模式之一运行:
DYNAMIC_TOOL_DISCOVERY=true)
enable_toolset、disable_toolset、get_toolset_statusFMP_TOOL_SETS=search,company,quotes)
服务器在确定操作模式时遵循严格的优先级层次结构:
🥇 CLI参数(优先级最高)
↓
🥈 环境变量
↓
🥉 会话配置(优先级最低)
当设置了服务器级配置(CLI参数或环境变量)时,它们将覆盖所有会话级配置。这确保了服务器实例上所有会话的一致行为。
示例覆盖场景:
# 使用CLI参数启动服务器
npm run dev -- --dynamic-tool-discovery
# 所有会话请求将使用动态模式,无论会话配置如何
# 像{"FMP_TOOL_SETS": "search,company"}这样的会话配置将被忽略
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
# 查询参数中的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阶段。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
// 响应仅包含3个元工具:
{
"tools": [
{ "name": "enable_toolset", "description": "启用特定工具集" },
{ "name": "disable_toolset", "description": "禁用工具集" },
{ "name": "get_toolset_status", "description": "检查活动工具集" }
]
}
// 启用搜索工具集
{"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"}}}
// 现在可以使用搜索和报价工具
{"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"}}}
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "disable_toolset",
"arguments": { "toolset": "search" }
}
}
服务器在/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=
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"
}
}
}
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": "检查当前哪些工具集处于活动状态"
}
]
}
}
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"
}
}
}'
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"
}
}
}'
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为键。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助手提供了以下工具来访问金融数据:
重要说明:所有批量端点以CSV格式返回原始字符串数据,而不是解析后的JSON对象。此端点以CSV文件形式返回响应。提供的示例响应代表单个记录。这种设计保留了原始FMP 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上打开一个问题: 📝 打开问题
报告问题时,请包括:
这有助于我们更快地理解和解决问题。
此MCP服务器采用基于状态会话的架构,由Smithery SDK提供支持,用于管理请求和会话的生命周期。资源重用通过客户端级缓存实现,该缓存以clientId(从访问令牌派生)为键。
每个clientId对应一个McpServer和DynamicToolsetManager实例。对于无令牌的请求,使用每个请求的匿名ID,且不会进行资源重用。
会话由SDK管理,但缓存机制不依赖于sessionId。这确保了会话之间的独立性,避免了会话数据的相互干扰。
会话在多个请求之间保持其状态,使得服务器能够处理复杂的业务逻辑。例如,在进行一系列的金融数据查询时,会话可以记住之前的查询条件和上下文信息。
服务器级配置可以覆盖会话级设置,确保所有会话遵循统一的规则。例如,当服务器设置为动态模式时,所有会话都将使用动态模式,无论其会话级配置如何。
服务器通过HTTP协议与客户端进行通信,使用JSON-RPC格式的消息。这种标准化的协议使得服务器与客户端之间的通信更加稳定和可靠。
工具可以在运行时根据会话的需求进行加载和卸载。这为服务器提供了更高的灵活性,能够根据不同的业务场景动态调整工具集。
/mcp端点。clientId为键。服务器支持多种配置方法,包括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请求的查询参数请求动态模式。
以下是一个动态工具集管理的示例工作流:
动态工具集管理提供了更高的性能、灵活性和资源效率。每个会话可以根据实际需求动态调整工具集,减少了初始加载时间和内存使用。
服务器通过/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为键。clientId维护一个McpServer和DynamicToolsetManager实例。服务器提供了详细的错误处理机制,当请求出现问题时,会返回相应的错误信息。常见的错误包括无效配置、工具不可用和缺少必需参数等。
本项目采用Apache License Version 2.0许可协议。