Skip to Content
ExamplesToolsDynamic Tools

Dynamic Tools

Dynamic tools adapt their behavior and capabilities at runtime based on contextual input. Instead of relying on fixed configurations, they adjust to users, environments, or scenarios, enabling a single agent to serve personalized, context-aware responses.

Creating an tool

Create a tool that fetches exchange rate data using a dynamic value provided via runtimeContext.

src/mastra/tools/example-exchange-rates-tool.ts
import { createTool } from "@mastra/core/tools"; import { z } from "zod"; export const getExchangeRatesTool = createTool({ id: "get-exchange-rates-tool", description: "Gets exchanges rates for a currency", inputSchema: z.null(), outputSchema: z.object({ base: z.string(), date: z.string(), rates: z.record(z.number()) }), execute: async ({ runtimeContext }) => { const currency = runtimeContext.get("currency"); const response = await fetch(`https://api.frankfurter.dev/v1/latest?base=${currency}`); const { base, date, rates } = await response.json(); return { base, date, rates }; } });

See createTool() for a full list of configuration options.

Example usage

Set RuntimeContext using set(), then call execute() passing in the runtimeContext.

src/test-exchange-rate.ts
import { RuntimeContext } from "@mastra/core/runtime-context"; import { getExchangeRatesTool } from "../src/mastra/tools/example-exchange-rates-tool"; const runtimeContext = new RuntimeContext(); runtimeContext.set("currency", "USD"); const result = await getExchangeRatesTool.execute({ context: null, runtimeContext }); console.log(result);