LangChain と Narwhal を使って、祝日、発表日、経済データ、コモディティ、為替、予測市場について自然な言葉で質問できます。APIキーでエージェントを MCP 経由で Narwhal に接続し、読み取り専用のツールを読み込めば、質問ごとにエージェントがツールを選びます。
セットアップする内容
LangChain はエージェントを Narwhal の読み取り専用 MCP ツールに接続します。完成するのは、データ領域ごとに質問する Python スクリプトです。接続では、ツールの読み込みに langchain-mcp-adapters、エージェントの構築に langgraph.prebuilt の create_react_agent を使います。Narwhal は 1 つのアカウントと 1 つのAPIキーを各データ API で共通にしており、REST と MCP がそのキーを共有します。スクリプトは Authorization: Bearer YOUR_KEY ヘッダー付きで https://api.narwhalapi.com/mcp に接続します。プロンプトは普通の質問で、どのツールを呼ぶかはエージェントが選びます。
APIキーを設定
- 無料キーを作成する narwhalapi.com/signup で無料のキーを作成します。スクリプトの MCP 接続にはこの Narwhal のキーを使います。同じキーは REST API でも使えます。
- キーを環境に保存する キーを
NARWHAL_API_KEYという環境変数に保存します。コマンドを入力する前にYOUR_KEYを自分のキーに置き換え、その環境からスクリプトを起動してください。Python の接続部分は、この変数を読んで Bearer ヘッダーを作ります。export NARWHAL_API_KEY="YOUR_KEY"
コードでデータを取得する
MCP 接続のトランスポートには streamable_http を使います。MultiServerMCPClient がサーバーの URL と Authorization ヘッダーを保持し、get_tools() が読み取り専用のツールをエージェントに渡します。スクリプトでは、質問文と接続設定が分かれています。URL はクライアントの設定に置かれ、ユーザーのメッセージは PROMPTS から取られます。エンドポイントやツール名を質問に書かなくても、領域について質問できます。
- パッケージをインストールする MCP アダプター、LangGraph、スクリプトが使うモデル連携をインストールします。アダプターは
MultiServerMCPClientを提供し、LangGraph は Narwhal のツールを呼び出す構築済みのエージェントを提供します。pip install langchain-mcp-adapters langgraph langchain-anthropic - エージェントのスクリプトを保存する 次のコードを
agent.pyとして保存します。await client.get_tools()でツールを読み込み、エージェントを構築して、PROMPTSの各質問をユーザーメッセージとして送ります。出力される回答は、エージェントが返した最後のメッセージの内容です。
import asyncio, os
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
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 and its month-on-month change?",
"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():
client = MultiServerMCPClient({
"narwhal": {
"transport": "streamable_http",
"url": "https://api.narwhalapi.com/mcp",
"headers": {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"},
}
})
tools = await client.get_tools()
agent = create_react_agent("anthropic:claude-sonnet-5-5", tools)
for area, question in PROMPTS.items():
result = await agent.ainvoke({"messages": [("user", question)]})
print(area, "->", result["messages"][-1].content)
asyncio.run(main())- エージェントを起動する Narwhal のキーがある環境から、保存したファイルを実行します。別の質問をするには、該当するプロンプトの文章を変更してください。エージェントがツールを選べるよう、プロンプトは自然な言葉の質問のままにしておきます。
python agent.py
領域別のサンプルは、完全版のスクリプトと同じ agent と PROMPTS を使います。エージェントを構築したあとの main() の中にサンプルを置けば、その領域の質問をして回答を出力できます。各サンプルの横にある REST の URL は、対応するデータのエンドポイントと、それが返すレスポンスのフィールドを示します。
スケジュールで実行する
cron やアプリのスケジューラーから python agent.py を実行し、スクリプトで NARWHAL_API_KEY が使えるようにします。スケジュール実行されるスクリプトも、手動で実行したときと同じプロンプトのループをたどります。スクリプトの起動時にエージェントに尋ねさせたい質問を、PROMPTS に設定してください。
ツール呼び出しが成功するたびに、キーのクレジットから 1 回分を消費します。スケジュールはスクリプトを起動するだけで、どのツールを使うかはスクリプト内の質問に応じてエージェントが選びます。スケジュール実行のエージェントが使えるツールを制限したい場合は、create_react_agent に渡す前にツールのリストを絞り込んでください。
LangChain で祝日を調べる
2026年12月25日がアメリカの祝日かどうかを尋ねます。祝日のツールは calendars_list_holidays です。対応する REST データは https://api.narwhalapi.com/v1/calendars/holidays/USA/2026 で、holidays が返り、各エントリに date と name があります。サンプルは PROMPTS の祝日の質問をエージェントに送ります。
result = await agent.ainvoke({
"messages": [("user", PROMPTS["holidays"])]
})
print(result["messages"][-1].content)LangChain で発表日を調べる
2026年11月のアメリカの CPI の発表がいつかを尋ねます。発表日のツールは economics_list_releases です。対応する REST の URL は 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 を持つエントリが得られます。この質問は、経済カレンダーにある発表日を尋ねるものです。
result = await agent.ainvoke({
"messages": [("user", PROMPTS["release dates"])]
})
print(result["messages"][-1].content)LangChain で経済データを調べる
経済データのプロンプトで、アメリカの CPI 指数と前月比を尋ねます。CPI のツールは economics_get_cpi です。対応する REST の URL https://api.narwhalapi.com/v1/economics/USA/cpi/observations?start=2025-09 は observations を返し、各エントリに period と value があります。エージェントは質問を受け取り、答えるためのツールを選びます。Narwhal の経済データには、CPI、インフレ、GDP、利回りが含まれます。CPI のレスポンスでは、period が観測期間を、value が観測値を表します。このプロンプトは、指数と前月比をエージェントに尋ねます。
result = await agent.ainvoke({
"messages": [("user", PROMPTS["economics"])]
})
print(result["messages"][-1].content)LangChain でコモディティを調べる
Brent のスポット価格を 1 バレルあたりのドルで尋ねます。スポット価格のツールは commodities_get_spot_price です。対応する REST の URL は https://api.narwhalapi.com/v1/commodities/spot/BRENT/USD で、レスポンスには price フィールドがあります。コモディティのスポットコードには、たとえば XAU、XAG、XPT、XPD、XCU、BRENT、WTI があります。
result = await agent.ainvoke({
"messages": [("user", PROMPTS["commodities"])]
})
print(result["messages"][-1].content)LangChain で為替を調べる
為替のプロンプトで、USD/EUR と USD/IDR のレートを尋ねます。為替レートのツールは fx_get_rates です。対応する REST の URL https://api.narwhalapi.com/v1/fx/rates/USD?currencies=EUR,IDR は rates を返し、各エントリに currency と rate があります。2 つの通貨ペアは、エージェントに送る同じ質問の中に入っています。
result = await agent.ainvoke({
"messages": [("user", PROMPTS["FX"])]
})
print(result["messages"][-1].content)LangChain で予測市場を調べる
予測市場のプロンプトで、Fed の政策金利に関する確率を尋ねます。政策パスのツールは predictions_get_policy_path です。対応する REST の URL は https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve です。meetings のエントリには resolves_at、p_cut、p_hold、p_hike があり、会合の確定時刻と、利下げ、据え置き、利上げの確率を表します。確定時刻を使えば、それらの確率がどの会合のものかを特定できます。この例の質問は金利の確率を尋ねるもので、エージェントはその質問をユーザーメッセージとして受け取ります。
result = await agent.ainvoke({
"messages": [("user", PROMPTS["predictions"])]
})
print(result["messages"][-1].content)ツール呼び出しにはリクエストの消費がありますか?
はい。リクエストの消費は、エージェントが行うツール呼び出しに応じて決まります。PROMPTS に質問のリストを読み込んでも、それらの質問でエージェントがどのツールを選ぶかは決まりません。スクリプトをスケジュール実行するときは、そのツール呼び出し分も見込んでおいてください。
ツールを制限するにはどうすればよいですか?
get_tools() が返すリストを名前で絞り込んでから、エージェントに渡します。名前には economics_get_cpi、economics_list_releases、calendars_list_holidays、commodities_get_spot_price、fx_get_rates、predictions_get_policy_path があります。絞り込んだリストを create_react_agent の tools 引数として渡せば、選んだツールだけがエージェントに渡ります。
公開。