通过 Claude Agent SDK 配合 Narwhal,你可以询问节假日、发布日期、经济数据、大宗商品、外汇和预测市场方面的问题。用 API 密钥把智能体连接到 Narwhal MCP,再用日常语言提问,智能体会自行选择工具。
你将完成的设置
Claude Agent SDK 可以让你通过 Python 向智能体提问。你将得到一个连接 Narwhal MCP 的脚本,它会为每个数据领域各问一个问题。问题放在 PROMPTS 字典中,服务器连接和工具权限则由 ClaudeAgentOptions 设置。脚本会打印每个领域的名称和智能体返回的消息。
设置你的 API 密钥
- 创建免费的 Narwhal 密钥 在 narwhalapi.com/signup 创建密钥。Narwhal 的各个数据 API 共用一个账户和一个 API 密钥,所以同一个密钥适用于此脚本中的所有数据领域。
- 把密钥存入环境变量 把密钥放进名为
NARWHAL_API_KEY的环境变量。Python 脚本会读取该变量作为 Bearer 请求头,Claude Code 配置也按名称引用它。请确保启动智能体的环境中可以访问这个变量。环境变量的值就是你的密钥,请求头配置中则保留Bearer前缀。export NARWHAL_API_KEY="YOUR_KEY"
通过 Claude Code 提问
Claude Code 用户可以通过 JSON 配置把 Narwhal 添加为 MCP 服务器。如果想提问而不编写 Python 脚本,就走这条路径。服务器地址与 SDK 使用的 MCP 地址相同,连接类型为 http。Claude Code 使用服务器配置,Python SDK 则使用 ClaudeAgentOptions 配置。
- 添加 MCP 服务器配置 添加 JSON 配置,服务器名称使用
narwhal。在 Authorization 请求头中保留环境变量引用,这样配置会从NARWHAL_API_KEY读取你的密钥。{ "mcpServers": { "narwhal": { "type": "http", "url": "https://api.narwhalapi.com/mcp", "headers": { "Authorization": "Bearer ${NARWHAL_API_KEY}" } } } } - 用日常语言提问 问一句“2026年12月25日是美国的公共假日吗?”智能体会根据问题选择工具。各领域的示例还给出了发布日期、经济数据、大宗商品、外汇和预测市场的提问。
用代码获取数据
安装 claude-agent-sdk,然后在环境中提供密钥并运行 Python 脚本。mcp_servers 设置提供 MCP 的 URL 和 Authorization 请求头。allowed_tools 中的通配符让智能体可以使用所有 Narwhal 工具。每次调用 query 都会接收一个问题和共用的选项。代码除了导入 asyncio 和 os,还从 SDK 导入 ClaudeAgentOptions 和 query。
pip install claude-agent-sdkimport asyncio
import os
from claude_agent_sdk import ClaudeAgentOptions, query
options = ClaudeAgentOptions(
mcp_servers={
"narwhal": {
"type": "http",
"url": "https://api.narwhalapi.com/mcp",
"headers": {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"},
}
},
allowed_tools=["mcp__narwhal__*"],
)
PROMPTS = {
"holidays": "Is 25 December 2026 a public holiday in the United States?",
"release dates": "When is the US CPI release in November 2026?",
"economics": "What is the latest US CPI index?",
"commodities": "What is the Brent spot price in dollars a barrel?",
"FX": "What are the USD/EUR and USD/IDR rates?",
"predictions": "What are the Fed rate odds for its next meeting?",
}
async def main():
for area, question in PROMPTS.items():
print("##", area)
async for message in query(prompt=question, options=options):
print(message)
asyncio.run(main())请让 PROMPTS 中的条目保持为自然语言问题。它们描述你想要的信息,工具由智能体自行选择。循环会逐个发送问题,并打印该领域的消息。如果只想询问某个领域,就按后面的示例,用该领域的问题配合同样的 options。在 main 内,async for 会先打印 query 的每条消息,外层循环才会转到下一个领域。各个单独的示例沿用完整脚本中的导入和 options,只是 PROMPTS 字典更小,只含该领域的问题。
按计划定时运行
通过 cron 或任务调度器运行脚本,并确保定时运行的脚本能读取 NARWHAL_API_KEY。每次成功的工具调用会消耗该密钥额度中的一次调用。脚本会遍历 PROMPTS 中的问题,因此每次定时运行都会询问该字典中的所有领域。你希望定时智能体提出的问题,都请放在这个字典里。
用 Claude Agent SDK 查询节假日
询问某个日期是不是公共假日。这个问题同时给出了日期和国家。对应的 REST 地址是 https://api.narwhalapi.com/v1/calendars/holidays/USA/2026,读取其中的 holidays,每个条目都有 date 和 name。示例使用 options 中已经定义好的 MCP 连接。
PROMPTS = {
"holidays": "Is 25 December 2026 a public holiday in the United States?",
}
async def main():
async for message in query(prompt=PROMPTS["holidays"], options=options):
print(message) # REST counterpart field: holidays
asyncio.run(main())用 Claude Agent SDK 查询发布日期
想知道某项数据何时发布,就在提问中写明数据名称和月份。发布日期来自经济日历。对应的 REST 地址是 https://api.narwhalapi.com/v1/economics/calendar?countries=USA&start_date=2026-11-01&end_date=2026-11-30&limit=100。读取 releases,其条目包含 at、period、topic 和 status。要查 CPI 指数值,请使用经济数据的提问。
PROMPTS = {
"release dates": "When is the US CPI release in November 2026?",
}
async def main():
async for message in query(prompt=PROMPTS["release dates"], options=options):
print(message) # REST counterpart field: releases
asyncio.run(main())用 Claude Agent SDK 查询经济数据
通过经济数据工具询问美国 CPI 指数。Narwhal 的经济数据还涵盖通胀、GDP 和收益率。CPI 对应的 REST 地址是 https://api.narwhalapi.com/v1/economics/USA/cpi/observations?start=2025-09,其中 observations 的条目包含 period 和 value。提示词是让智能体给出指数,REST 地址则指定观测值的起始期间。
PROMPTS = {
"economics": "What is the latest US CPI index?",
}
async def main():
async for message in query(prompt=PROMPTS["economics"], options=options):
print(message) # REST counterpart field: observations
asyncio.run(main())用 Claude Agent SDK 查询大宗商品
在提问中写明大宗商品名称和单位,就像 Brent 的提示词那样。对应的 REST 地址是 https://api.narwhalapi.com/v1/commodities/spot/BRENT/USD,读取其中的 price 字段。Narwhal 使用现货代码,例如 XAU、XAG、XPT、XPD、XCU、BRENT 和 WTI。此示例沿用完整脚本中的 Brent 提问。
PROMPTS = {
"commodities": "What is the Brent spot price in dollars a barrel?",
}
async def main():
async for message in query(prompt=PROMPTS["commodities"], options=options):
print(message) # REST counterpart field: price
asyncio.run(main())用 Claude Agent SDK 查询外汇
在同一个问题里写明你需要的货币对。这个提示词请求的是 USD/EUR 和 USD/IDR。对应的 REST 地址是 https://api.narwhalapi.com/v1/fx/rates/USD?currencies=EUR,IDR,返回的 rates 中每个条目都有 currency 和 rate。提示词和 URL 都指明了货币,MCP 智能体会根据提示词选择工具。
PROMPTS = {
"FX": "What are the USD/EUR and USD/IDR rates?",
}
async def main():
async for message in query(prompt=PROMPTS["FX"], options=options):
print(message) # REST counterpart field: rates
asyncio.run(main())用 Claude Agent SDK 查询预测市场
通过预测市场工具询问美联储利率的概率。对应的 REST 地址是 https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve。读取 meetings,其中每个条目都有 resolves_at、p_cut、p_hold 和 p_hike。这些字段分别表示结算时间,以及降息、按兵不动和加息的概率。示例提出的预测市场问题与完整脚本相同。
PROMPTS = {
"predictions": "What are the Fed rate odds for its next meeting?",
}
async def main():
async for message in query(prompt=PROMPTS["predictions"], options=options):
print(message) # REST counterpart field: meetings
asyncio.run(main())如何限制智能体可以调用的工具?
把 allowed_tools 中的通配符换成你想允许的工具名称。对于 CPI,使用 mcp__narwhal__economics_get_cpi。在 ClaudeAgentOptions 中设置 allowed_tools=["mcp__narwhal__economics_get_cpi"],即可明确指定该工具。完整脚本的问题涉及所有数据领域,所以使用 mcp__narwhal__*。
需要有自己的 Claude 访问权限吗?
需要。运行智能体除了 Narwhal API 密钥,还要有你自己的 Claude 访问权限。Narwhal 密钥用于验证发往 Narwhal 的请求,REST 和 MCP 共用这个密钥。向各领域的 URL 发送 REST 请求时,发送 Authorization: Bearer YOUR_KEY;SDK 配置也会向 MCP 地址发送同样的请求头。
发布于。