mcpField
M
mastra-best-practices

mastra-best-practices

github.com/mastra-aiDevelopment9987 installsUpdated 1d ago
Repository

About mastra-best-practices

mastra-best-practices is a quick-reference skill for developers building with Mastra. It summarizes TypeScript configuration, project structure, common conventions, and basic code patterns for agents and workflows.

Key features

  1. 01Explain when to use agents or workflows
  2. 02Show required ES2022 TypeScript settings
  3. 03Outline a project directory structure
  4. 04Provide agent and workflow examples
  5. 05Cover structured output and streaming

Use cases

  1. 01Set up a Mastra project structure
  2. 02Configure TypeScript module settings
  3. 03Choose agents or workflows for a task

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/mastra-ai/skills --skill mastra-best-practices

After installing, type/mastra-best-practicesin Claude Code to confirm it loaded.

Details

From the project README

Mastra Best Practices

Quick reference for Mastra conventions. See mastra.ai/docs for details.


Agent vs Workflow

UseWhen
AgentOpen-ended tasks (support, research) - reasons, decides tools, retains memory
WorkflowDefined sequences (pipelines, approvals) - orchestrates specific steps in order

TypeScript Config (Required)

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022",
    "moduleResolution": "bundler"
  }
}

Critical: CommonJS causes errors. Must use ES2022.


Project Structure

src/mastra/
├── tools/       # Custom tools
├── agents/      # Agent configs
├── workflows/   # Workflows
└── index.ts     # Mastra instance

Environment Variables

OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GOOGLE_GENERATIVE_AI_API_KEY=...

Quick Reference

Basic Agent
new Agent({
  id: 'my-agent',
  name: 'My Agent',
  instructions: 'You are helpful',
  model: 'openai/gpt-4o',
  tools: { myTool }  // optional
})
Basic Workflow
createWorkflow({
  id: 'my-workflow',
  inputSchema: z.object({ input: z.string() }),
  outputSchema: z.object({ output: z.string() })
})
  .then(step1)
  .commit()
Structured Output
const response = await agent.generate('Extract: John, 30', {
  structuredOutput: {
    schema: z.object({
      name: z.string(),
      age: z.number()
    })
  }
})
console.log(response.object) // Access via .object property
Streaming
const stream = await agent.stream('Tell a story')
for await (const chunk of stream.fullStream) {
  console.log(chunk)
}

Key Conventions

  1. Use mastra.getAgent('name') / mastra.getWorkflow('name') not direct imports
  2. Always use env vars for API keys
  3. ES2022 modules required (not CommonJS)
  4. Test with Studio: npm run dev → http://localhost:4111

Resources

Comments

Markdown supported