Skip to main content

Mastra Client SDK

The Mastra Client SDK provides a simple and type-safe interface for interacting with your Mastra Server from your client environment.

Prerequisites​

To ensure smooth local development, make sure you have:

  • Node.js v18 or higher
  • TypeScript v4.7 or higher (if using TypeScript)
  • Your local Mastra server running (typically on port 4111)

Usage​

The Mastra Client SDK is designed for browser environments and uses the native fetch API for making HTTP requests to your Mastra server.

Installation​

To use the Mastra Client SDK, install the required dependencies:

npm install @mastra/client-js@latest

Initialize the MastraClient​

Once initialized with a baseUrl, MastraClient exposes a type-safe interface for calling agents, tools, and workflows.

lib/mastra-client.ts
import { MastraClient } from "@mastra/client-js";

export const mastraClient = new MastraClient({
baseUrl: process.env.MASTRA_API_URL || "http://localhost:4111",
});

Core APIs​

The Mastra Client SDK exposes all resources served by the Mastra Server

  • Agents: Generate responses and stream conversations.
  • Memory: Manage conversation threads and message history.
  • Tools: Executed and managed tools.
  • Workflows: Trigger workflows and track their execution.
  • Vectors: Use vector embeddings for semantic search.
  • Logs: View logs and debug system behavior.
  • Telemetry: Monitor app performance and trace activity.

Generating responses​

Call .generate() with an array of message objects that include role and content:

import { mastraClient } from "lib/mastra-client";

const testAgent = async () => {
try {
const agent = mastraClient.getAgent("testAgent");

const response = await agent.generate({
messages: [
{
role: "user",
content: "Hello",
},
],
});

console.log(response.text);
} catch (error) {
return "Error occurred while generating response";
}
};

See .generate() for more information.

Streaming responses​

Use .stream() for real-time responses with an array of message objects that include role and content:

import { mastraClient } from "lib/mastra-client";

const testAgent = async () => {
try {
const agent = mastraClient.getAgent("testAgent");

const stream = await agent.stream({
messages: [
{
role: "user",
content: "Hello",
},
],
});

stream.processDataStream({
onTextPart: (text) => {
console.log(text);
},
});
} catch (error) {
return "Error occurred while generating response";
}
};

See .stream() for more information.

Configuration options​

MastraClient accepts optional parameters like retries, backoffMs, and headers to control request behavior. These parameters are useful for controlling retry behavior and including diagnostic metadata.

lib/mastra-client.ts
import { MastraClient } from "@mastra/client-js";

export const mastraClient = new MastraClient({
// ...
retries: 3,
backoffMs: 300,
maxBackoffMs: 5000,
headers: {
"X-Development": "true",
},
});

See MastraClient for more configuration options.

Adding request cancelling​

MastraClient supports request cancellation using the standard Node.js AbortSignal API. Useful for canceling in-flight requests, such as when users abort an operation or to clean up stale network calls.

Pass an AbortSignal to the client constructor to enable cancellation across all requests.

lib/mastra-client.ts
import { MastraClient } from "@mastra/client-js";

export const controller = new AbortController();

export const mastraClient = new MastraClient({
baseUrl: process.env.MASTRA_API_URL || "http://localhost:4111",
abortSignal: controller.signal,
});

Using the AbortController​

Calling .abort() will cancel any ongoing requests tied to that signal.

import { mastraClient, controller } from "lib/mastra-client";

const handleAbort = () => {
controller.abort();
};

Client tools​

Define tools directly in client-side applications using the createTool() function. Pass them to agents via the clientTools parameter in .generate() or .stream() calls.

This lets agents trigger browser-side functionality such as DOM manipulation, local storage access, or other Web APIs, enabling tool execution in the user's environment rather than on the server.

import { createTool } from "@mastra/client-js";
import { z } from "zod";

const handleClientTool = async () => {
try {
const agent = mastraClient.getAgent("colorAgent");

const colorChangeTool = createTool({
id: "color-change-tool",
description: "Changes the HTML background color",
inputSchema: z.object({
color: z.string(),
}),
outputSchema: z.object({
success: z.boolean(),
}),
execute: async ({ context }) => {
const { color } = context;

document.body.style.backgroundColor = color;
return { success: true };
},
});

const response = await agent.generate({
messages: "Change the background to blue",
clientTools: { colorChangeTool },
});

console.log(response);
} catch (error) {
console.error(error);
}
};

Client tool's agent​

This is a standard Mastra agent configured to return hex color codes, intended to work with the browser-based client tool defined above.

src/mastra/agents/color-agent
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";

export const colorAgent = new Agent({
name: "test-agent",
instructions: `You are a helpful CSS assistant.
You can change the background color of web pages.
Respond with a hex reference for the color requested by the user`,
model: openai("gpt-4o-mini"),
});

Server-side environments​

You can also use MastraClient in server-side environments such as API routes, serverless functions or actions. The usage will broadly remain the same but you may need to recreate the response to your client:

export async function action() {
const agent = mastraClient.getAgent("testAgent");

const stream = await agent.stream({
messages: [{ role: "user", content: "Hello" }],
});

return new Response(stream.body);
}

Best practices​

  1. Error Handling: Implement proper error handling for development scenarios.
  2. Environment Variables: Use environment variables for configuration.
  3. Debugging: Enable detailed logging when needed.
  4. Performance: Monitor application performance, telemetry and traces.