元鉴
返回中文阅读流

AWS Machine Learning Blog

使用 MCP 将 Amazon Quick 与时间序列数据库快速集成,用于市场情报

在本文中,我们将介绍一个使用 KDB-X MCP 服务器与 Amazon Quick 集成的实际实现,演示交易员和分析师如何使用对话式语言提出问题,并从数据集中获得可执行的洞察。你可以将这种相同的集成模式应用于各个领域,从金融市场分析到物联网传感器监控,再到 DevOps 性能仪表板,只要你需要简化对时间序列洞察的访问。

中文内容

已翻译official company source英文原文2026-06-01

Amazon Quick 中的 Model Context Protocol (MCP) 集成改变了金融分析师访问时间序列市场情报的方式,无需复杂的数据库查询。作为金融分析师,你需要在每秒流经市场的数百万笔股票交易中穿梭,寻找驱动交易决策的模式。金融机构通常使用时间序列数据库来分析高频市场数据。

在本文中,我们将介绍一个使用 KDB-X MCP 服务器与 Amazon Quick 集成的实际实现,演示交易员和分析师如何使用对话式语言提问,并从数据集中获得可操作的洞察。你可以将这种相同的集成模式应用于各个领域,从金融市场分析到 IoT 传感器监控,再到 DevOps 性能仪表板,在这些场景中,你需要简化对时间序列洞察的访问。

解决方案概述

Amazon Quick 是一项全面的、由生成式 AI 驱动的商业智能服务,你可以用它来分析数据、创建可视化、自动化工作流,并在整个组织内开展协作。通过 Amazon Quick 中的 MCP 集成,你可以连接到 MCP 服务器,以获得任务执行和数据访问能力。MCP 提供了一种标准化方式,用于将 AI 系统与外部工具和数据源连接起来。在这个示例中,你将使用由 KDB-X 提供的时间序列数据库;KDB-X 基于行业领先的 kdb+ 构建。kdb+ 是一个高性能时间序列数据库和分析引擎,由向量语言 q 提供支持。

我们首先在 Amazon Elastic Compute Cloud(Amazon EC2)实例上安装 KDB-X MCP 服务器。此安装使 KDB-X 服务能够持续运行,并建立 MCP 服务器与 KDB-X 服务之间的连接,以执行查询。Quick 会将自然语言查询转换为 SQL 语句,并将其传递给 KDB-X MCP 服务器,后者会针对 KDB-X 数据库执行这些查询。

为了将 MCP 服务器与 Quick 连接起来,我们使用 Amazon Bedrock AgentCore Gateway 作为身份验证和路由层。AgentCore Gateway 作为代理与其工具交互的单一访问点。在我们的架构中,我们将 MCP 服务器配置为 AgentCore Gateway 中的目标,从而能够与在 Amazon EC2 上运行的 MCP 服务器进行通信。我们还为 AgentCore Gateway 实现了入站授权,用于验证尝试通过网关访问目标的用户。由于 Quick 中的 MCP 集成需要身份验证凭据,因此对网关的入站身份验证满足了 MCP 连接器的这一要求。对于此解决方案,我们将 Amazon Cognito 配置为访问 AgentCore Gateway 的身份提供者。此集成在 Quick 聊天界面中显示为操作,使用户能够执行相关任务并提升产品

Architecture diagram showing the data flow from Amazon Quick chat through Bedrock AgentCore Gateway to the KDB-X MCP server running on EC2

先决条件

请确认您满足以下先决条件,以便使用本文中的分步说明在您自己的 AWS 账户中部署该解决方案。开始之前,请确保您具备以下内容:

  • 一个 AWS 账户
  • 使用 Author Pro 订阅快速设置 Amazon
  • 创建 AWS 资源以及 AWS Identity and Access Management (IAM) 角色和策略的权限
  • 具备 AWS 服务的基础知识
  • 访问 KDB-X(注册 KDB-X 公共预览版)
  • 已安装 UV,用于运行 KDB-X MCP Server

MCP server 的配置

在具备先决条件后,我们将在您的 EC2 实例上配置 MCP server。

KDB-X MCP server 提供对特定领域工具的访问,例如 hybrid_search、run_sql_query 和 similarity_search。这些工具以自定义 Python 函数的形式实现。该服务器扩展了通过自然语言查询 KDB-X 数据的能力。用户可以执行专门任务,例如计算波动率、查询市场数据,或在 KDB-X 表中对 SEC 文件进行语义搜索。

按照以下步骤在 EC2 上安装并运行 MCP 服务器。首先启动一个 EC2 实例,最好选择 t2.medium 或更高配置。

  1. 克隆存储库

首先将 KDB-X MCP 服务器存储库克隆到你的 EC2 实例。

  1. 安装 KDB-X 服务

MCP 服务器需要 KDB-X 服务在后台运行。请按照先决条件部分所述,注册 KDB-X 公开预览版以安装 KDB-X。

  1. 配置 KDB-X 服务

配置 KDB-X 服务监听 5000 端口。我们将创建一个示例数据集,用随机的价格、数量和代码值来模拟随时间变化的交易数据。

为 KDB-X 创建专用的操作系统服务账户:

useradd -r -s /sbin/nologin kdbx-svc
mkdir -p /opt/kdbx
cp -r /root/.kx /opt/kdbx/.kx
chown -R kdbx-svc:kdbx-svc /opt/kdbx

下载包含股票代码的 stocks.txt 文件。

curl -sL https://raw.githubusercontent.com/KxSystems/kdb-x-mcp-server/main/stocks.txt \
  -o /opt/kdbx/stocks.txt
chown kdbx-svc:kdbx-svc /opt/kdbx/stocks.txt

创建启动脚本。将以下内容复制到纯文本编辑器中,然后粘贴到终端:

python3 << 'PYEOF'
script = """#!/bin/bash
export QLIC=/opt/kdbx/.kx
cd /opt/kdbx
/opt/kdbx/.kx/bin/q -p 5000 << 'QEOF'
.s.init[]
.ai:use `kx.ai
syms: 100?`$read0 `:stocks.txt
n: 20000000; day: 2025.01.01
trade:([] time:asc (`timestamp$day)+n?24:00:00; sym:n?syms; price:n?100f; size:n?1000)
count trade
10 sublist trade
QEOF
"""
with open('/opt/kdbx/start-kdb-x.sh', 'w') as f:
    f.write(script)
print("Done")
PYEOF
chmod +x /opt/kdbx/start-kdb-x.sh
chown kdbx-svc:kdbx-svc /opt/kdbx/start-kdb-x.sh

此脚本会初始化 KDB-X 服务,并创建一个包含股票数据的虚拟表。它会从文件中随机选择 100 个股票代码。该脚本还会打印 10 行示例数据,以验证数据是否成功摄取。

  1. 启动并验证 KDB-X 服务

创建 systemd 服务单元。将以下内容复制到纯文本编辑器中,然后粘贴到终端:

python3 << 'PYEOF'
unit = """[Unit]
Description=KDB-X Database Service
After=network.target

[Service]
Type=simple
User=kdbx-svc
WorkingDirectory=/opt/kdbx
ExecStart=/opt/kdbx/start-kdb-x.sh
Restart=on-failure
NoNewPrivileges=true
ProtectSystem=strict
PrivateTmp=true
ReadWritePaths=/opt/kdbx

[Install]
WantedBy=multi-user.target
"""
with open('/etc/systemd/system/kdb-x-service.service', 'w') as f:
    f.write(unit)
print("Done")
PYEOF
systemctl daemon-reload
systemctl enable kdb-x-service.service
systemctl start kdb-x-service.service

运行以下命令以检查服务状态并验证日志:

# Check status
sudo systemctl status kdb-x-service.service

# View logs to confirm initialization
sudo journalctl -u kdb-x-service.service -n 50

检查状态时,你应会看到类似如下的输出:

kdb-x-service.service - KDB-X Database Service
Loaded: loaded (/etc/systemd/system/kdb-x-service.service; enabled; preset: disabled)
Active: active (running) since ...
Main PID: XXXXX (start-kdb-x.sh)
CGroup: /system.slice/kdb-x-service.service
├─XXXXX /bin/bash /opt/kdbx/start-kdb-x.sh
└─XXXXX /opt/kdbx/.kx/bin/q -p 5000

注意:KDB-X 作为专用的 kdbx-svc 账户运行,该账户没有登录 shell、没有 sudo 权限,也没有 SSH 密钥。systemd 单元强制执行 NoNewPrivileges、ProtectSystem=strict 和 PrivateTmp=true,以便在进程被攻陷时限制影响范围。该服务已启用,以便在重启后自动启动。

  1. 启动 MCP Server

安装 uv 并设置 MCP server 服务:

curl -LsSf https://astral.sh/uv/install.sh | env HOME=/root sh
cp /root/.local/bin/uv /usr/local/bin/uv
chmod 755 /usr/local/bin/uv
chown -R ec2-user:ec2-user /opt/kdbx-mcp

创建 MCP server systemd 服务。将以下内容复制到纯文本编辑器中,然后粘贴到终端:

python3 << 'PYEOF'
unit = """[Unit]
Description=KDB-X MCP Server
After=network.target kdb-x-service.service
Requires=kdb-x-service.service

[Service]
Type=simple
User=ec2-user
WorkingDirectory=/opt/kdbx-mcp
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="QLIC=/opt/kdbx/.kx"
ExecStart=/usr/local/bin/uv run mcp-server --mcp.transport streamable-http --mcp.host 127.0.0.1 --mcp.port 8080 --db.host 127.0.0.1 --db.port 5000
Restart=on-failure

[Install]
WantedBy=multi-user.target
"""
with open('/etc/systemd/system/kdb-mcp-server.service', 'w') as f:
    f.write(unit)
print("Done")
PYEOF
systemctl daemon-reload
systemctl enable kdb-mcp-server.service
systemctl start kdb-mcp-server.service
  1. 验证 MCP Server 配置

要确认 MCP 服务器配置正确,请运行此命令以显示可用工具:

curl -X POST http://127.0.0.1:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
  1. 为 KDB-X MCP Server 配置 HTTPS 端点

将 <public-ip-of-ec2> 替换为你的 EC2 实例的公网 IP 地址。完成这些步骤后,你将拥有一个正在运行的 MCP HTTPS 端点,可通过 <public-ip-of-ec2>.nip.io/mcp 访问。

对于生产部署,请将 nip.io 替换为在 Amazon Route 53 中注册且启用 DNSSEC 的域名,使用 AWS Certificate Manager (ACM) 签发和管理 TLS 证书,并在 EC2 前端配置一个内部 Application Load Balancer。随后,你可以使用 Amazon VPC Lattice 为 Amazon Bedrock AgentCore Gateway 配置 VPC 出站流量,使流量从 AgentCore 完全在 AWS 网络内路由到你的 MCP 服务器,而无需暴露于公共互联网。请参阅 Configuring Amazon Bedrock AgentCore Gateway for secure access to private resources。

步骤 1:安装所需软件包

更新你的系统,并安装 Nginx 和用于 SSL 证书管理的 Certbot:

sudo yum update -y
sudo yum install -y nginx python3-certbot-nginx
sudo systemctl start nginx
sudo systemctl enable nginx

步骤 2:创建临时 HTTP 配置

设置用于证书验证的临时 HTTP 配置。创建必要的目录和配置文件:

sudo mkdir -p /var/www/html
sudo mkdir -p /etc/nginx/conf.d
sudo tee /etc/nginx/conf.d/mcp-server.conf > /dev/null << 'EOF'
server {
    listen 80;
    server_name <public-ip-of-ec2>.nip.io;
    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }
    location / {
        return 200 "Temporary - obtaining certificate";
        add_header Content-Type text/plain;
    }
}
EOF

步骤 3:测试并重新加载 Nginx

验证配置语法并重新加载 Nginx:

sudo nginx -t
sudo systemctl reload nginx

步骤 4:配置 EC2 安全组

验证你的 EC2 安全组是否允许端口 80 和 443 的入站流量。

步骤 5:获取 Let’s Encrypt 证书

向 Let’s Encrypt 申请 SSL 证书。将电子邮件地址替换为你自己的地址:

sudo certbot certonly --nginx \
  -d <public-ip-of-ec2>.nip.io \
  --non-interactive \
  --agree-tos \
  --email <your-email@example.com>

步骤 6:配置仅 HTTPS 访问

获取证书后,更新 Nginx 配置以启用 HTTPS,并重定向所有 HTTP 流量:

sudo tee /etc/nginx/conf.d/mcp-server.conf > /dev/null << 'EOF'
# Redirect all HTTP to HTTPS
server {
    listen 80;
    server_name <public-ip-of-ec2>.nip.io;
    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }
    location / {
        return 301 $host$request_uri;
    }
}

# HTTPS server - your application runs here
server {
    listen 443 ssl;
    server_name <public-ip-of-ec2>.nip.io;
    ssl_certificate /etc/letsencrypt/live/<public-ip-of-ec2>.nip.io/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<public-ip-of-ec2>.nip.io/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass localhost:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF

步骤 7:应用配置更改

测试更新后的配置并重新加载 Nginx:

sudo nginx -t
sudo systemctl reload nginx

你的 MCP 服务器现在可以通过 HTTPS 在 <public-ip-of-ec2>.nip.io/mcp 访问。所有 HTTP 请求都会自动重定向到 HTTPS,从而支持 Quick 与你的 KDB-X MCP 服务器之间的安全通信。

Amazon Bedrock AgentCore Gateway 与 MCP 的集成

Amazon Bedrock AgentCore Gateway 为开发人员提供了一种安全的方式,用于大规模构建、部署、发现并连接工具。借助 Gateway,开发人员只需几行代码,就可以将 API、AWS Lambda 函数和现有服务转换为兼容 MCP 的工具,并通过 Gateway 端点将其提供给代理使用。在 AgentCore Gateway 中,创建网关时可以将预配置的 MCP 服务器定义为目标。

现在你的 HTTPS 端点已经运行,可以将其作为 MCP 服务器目标与 AgentCore Gateway 集成。请按照以下步骤操作:

  1. 导航到 Amazon Bedrock AgentCore Gateway 控制台,并从左侧导航窗格中选择 Gateways。选择 Create Gateway 开始。
  2. 对于入站授权,请配置以下参数。此解决方案使用 Cognito 用户池作为 AgentCore Gateway 的入站授权机制:
  • 身份提供商
  • 发现 URL
  • 允许的客户端
  1. 在 Targets 下,选择 MCP server 作为目标类型。输入你的 HTTPS 端点作为 MCP 端点 URL。目标成功附加后,将显示 Ready 状态,如以下截图所示,确认连接已建立。

配置并运行 AgentCore Gateway 后,你就可以在 Quick 中创建集成了。对于生产部署,请考虑在 Nginx 中添加按 IP 限速,并启用 AWS CloudTrail 以记录 API 活动。

与 Amazon Quick 操作集成

要与 Quick 集成,请从左侧面板中选择 Integrations,然后选择 Actions。从可用选项中选择 Model Context Protocol。Amazon Quick 中的集成可将你连接到外部应用程序和服务,以进行 AI 驱动的分析和自动化。操作连接器会在 Quick 与外部服务之间创建安全连接。通过 MCP 集成,你可以连接到 MCP 服务器,以获得任务执行和数据访问能力。按照以下步骤完成集成:

  1. 将你创建的 AgentCore Gateway 中的 Gateway 资源 URL 作为 MCP 服务器端点提供。
  2. 对于授权类型,选择 Service-to-Service OAuth。输入来自 Cognito 用户池配置的以下详细信息:
  • 正文:Token URL
  • 正文:Client ID
  • 正文:Client Secret

对于生产部署,请将 Cognito 客户端 ID 和客户端密钥存储在 AWS Secrets Manager 中。在配置 Quick 连接器时按需检索这些值,并在 Secrets Manager 中启用自动轮换。考虑将 AWS WAF Web ACL 附加到 Cognito 用户池,以保护 /oauth2/token 端点免受凭据填充和暴力破解威胁。

  1. 集成创建后,来自 MCP 服务器的所有可用工具都将显示在 Actions 部分,如以下截图所示。
  2. 集成准备就绪后,你现在可以创建一个用于股票分析的聊天代理。创建聊天代理时,选择你已配置的操作,如以下截图所示。你可以根据需要向代理添加多个操作。提供适当的描述和指令摘要,以定义代理的目的和能力。以下是一个股票研究助手的示例配置。你还可以在系统提示词中添加明确的数据范围护栏,例如,将代理限制在特定表、日期范围和查询类型内。描述:一名专家级金融研究助手和股票分析师,通过全面分析帮助投资者了解公司的市场地位、财务健康状况和未来潜力。指令摘要:专注于提供客观、数据驱动的公司财务健康状况、竞争定位和 gr 分析
  3. 选择 Chat 开始与你的股票研究助手交互。该代理现在可以处理自然语言查询,将其转换为 SQL 语句,在你的 KDB-X 时序数据库中执行,并返回可操作的洞察。

与聊天代理交互

为说明 Quick 中的 Actions 集成,设想一位金融分析师需要浏览特定证券的股票交易并识别模式。以下是几个示例查询,展示该智能体的能力:

查询 1:检索股票样本数据

要求该智能体从数据库中检索 10 只股票的样本。这个初始查询有助于展示 Quick 聊天智能体如何理解自然语言请求,并使用 MCP 服务器工具将其转换为 SQL 查询,以查询 KDB-X 表。

Quick chat agent returning a sample of 10 stock rows retrieved from the KDB-X trade table

查询 2:计算总交易量

请求获取特定股票代码的总交易量。该智能体查询时间序列数据库,以汇总该证券在可用时间段内的所有交易规模。以下截图展示了聊天智能体如何解读自然语言查询,并构建相应的 SQL 语句。用户审查并批准操作提交后,智能体会在 KDB-X 数据库中执行查询,并显示汇总后的交易量结果。

Quick chat agent generating the SQL aggregation query for total trading volume of a stock symbol

Quick chat agent displaying the aggregated total trading volume returned from the KDB-X database

查询 3:分析每小时交易模式

请求获取特定股票在某一天按小时划分的交易量明细。该智能体按小时对交易进行分组并计算成交量指标,从而揭示盘中交易模式和活动高峰时段。

Quick chat agent showing the hourly trading volume breakdown for a stock with peak activity periods

查询 4:查找最高价格

查询某只股票在一个交易日内达到的最高价格。该代理执行聚合查询,以确定记录到的最高成交价格。

Quick chat agent returning the maximum recorded trade price for a stock during a trading day

查询 5:生成价格可视化图表

请求对某只股票全天价格变动进行可视化。该代理检索带时间戳的价格数据,将其处理为合适的格式,并生成显示价格趋势和波动模式的交互式图表。

Interactive price chart generated by the Quick chat agent showing intraday price trends and volatility for a stock

清理

为避免持续产生费用,请删除你在按照本演练操作时创建的资源。

  1. 在你的 EC2 实例上停止并禁用 MCP 服务器和 KDB-X 服务:sudo systemctl stop kdb-mcp-server.service sudo systemctl disable kdb-mcp-server.service sudo systemctl stop kdb-x-service.service sudo systemctl disable kdb-x-service.service
  2. 从 Amazon EC2 控制台终止该 EC2 实例,或通过运行 aws ec2 terminate-instances --instance-ids <your-instance-id> 终止该实例。
  3. 在 Amazon Quick 控制台中,删除你在 Integrations > Actions 下创建的 MCP 集成。
  4. 在 Amazon Bedrock AgentCore 控制台中,删除网关及其关联的 MCP 服务器目标。
  5. 在 Amazon Cognito 控制台中,删除用户池以及你为入站授权创建的任何关联应用客户端。

结论

使用 KDB-X 等时间序列数据库的金融服务公司,在实现金融市场数据访问民主化方面面临重大挑战。查询时间序列数据库以分析金融市场数据,需要具备 q 语言或 SQL 的专业知识。

通过在 Amazon Quick 中使用 Amazon AgentCore Gateway 集成 MCP,我们展示了如何弥合这一差距。我们探讨的每一次交互都展示了 Quick 中的 MCP 集成如何将复杂的数据库查询转化为对话式交流。金融分析师无需编写 SQL 代码或了解底层数据库结构,就可以探索市场数据、识别趋势并生成洞察。

有关 Quick 集成的更多详细信息,请参阅 Amazon Quick integrations。有关 Amazon AgentCore Gateway 目标的更多信息,请参阅 Amazon AgentCore targets。

关于作者

原文标题

Amazon Quick integration with time-series databases for market intelligence using MCP