@mastra/mcp-docs-server 1.0.0-beta.1 → 1.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.docs/organized/changelogs/%40internal%2Fchangeset-cli.md +1 -15
- package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +1 -7
- package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +201 -1
- package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +1 -55
- package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +276 -76
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fauth.md +6 -0
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +200 -0
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +26 -0
- package/.docs/organized/changelogs/%40mastra%2Fconvex.md +89 -0
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +392 -192
- package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +200 -0
- package/.docs/organized/changelogs/%40mastra%2Fduckdb.md +42 -0
- package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Felasticsearch.md +61 -0
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Flance.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Flibsql.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fmssql.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +263 -63
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Frag.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Freact.md +154 -1
- package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +18 -0
- package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +42 -0
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +274 -74
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +92 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +67 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +201 -1
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +201 -1
- package/.docs/organized/changelogs/create-mastra.md +201 -1
- package/.docs/organized/changelogs/mastra.md +201 -1
- package/.docs/organized/code-examples/agui.md +1 -0
- package/.docs/organized/code-examples/ai-elements.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-useChat.md +2 -2
- package/.docs/organized/code-examples/ai-sdk-v5.md +3 -2
- package/.docs/organized/code-examples/assistant-ui.md +2 -2
- package/.docs/organized/code-examples/bird-checker-with-express.md +1 -1
- package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +2 -2
- package/.docs/organized/code-examples/bird-checker-with-nextjs.md +2 -2
- package/.docs/organized/code-examples/client-side-tools.md +1 -1
- package/.docs/organized/code-examples/crypto-chatbot.md +2 -2
- package/.docs/organized/code-examples/fireworks-r1.md +1 -1
- package/.docs/organized/code-examples/heads-up-game.md +1 -1
- package/.docs/organized/code-examples/mcp-configuration.md +0 -3
- package/.docs/organized/code-examples/mcp-server-adapters.md +720 -0
- package/.docs/organized/code-examples/memory-per-resource-example.md +1 -1
- package/.docs/organized/code-examples/memory-with-processors.md +1 -1
- package/.docs/organized/code-examples/openapi-spec-writer.md +1 -1
- package/.docs/organized/code-examples/processors-with-ai-sdk.md +14 -0
- package/.docs/organized/code-examples/quick-start.md +2 -2
- package/.docs/organized/code-examples/server-app-access.md +342 -0
- package/.docs/organized/code-examples/server-express-adapter.md +87 -0
- package/.docs/organized/code-examples/server-hono-adapter.md +85 -0
- package/.docs/organized/code-examples/stock-price-tool.md +1 -21
- package/.docs/organized/code-examples/workflow-ai-recruiter.md +1 -1
- package/.docs/organized/code-examples/workflow-with-inline-steps.md +1 -1
- package/.docs/organized/code-examples/workflow-with-memory.md +1 -1
- package/.docs/organized/code-examples/workflow-with-separate-steps.md +1 -1
- package/.docs/organized/code-examples/workflow-with-suspend-resume.md +1 -1
- package/.docs/raw/agents/adding-voice.mdx +56 -10
- package/.docs/raw/agents/agent-approval.mdx +189 -0
- package/.docs/raw/agents/agent-memory.mdx +1 -1
- package/.docs/raw/agents/guardrails.mdx +70 -30
- package/.docs/raw/agents/networks.mdx +3 -3
- package/.docs/raw/agents/overview.mdx +18 -167
- package/.docs/raw/agents/processors.mdx +430 -0
- package/.docs/raw/agents/structured-output.mdx +224 -0
- package/.docs/raw/agents/using-tools.mdx +14 -14
- package/.docs/raw/auth/auth0.mdx +1 -1
- package/.docs/raw/auth/clerk.mdx +1 -1
- package/.docs/raw/auth/firebase.mdx +1 -1
- package/.docs/raw/auth/index.mdx +1 -1
- package/.docs/raw/auth/jwt.mdx +1 -1
- package/.docs/raw/auth/supabase.mdx +1 -1
- package/.docs/raw/auth/workos.mdx +1 -1
- package/.docs/raw/community/contributing-templates.mdx +1 -1
- package/.docs/raw/community/discord.mdx +2 -2
- package/.docs/raw/community/licensing.mdx +1 -1
- package/.docs/raw/course/01-first-agent/05-running-playground.md +5 -5
- package/.docs/raw/course/01-first-agent/09-testing-your-agent.md +3 -3
- package/.docs/raw/course/01-first-agent/13-testing-your-tool.md +3 -3
- package/.docs/raw/course/01-first-agent/17-testing-memory.md +2 -2
- package/.docs/raw/course/04-workflows/07-using-playground.md +1 -1
- package/.docs/raw/deployment/{server-deployment.mdx → building-mastra.mdx} +4 -4
- package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +2 -2
- package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +3 -3
- package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +2 -2
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/cloudflare-deployer.mdx +1 -1
- package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +2 -2
- package/.docs/raw/deployment/cloud-providers/index.mdx +26 -29
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/netlify-deployer.mdx +45 -14
- package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/vercel-deployer.mdx +1 -1
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/dashboard.mdx +3 -3
- package/.docs/raw/deployment/mastra-cloud/observability.mdx +53 -0
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/overview.mdx +3 -3
- package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/setting-up.mdx +4 -4
- package/.docs/raw/deployment/monorepo.mdx +3 -3
- package/.docs/raw/deployment/overview.mdx +7 -7
- package/.docs/raw/deployment/web-framework.mdx +6 -6
- package/.docs/raw/evals/{off-the-shelf-scorers.mdx → built-in-scorers.mdx} +17 -15
- package/.docs/raw/evals/custom-scorers.mdx +4 -6
- package/.docs/raw/evals/overview.mdx +5 -6
- package/.docs/raw/evals/running-in-ci.mdx +2 -4
- package/.docs/raw/getting-started/{installation.mdx → manual-install.mdx} +6 -80
- package/.docs/raw/getting-started/mcp-docs-server.mdx +63 -6
- package/.docs/raw/getting-started/project-structure.mdx +2 -2
- package/.docs/raw/getting-started/start.mdx +72 -0
- package/.docs/raw/getting-started/studio.mdx +32 -7
- package/.docs/raw/guides/agent-frameworks/ai-sdk.mdx +147 -0
- package/.docs/raw/guides/build-your-ui/ai-sdk-ui.mdx +627 -0
- package/.docs/raw/{frameworks/agentic-uis → guides/build-your-ui}/assistant-ui.mdx +71 -19
- package/.docs/raw/guides/build-your-ui/copilotkit.mdx +206 -0
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/astro.mdx +24 -26
- package/.docs/raw/{frameworks/servers → guides/getting-started}/express.mdx +4 -5
- package/.docs/raw/guides/{quickstarts/nextjs.mdx → getting-started/next-js.mdx} +26 -25
- package/.docs/raw/guides/getting-started/quickstart.mdx +97 -0
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/sveltekit.mdx +24 -26
- package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/vite-react.mdx +7 -7
- package/.docs/raw/guides/guide/ai-recruiter.mdx +2 -3
- package/.docs/raw/guides/guide/chef-michel.mdx +2 -3
- package/.docs/raw/guides/guide/notes-mcp-server.mdx +2 -2
- package/.docs/raw/guides/guide/research-assistant.mdx +7 -8
- package/.docs/raw/guides/guide/stock-agent.mdx +4 -6
- package/.docs/raw/guides/guide/web-search.mdx +12 -10
- package/.docs/raw/guides/guide/whatsapp-chat-bot.mdx +421 -0
- package/.docs/raw/guides/index.mdx +3 -35
- package/.docs/raw/guides/migrations/agentnetwork.mdx +4 -4
- package/.docs/raw/guides/migrations/ai-sdk-v4-to-v5.mdx +119 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +121 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +42 -2
- package/.docs/raw/guides/migrations/upgrade-to-v1/evals.mdx +31 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +27 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/mcp.mdx +1 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +28 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +25 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +80 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/tools.mdx +68 -3
- package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +25 -1
- package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +174 -1
- package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +2 -2
- package/.docs/raw/index.mdx +3 -3
- package/.docs/raw/mcp/overview.mdx +358 -0
- package/.docs/raw/mcp/publishing-mcp-server.mdx +139 -0
- package/.docs/raw/memory/conversation-history.mdx +1 -1
- package/.docs/raw/memory/memory-processors.mdx +265 -80
- package/.docs/raw/memory/overview.mdx +2 -2
- package/.docs/raw/memory/semantic-recall.mdx +9 -9
- package/.docs/raw/memory/storage/memory-with-libsql.mdx +3 -8
- package/.docs/raw/memory/storage/memory-with-mongodb.mdx +150 -0
- package/.docs/raw/memory/storage/memory-with-pg.mdx +3 -8
- package/.docs/raw/memory/storage/memory-with-upstash.mdx +3 -8
- package/.docs/raw/memory/threads-and-resources.mdx +4 -4
- package/.docs/raw/memory/working-memory.mdx +16 -8
- package/.docs/raw/{logging.mdx → observability/logging.mdx} +7 -7
- package/.docs/raw/observability/overview.mdx +3 -4
- package/.docs/raw/observability/tracing/bridges/otel.mdx +200 -0
- package/.docs/raw/observability/tracing/exporters/arize.mdx +37 -1
- package/.docs/raw/observability/tracing/exporters/braintrust.mdx +20 -1
- package/.docs/raw/observability/tracing/exporters/cloud.mdx +2 -2
- package/.docs/raw/observability/tracing/exporters/default.mdx +1 -1
- package/.docs/raw/observability/tracing/exporters/langfuse.mdx +84 -1
- package/.docs/raw/observability/tracing/exporters/langsmith.mdx +13 -1
- package/.docs/raw/observability/tracing/exporters/otel.mdx +123 -25
- package/.docs/raw/observability/tracing/exporters/posthog.mdx +127 -0
- package/.docs/raw/observability/tracing/overview.mdx +80 -9
- package/.docs/raw/observability/tracing/processors/sensitive-data-filter.mdx +1 -2
- package/.docs/raw/rag/chunking-and-embedding.mdx +16 -17
- package/.docs/raw/rag/overview.mdx +4 -3
- package/.docs/raw/rag/retrieval.mdx +44 -39
- package/.docs/raw/rag/vector-databases.mdx +94 -3
- package/.docs/raw/reference/agents/agent.mdx +19 -16
- package/.docs/raw/reference/agents/generate.mdx +67 -99
- package/.docs/raw/reference/agents/generateLegacy.mdx +3 -3
- package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDefaultOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +1 -1
- package/.docs/raw/reference/agents/getDescription.mdx +1 -1
- package/.docs/raw/reference/agents/getInstructions.mdx +1 -1
- package/.docs/raw/reference/agents/getLLM.mdx +2 -2
- package/.docs/raw/reference/agents/getMemory.mdx +1 -1
- package/.docs/raw/reference/agents/getModel.mdx +1 -1
- package/.docs/raw/reference/agents/getTools.mdx +69 -0
- package/.docs/raw/reference/agents/getVoice.mdx +1 -1
- package/.docs/raw/reference/agents/listAgents.mdx +1 -1
- package/.docs/raw/reference/agents/listScorers.mdx +1 -1
- package/.docs/raw/reference/agents/listTools.mdx +2 -2
- package/.docs/raw/reference/agents/listWorkflows.mdx +1 -1
- package/.docs/raw/reference/agents/network.mdx +33 -72
- package/.docs/raw/reference/ai-sdk/chat-route.mdx +127 -0
- package/.docs/raw/reference/ai-sdk/handle-chat-stream.mdx +117 -0
- package/.docs/raw/reference/ai-sdk/handle-network-stream.mdx +64 -0
- package/.docs/raw/reference/ai-sdk/handle-workflow-stream.mdx +116 -0
- package/.docs/raw/reference/ai-sdk/network-route.mdx +99 -0
- package/.docs/raw/reference/ai-sdk/to-ai-sdk-stream.mdx +289 -0
- package/.docs/raw/reference/ai-sdk/with-mastra.mdx +119 -0
- package/.docs/raw/reference/ai-sdk/workflow-route.mdx +110 -0
- package/.docs/raw/reference/auth/auth0.mdx +1 -1
- package/.docs/raw/reference/auth/clerk.mdx +1 -1
- package/.docs/raw/reference/auth/firebase.mdx +1 -1
- package/.docs/raw/reference/auth/jwt.mdx +1 -1
- package/.docs/raw/reference/auth/supabase.mdx +1 -1
- package/.docs/raw/reference/auth/workos.mdx +1 -1
- package/.docs/raw/reference/cli/create-mastra.mdx +1 -1
- package/.docs/raw/reference/cli/mastra.mdx +19 -6
- package/.docs/raw/reference/client-js/agents.mdx +252 -68
- package/.docs/raw/reference/client-js/error-handling.mdx +1 -1
- package/.docs/raw/reference/client-js/logs.mdx +1 -1
- package/.docs/raw/reference/client-js/mastra-client.mdx +4 -4
- package/.docs/raw/reference/client-js/memory.mdx +48 -2
- package/.docs/raw/reference/client-js/observability.mdx +1 -1
- package/.docs/raw/reference/client-js/telemetry.mdx +1 -1
- package/.docs/raw/reference/client-js/tools.mdx +1 -1
- package/.docs/raw/reference/client-js/vectors.mdx +1 -1
- package/.docs/raw/reference/client-js/workflows.mdx +93 -64
- package/.docs/raw/reference/core/addGateway.mdx +59 -0
- package/.docs/raw/reference/core/getAgent.mdx +1 -1
- package/.docs/raw/reference/core/getAgentById.mdx +1 -1
- package/.docs/raw/reference/core/getDeployer.mdx +1 -1
- package/.docs/raw/reference/core/getGateway.mdx +59 -0
- package/.docs/raw/reference/core/getGatewayById.mdx +62 -0
- package/.docs/raw/reference/core/getLogger.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServer.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServerById.mdx +2 -2
- package/.docs/raw/reference/core/getMemory.mdx +73 -0
- package/.docs/raw/reference/core/getScorer.mdx +1 -1
- package/.docs/raw/reference/core/getScorerById.mdx +1 -1
- package/.docs/raw/reference/core/getServer.mdx +3 -3
- package/.docs/raw/reference/core/getStorage.mdx +1 -1
- package/.docs/raw/reference/core/getStoredAgentById.mdx +183 -0
- package/.docs/raw/reference/core/getTelemetry.mdx +1 -1
- package/.docs/raw/reference/core/getVector.mdx +1 -1
- package/.docs/raw/reference/core/getWorkflow.mdx +1 -1
- package/.docs/raw/reference/core/listAgents.mdx +1 -1
- package/.docs/raw/reference/core/listGateways.mdx +53 -0
- package/.docs/raw/reference/core/listLogs.mdx +2 -2
- package/.docs/raw/reference/core/listLogsByRunId.mdx +2 -2
- package/.docs/raw/reference/core/listMCPServers.mdx +2 -2
- package/.docs/raw/reference/core/listMemory.mdx +70 -0
- package/.docs/raw/reference/core/listScorers.mdx +1 -1
- package/.docs/raw/reference/core/listStoredAgents.mdx +151 -0
- package/.docs/raw/reference/core/listVectors.mdx +1 -1
- package/.docs/raw/reference/core/listWorkflows.mdx +1 -1
- package/.docs/raw/reference/core/mastra-class.mdx +17 -1
- package/.docs/raw/reference/core/mastra-model-gateway.mdx +227 -0
- package/.docs/raw/reference/core/setLogger.mdx +2 -2
- package/.docs/raw/reference/core/setStorage.mdx +1 -1
- package/.docs/raw/reference/core/setTelemetry.mdx +2 -2
- package/.docs/raw/reference/deployer/cloudflare.mdx +1 -1
- package/.docs/raw/reference/deployer/deployer.mdx +1 -1
- package/.docs/raw/reference/deployer/netlify.mdx +2 -3
- package/.docs/raw/reference/deployer/vercel.mdx +1 -1
- package/.docs/raw/reference/evals/answer-relevancy.mdx +29 -99
- package/.docs/raw/reference/evals/answer-similarity.mdx +13 -259
- package/.docs/raw/reference/evals/bias.mdx +30 -88
- package/.docs/raw/reference/evals/completeness.mdx +32 -91
- package/.docs/raw/reference/evals/content-similarity.mdx +29 -89
- package/.docs/raw/reference/evals/context-precision.mdx +29 -131
- package/.docs/raw/reference/evals/context-relevance.mdx +12 -12
- package/.docs/raw/reference/evals/create-scorer.mdx +1 -1
- package/.docs/raw/reference/evals/faithfulness.mdx +29 -102
- package/.docs/raw/reference/evals/hallucination.mdx +29 -104
- package/.docs/raw/reference/evals/keyword-coverage.mdx +29 -108
- package/.docs/raw/reference/evals/mastra-scorer.mdx +1 -1
- package/.docs/raw/reference/evals/noise-sensitivity.mdx +12 -12
- package/.docs/raw/reference/evals/prompt-alignment.mdx +16 -16
- package/.docs/raw/reference/evals/run-evals.mdx +1 -1
- package/.docs/raw/reference/evals/scorer-utils.mdx +362 -0
- package/.docs/raw/reference/evals/textual-difference.mdx +28 -101
- package/.docs/raw/reference/evals/tone-consistency.mdx +26 -99
- package/.docs/raw/reference/evals/tool-call-accuracy.mdx +8 -8
- package/.docs/raw/reference/evals/toxicity.mdx +30 -93
- package/.docs/raw/reference/index.mdx +1 -0
- package/.docs/raw/reference/logging/pino-logger.mdx +2 -2
- package/.docs/raw/reference/memory/createThread.mdx +1 -1
- package/.docs/raw/reference/memory/deleteMessages.mdx +1 -1
- package/.docs/raw/reference/memory/getThreadById.mdx +1 -1
- package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +1 -1
- package/.docs/raw/reference/memory/memory-class.mdx +6 -8
- package/.docs/raw/reference/memory/query.mdx +1 -1
- package/.docs/raw/reference/memory/recall.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/bridges/otel.mdx +177 -0
- package/.docs/raw/reference/observability/tracing/configuration.mdx +1 -5
- package/.docs/raw/reference/observability/tracing/exporters/arize.mdx +30 -1
- package/.docs/raw/reference/observability/tracing/exporters/braintrust.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/cloud-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/console-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/default-exporter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/exporters/langfuse.mdx +44 -1
- package/.docs/raw/reference/observability/tracing/exporters/langsmith.mdx +18 -2
- package/.docs/raw/reference/observability/tracing/exporters/otel.mdx +34 -44
- package/.docs/raw/reference/observability/tracing/exporters/posthog.mdx +132 -0
- package/.docs/raw/reference/observability/tracing/instances.mdx +1 -5
- package/.docs/raw/reference/observability/tracing/interfaces.mdx +30 -5
- package/.docs/raw/reference/observability/tracing/processors/sensitive-data-filter.mdx +1 -1
- package/.docs/raw/reference/observability/tracing/spans.mdx +1 -5
- package/.docs/raw/reference/processors/batch-parts-processor.mdx +2 -2
- package/.docs/raw/reference/processors/language-detector.mdx +11 -4
- package/.docs/raw/reference/processors/message-history-processor.mdx +131 -0
- package/.docs/raw/reference/processors/moderation-processor.mdx +13 -6
- package/.docs/raw/reference/processors/pii-detector.mdx +13 -6
- package/.docs/raw/reference/processors/processor-interface.mdx +803 -0
- package/.docs/raw/reference/processors/prompt-injection-detector.mdx +11 -4
- package/.docs/raw/reference/processors/semantic-recall-processor.mdx +197 -0
- package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +4 -5
- package/.docs/raw/reference/processors/token-limiter-processor.mdx +3 -3
- package/.docs/raw/reference/processors/tool-call-filter.mdx +125 -0
- package/.docs/raw/reference/processors/unicode-normalizer.mdx +2 -2
- package/.docs/raw/reference/processors/working-memory-processor.mdx +221 -0
- package/.docs/raw/reference/rag/chunk.mdx +1 -1
- package/.docs/raw/reference/rag/database-config.mdx +1 -1
- package/.docs/raw/reference/rag/document.mdx +1 -1
- package/.docs/raw/reference/rag/embeddings.mdx +6 -6
- package/.docs/raw/reference/rag/extract-params.mdx +1 -1
- package/.docs/raw/reference/rag/graph-rag.mdx +1 -1
- package/.docs/raw/reference/rag/metadata-filters.mdx +1 -1
- package/.docs/raw/reference/rag/rerank.mdx +2 -3
- package/.docs/raw/reference/rag/rerankWithScorer.mdx +1 -2
- package/.docs/raw/reference/server/create-route.mdx +328 -0
- package/.docs/raw/reference/server/express-adapter.mdx +260 -0
- package/.docs/raw/reference/server/hono-adapter.mdx +242 -0
- package/.docs/raw/reference/server/mastra-server.mdx +345 -0
- package/.docs/raw/reference/server/routes.mdx +250 -0
- package/.docs/raw/reference/storage/cloudflare-d1.mdx +38 -1
- package/.docs/raw/reference/storage/cloudflare.mdx +1 -1
- package/.docs/raw/reference/storage/convex.mdx +164 -0
- package/.docs/raw/reference/storage/dynamodb.mdx +1 -1
- package/.docs/raw/reference/storage/lance.mdx +34 -1
- package/.docs/raw/reference/storage/libsql.mdx +38 -1
- package/.docs/raw/reference/storage/mongodb.mdx +40 -1
- package/.docs/raw/reference/storage/mssql.mdx +38 -1
- package/.docs/raw/reference/storage/postgresql.mdx +38 -1
- package/.docs/raw/reference/storage/upstash.mdx +1 -1
- package/.docs/raw/reference/streaming/ChunkType.mdx +25 -4
- package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +1 -1
- package/.docs/raw/reference/streaming/agents/stream.mdx +84 -124
- package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +1 -1
- package/.docs/raw/reference/streaming/workflows/observeStream.mdx +8 -10
- package/.docs/raw/reference/streaming/workflows/{resumeStreamVNext.mdx → resumeStream.mdx} +51 -11
- package/.docs/raw/reference/streaming/workflows/stream.mdx +84 -25
- package/.docs/raw/reference/streaming/workflows/timeTravelStream.mdx +170 -0
- package/.docs/raw/reference/templates/overview.mdx +2 -5
- package/.docs/raw/reference/tools/client.mdx +2 -3
- package/.docs/raw/reference/tools/create-tool.mdx +135 -4
- package/.docs/raw/reference/tools/document-chunker-tool.mdx +1 -1
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +7 -7
- package/.docs/raw/reference/tools/mcp-client.mdx +131 -23
- package/.docs/raw/reference/tools/mcp-server.mdx +56 -8
- package/.docs/raw/reference/tools/vector-query-tool.mdx +16 -17
- package/.docs/raw/reference/vectors/astra.mdx +1 -1
- package/.docs/raw/reference/vectors/chroma.mdx +82 -2
- package/.docs/raw/reference/vectors/convex.mdx +429 -0
- package/.docs/raw/reference/vectors/couchbase.mdx +25 -18
- package/.docs/raw/reference/vectors/duckdb.mdx +462 -0
- package/.docs/raw/reference/vectors/elasticsearch.mdx +310 -0
- package/.docs/raw/reference/vectors/lance.mdx +39 -23
- package/.docs/raw/reference/vectors/libsql.mdx +36 -3
- package/.docs/raw/reference/vectors/mongodb.mdx +36 -3
- package/.docs/raw/reference/vectors/opensearch.mdx +38 -17
- package/.docs/raw/reference/vectors/pg.mdx +44 -37
- package/.docs/raw/reference/vectors/pinecone.mdx +70 -3
- package/.docs/raw/reference/vectors/qdrant.mdx +37 -2
- package/.docs/raw/reference/vectors/s3vectors.mdx +1 -1
- package/.docs/raw/reference/vectors/turbopuffer.mdx +75 -1
- package/.docs/raw/reference/vectors/upstash.mdx +1 -1
- package/.docs/raw/reference/vectors/vectorize.mdx +1 -1
- package/.docs/raw/reference/voice/azure.mdx +96 -81
- package/.docs/raw/reference/voice/cloudflare.mdx +1 -1
- package/.docs/raw/reference/voice/composite-voice.mdx +72 -29
- package/.docs/raw/reference/voice/deepgram.mdx +1 -1
- package/.docs/raw/reference/voice/elevenlabs.mdx +1 -1
- package/.docs/raw/reference/voice/google-gemini-live.mdx +1 -1
- package/.docs/raw/reference/voice/google.mdx +160 -21
- package/.docs/raw/reference/voice/mastra-voice.mdx +1 -1
- package/.docs/raw/reference/voice/murf.mdx +1 -1
- package/.docs/raw/reference/voice/openai-realtime.mdx +3 -3
- package/.docs/raw/reference/voice/openai.mdx +1 -1
- package/.docs/raw/reference/voice/playai.mdx +1 -1
- package/.docs/raw/reference/voice/sarvam.mdx +1 -1
- package/.docs/raw/reference/voice/speechify.mdx +1 -1
- package/.docs/raw/reference/voice/voice.addInstructions.mdx +3 -4
- package/.docs/raw/reference/voice/voice.addTools.mdx +2 -2
- package/.docs/raw/reference/voice/voice.answer.mdx +2 -2
- package/.docs/raw/reference/voice/voice.close.mdx +2 -2
- package/.docs/raw/reference/voice/voice.connect.mdx +2 -2
- package/.docs/raw/reference/voice/voice.events.mdx +1 -1
- package/.docs/raw/reference/voice/voice.getSpeakers.mdx +1 -1
- package/.docs/raw/reference/voice/voice.listen.mdx +87 -53
- package/.docs/raw/reference/voice/voice.off.mdx +2 -2
- package/.docs/raw/reference/voice/voice.on.mdx +2 -2
- package/.docs/raw/reference/voice/voice.send.mdx +2 -2
- package/.docs/raw/reference/voice/voice.speak.mdx +76 -41
- package/.docs/raw/reference/voice/voice.updateConfig.mdx +2 -2
- package/.docs/raw/reference/workflows/run-methods/cancel.mdx +1 -1
- package/.docs/raw/reference/workflows/run-methods/restart.mdx +142 -0
- package/.docs/raw/reference/workflows/run-methods/resume.mdx +45 -1
- package/.docs/raw/reference/workflows/run-methods/start.mdx +48 -4
- package/.docs/raw/reference/workflows/run-methods/timeTravel.mdx +310 -0
- package/.docs/raw/reference/workflows/run.mdx +28 -6
- package/.docs/raw/reference/workflows/step.mdx +65 -1
- package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +69 -4
- package/.docs/raw/reference/workflows/workflow-methods/map.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/then.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow.mdx +44 -2
- package/.docs/raw/server-db/custom-adapters.mdx +386 -0
- package/.docs/raw/server-db/custom-api-routes.mdx +6 -6
- package/.docs/raw/server-db/mastra-client.mdx +3 -4
- package/.docs/raw/server-db/{production-server.mdx → mastra-server.mdx} +22 -12
- package/.docs/raw/server-db/middleware.mdx +31 -31
- package/.docs/raw/server-db/request-context.mdx +3 -4
- package/.docs/raw/server-db/server-adapters.mdx +312 -0
- package/.docs/raw/server-db/storage.mdx +12 -1
- package/.docs/raw/streaming/events.mdx +1 -1
- package/.docs/raw/streaming/overview.mdx +27 -16
- package/.docs/raw/streaming/tool-streaming.mdx +58 -19
- package/.docs/raw/streaming/workflow-streaming.mdx +6 -12
- package/.docs/raw/tools-mcp/advanced-usage.mdx +2 -3
- package/.docs/raw/tools-mcp/mcp-overview.mdx +4 -6
- package/.docs/raw/tools-mcp/overview.mdx +1 -1
- package/.docs/raw/voice/overview.mdx +88 -41
- package/.docs/raw/voice/speech-to-speech.mdx +5 -5
- package/.docs/raw/voice/speech-to-text.mdx +2 -3
- package/.docs/raw/voice/text-to-speech.mdx +2 -3
- package/.docs/raw/workflows/agents-and-tools.mdx +43 -5
- package/.docs/raw/workflows/control-flow.mdx +534 -3
- package/.docs/raw/workflows/error-handling.mdx +5 -4
- package/.docs/raw/workflows/human-in-the-loop.mdx +160 -213
- package/.docs/raw/workflows/inngest-workflow.mdx +1 -1
- package/.docs/raw/workflows/input-data-mapping.mdx +1 -1
- package/.docs/raw/workflows/overview.mdx +67 -47
- package/.docs/raw/workflows/snapshots.mdx +5 -3
- package/.docs/raw/workflows/suspend-and-resume.mdx +121 -204
- package/.docs/raw/workflows/time-travel.mdx +313 -0
- package/.docs/raw/workflows/workflow-state.mdx +190 -0
- package/CHANGELOG.md +88 -0
- package/dist/{chunk-5NJC7NRO.js → chunk-4CM2BQNP.js} +24 -4
- package/dist/prepare-docs/package-changes.d.ts.map +1 -1
- package/dist/prepare-docs/prepare.js +1 -1
- package/dist/stdio.js +17 -19
- package/package.json +10 -14
- package/.docs/raw/deployment/serverless-platforms/index.mdx +0 -58
- package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +0 -688
- package/.docs/raw/frameworks/agentic-uis/cedar-os.mdx +0 -123
- package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +0 -382
- package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +0 -179
- package/.docs/raw/frameworks/web-frameworks/next-js.mdx +0 -379
- package/.docs/raw/getting-started/templates.mdx +0 -73
- package/.docs/raw/mastra-cloud/observability.mdx +0 -51
- package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +0 -47
- package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +0 -153
|
@@ -0,0 +1,627 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Using AI SDK UI | Frameworks"
|
|
3
|
+
description: "Learn how Mastra leverages the AI SDK UI library and how you can leverage it further with Mastra"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import Tabs from "@theme/Tabs";
|
|
7
|
+
import TabItem from "@theme/TabItem";
|
|
8
|
+
|
|
9
|
+
# Using AI SDK UI
|
|
10
|
+
|
|
11
|
+
[AI SDK UI](https://sdk.vercel.ai) is a library of React utilities and components for building AI-powered interfaces. In this guide, you'll learn how to use `@mastra/ai-sdk` to convert Mastra's output to AI SDK-compatible formats, enabling you to use its hooks and components in your frontend.
|
|
12
|
+
|
|
13
|
+
:::note
|
|
14
|
+
Migrating from AI SDK v4 to v5? See the [migration guide](/guides/v1/migrations/ai-sdk-v4-to-v5).
|
|
15
|
+
:::
|
|
16
|
+
|
|
17
|
+
:::tip
|
|
18
|
+
|
|
19
|
+
Want to see more examples? Visit Mastra's [**UI Dojo**](https://ui-dojo.mastra.ai/) or the [Next.js quickstart guide](/guides/v1/getting-started/next-js).
|
|
20
|
+
|
|
21
|
+
:::
|
|
22
|
+
|
|
23
|
+
## Getting Started
|
|
24
|
+
|
|
25
|
+
Use Mastra and AI SDK UI together by installing the `@mastra/ai-sdk` package. `@mastra/ai-sdk` provides custom API routes and utilities for streaming Mastra agents in AI SDK-compatible formats. This includes chat, workflow, and network route handlers, along with utilities and exported types for UI integrations.
|
|
26
|
+
|
|
27
|
+
`@mastra/ai-sdk` integrates with AI SDK UI's three main hooks: [`useChat()`](https://ai-sdk.dev/docs/ai-sdk-ui/chatbot), [`useCompletion()`](https://ai-sdk.dev/docs/ai-sdk-ui/completion), and [`useObject()`](https://ai-sdk.dev/docs/ai-sdk-ui/object-generation).
|
|
28
|
+
|
|
29
|
+
Install the required packages to get started:
|
|
30
|
+
|
|
31
|
+
<Tabs>
|
|
32
|
+
<TabItem value="npm" label="npm">
|
|
33
|
+
```bash copy
|
|
34
|
+
npm install @mastra/ai-sdk@beta @ai-sdk/react ai
|
|
35
|
+
```
|
|
36
|
+
</TabItem>
|
|
37
|
+
<TabItem value="pnpm" label="pnpm">
|
|
38
|
+
```bash copy
|
|
39
|
+
pnpm add @mastra/ai-sdk@beta @ai-sdk/react ai
|
|
40
|
+
```
|
|
41
|
+
</TabItem>
|
|
42
|
+
<TabItem value="yarn" label="yarn">
|
|
43
|
+
```bash copy
|
|
44
|
+
yarn add @mastra/ai-sdk@beta @ai-sdk/react ai
|
|
45
|
+
```
|
|
46
|
+
</TabItem>
|
|
47
|
+
<TabItem value="bun" label="bun">
|
|
48
|
+
```bash copy
|
|
49
|
+
bun add @mastra/ai-sdk@beta @ai-sdk/react ai
|
|
50
|
+
```
|
|
51
|
+
</TabItem>
|
|
52
|
+
</Tabs>
|
|
53
|
+
|
|
54
|
+
You're now ready to follow the integration guides and recipes below!
|
|
55
|
+
|
|
56
|
+
## Integration Guides
|
|
57
|
+
|
|
58
|
+
Typically, you'll set up API routes that stream Mastra content in AI SDK-compatible format, and then use those routes in AI SDK UI hooks like `useChat()`. Below you'll find two main approaches to achieve this:
|
|
59
|
+
|
|
60
|
+
- [Mastra's server](#mastras-server)
|
|
61
|
+
- [Framework-agnostic](#framework-agnostic)
|
|
62
|
+
|
|
63
|
+
Once you have your API routes set up, you can use them in the [`useChat()`](#usechat) hook.
|
|
64
|
+
|
|
65
|
+
### Mastra's server
|
|
66
|
+
|
|
67
|
+
Run Mastra as a standalone server and connect your frontend (e.g. using Vite + React) to its API endpoints. You'll be using Mastra's [custom API routes](/docs/v1/server-db/custom-api-routes) feature for this.
|
|
68
|
+
|
|
69
|
+
:::info
|
|
70
|
+
|
|
71
|
+
Mastra's [**UI Dojo**](https://ui-dojo.mastra.ai/) is an example of this setup.
|
|
72
|
+
|
|
73
|
+
:::
|
|
74
|
+
|
|
75
|
+
You can use [`chatRoute()`](/reference/v1/ai-sdk/chat-route), [`workflowRoute()`](/reference/v1/ai-sdk/workflow-route), and [`networkRoute()`](/reference/v1/ai-sdk/network-route) to create API routes that stream Mastra content in AI SDK-compatible format. Once implemented, you can use these API routes in [`useChat()`](#usechat).
|
|
76
|
+
|
|
77
|
+
<Tabs>
|
|
78
|
+
|
|
79
|
+
<TabItem value="chatRoute" label="chatRoute()">
|
|
80
|
+
|
|
81
|
+
This example shows how to set up a chat route at the `/chat` endpoint that uses an agent with the ID `weatherAgent`.
|
|
82
|
+
|
|
83
|
+
```typescript title="src/mastra/index.ts" copy
|
|
84
|
+
import { Mastra } from "@mastra/core";
|
|
85
|
+
import { chatRoute } from "@mastra/ai-sdk";
|
|
86
|
+
|
|
87
|
+
export const mastra = new Mastra({
|
|
88
|
+
server: {
|
|
89
|
+
apiRoutes: [
|
|
90
|
+
chatRoute({
|
|
91
|
+
path: "/chat",
|
|
92
|
+
agent: "weatherAgent",
|
|
93
|
+
}),
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
You can also use dynamic agent routing, see the [`chatRoute()` reference documentation](/reference/v1/ai-sdk/chat-route) for more details.
|
|
100
|
+
|
|
101
|
+
</TabItem>
|
|
102
|
+
|
|
103
|
+
<TabItem value="workflowRoute" label="workflowRoute()">
|
|
104
|
+
|
|
105
|
+
This example shows how to set up a workflow route at the `/workflow` endpoint that uses a workflow with the ID `weatherWorkflow`.
|
|
106
|
+
|
|
107
|
+
```typescript title="src/mastra/index.ts" copy
|
|
108
|
+
import { Mastra } from "@mastra/core";
|
|
109
|
+
import { workflowRoute } from "@mastra/ai-sdk";
|
|
110
|
+
|
|
111
|
+
export const mastra = new Mastra({
|
|
112
|
+
server: {
|
|
113
|
+
apiRoutes: [
|
|
114
|
+
workflowRoute({
|
|
115
|
+
path: "/workflow",
|
|
116
|
+
workflow: "weatherWorkflow",
|
|
117
|
+
}),
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
You can also use dynamic workflow routing, see the [`workflowRoute()` reference documentation](/reference/v1/ai-sdk/workflow-route) for more details.
|
|
124
|
+
|
|
125
|
+
:::tip Agent streaming in workflows
|
|
126
|
+
|
|
127
|
+
When a workflow step pipes an agent's stream to the workflow writer (e.g., `await response.fullStream.pipeTo(writer)`), the agent's text chunks and tool calls are forwarded to the UI stream in real time, even when the agent runs inside workflow steps.
|
|
128
|
+
|
|
129
|
+
See [Workflow Streaming](/docs/v1/streaming/workflow-streaming#streaming-agent-text-chunks-to-ui) for more details.
|
|
130
|
+
|
|
131
|
+
:::
|
|
132
|
+
|
|
133
|
+
</TabItem>
|
|
134
|
+
|
|
135
|
+
<TabItem value="networkRoute" label="networkRoute()">
|
|
136
|
+
|
|
137
|
+
This example shows how to set up a network route at the `/network` endpoint that uses an agent with the ID `weatherAgent`.
|
|
138
|
+
|
|
139
|
+
```typescript title="src/mastra/index.ts" copy
|
|
140
|
+
import { Mastra } from "@mastra/core";
|
|
141
|
+
import { networkRoute } from "@mastra/ai-sdk";
|
|
142
|
+
|
|
143
|
+
export const mastra = new Mastra({
|
|
144
|
+
server: {
|
|
145
|
+
apiRoutes: [
|
|
146
|
+
networkRoute({
|
|
147
|
+
path: "/network",
|
|
148
|
+
agent: "weatherAgent",
|
|
149
|
+
}),
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
You can also use dynamic network routing, see the [`networkRoute()` reference documentation](/reference/v1/ai-sdk/network-route) for more details.
|
|
156
|
+
|
|
157
|
+
</TabItem>
|
|
158
|
+
|
|
159
|
+
</Tabs>
|
|
160
|
+
|
|
161
|
+
### Framework-agnostic
|
|
162
|
+
|
|
163
|
+
If you don't want to run Mastra's server and instead use frameworks like Next.js or Express, you can use the [`handleChatStream()`](/reference/v1/ai-sdk/handle-chat-stream), [`handleWorkflowStream()`](/reference/v1/ai-sdk/handle-workflow-stream), and [`handleNetworkStream()`](/reference/v1/ai-sdk/handle-network-stream) functions in your own API route handlers.
|
|
164
|
+
|
|
165
|
+
They return a `ReadableStream` that you can wrap with [`createUIMessageStreamResponse()`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/create-ui-message-stream-response).
|
|
166
|
+
|
|
167
|
+
The examples below show you how to use them with Next.js App Router.
|
|
168
|
+
|
|
169
|
+
<Tabs>
|
|
170
|
+
|
|
171
|
+
<TabItem value="handleChatStream" label="handleChatStream()">
|
|
172
|
+
|
|
173
|
+
This example shows how to set up a chat route at the `/chat` endpoint that uses an agent with the ID `weatherAgent`.
|
|
174
|
+
|
|
175
|
+
```typescript title="app/chat/route.ts" copy
|
|
176
|
+
import { handleChatStream } from '@mastra/ai-sdk';
|
|
177
|
+
import { createUIMessageStreamResponse } from 'ai';
|
|
178
|
+
import { mastra } from '@/src/mastra';
|
|
179
|
+
|
|
180
|
+
export async function POST(req: Request) {
|
|
181
|
+
const params = await req.json();
|
|
182
|
+
const stream = await handleChatStream({
|
|
183
|
+
mastra,
|
|
184
|
+
agentId: 'weatherAgent',
|
|
185
|
+
params,
|
|
186
|
+
});
|
|
187
|
+
return createUIMessageStreamResponse({ stream });
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
</TabItem>
|
|
192
|
+
|
|
193
|
+
<TabItem value="handleWorkflowStream" label="handleWorkflowStream()">
|
|
194
|
+
|
|
195
|
+
This example shows how to set up a workflow route at the `/workflow` endpoint that uses a workflow with the ID `weatherWorkflow`.
|
|
196
|
+
|
|
197
|
+
```typescript title="app/workflow/route.ts" copy
|
|
198
|
+
import { handleWorkflowStream } from '@mastra/ai-sdk';
|
|
199
|
+
import { createUIMessageStreamResponse } from 'ai';
|
|
200
|
+
import { mastra } from '@/src/mastra';
|
|
201
|
+
|
|
202
|
+
export async function POST(req: Request) {
|
|
203
|
+
const params = await req.json();
|
|
204
|
+
const stream = await handleWorkflowStream({
|
|
205
|
+
mastra,
|
|
206
|
+
workflowId: 'weatherWorkflow',
|
|
207
|
+
params,
|
|
208
|
+
});
|
|
209
|
+
return createUIMessageStreamResponse({ stream });
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
</TabItem>
|
|
214
|
+
|
|
215
|
+
<TabItem value="handleNetworkStream" label="handleNetworkStream()">
|
|
216
|
+
|
|
217
|
+
This example shows how to set up a network route at the `/network` endpoint that uses an agent with the ID `routingAgent`.
|
|
218
|
+
|
|
219
|
+
```typescript title="app/network/route.ts" copy
|
|
220
|
+
import { handleNetworkStream } from '@mastra/ai-sdk';
|
|
221
|
+
import { createUIMessageStreamResponse } from 'ai';
|
|
222
|
+
import { mastra } from '@/src/mastra';
|
|
223
|
+
|
|
224
|
+
export async function POST(req: Request) {
|
|
225
|
+
const params = await req.json();
|
|
226
|
+
const stream = await handleNetworkStream({
|
|
227
|
+
mastra,
|
|
228
|
+
agentId: 'routingAgent',
|
|
229
|
+
params,
|
|
230
|
+
});
|
|
231
|
+
return createUIMessageStreamResponse({ stream });
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
</TabItem>
|
|
236
|
+
|
|
237
|
+
</Tabs>
|
|
238
|
+
|
|
239
|
+
### `useChat()`
|
|
240
|
+
|
|
241
|
+
Whether you created API routes through [Mastra's server](#mastras-server) or used a [framework of your choice](#framework-agnostic), you can now use the API endpoints in the `useChat()` hook.
|
|
242
|
+
|
|
243
|
+
Assuming you set up a route at `/chat` that uses a weather agent, you can ask it questions as seen below. It's important that you set the correct `api` URL.
|
|
244
|
+
|
|
245
|
+
```ts {9}
|
|
246
|
+
import { useChat } from "@ai-sdk/react";
|
|
247
|
+
import { useState } from "react";
|
|
248
|
+
import { DefaultChatTransport } from "ai";
|
|
249
|
+
|
|
250
|
+
export default function Chat() {
|
|
251
|
+
const [inputValue, setInputValue] = useState("")
|
|
252
|
+
const { messages, sendMessage } = useChat({
|
|
253
|
+
transport: new DefaultChatTransport({
|
|
254
|
+
api: "http://localhost:4111/chat",
|
|
255
|
+
}),
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
const handleFormSubmit = (e: React.FormEvent) => {
|
|
259
|
+
e.preventDefault();
|
|
260
|
+
sendMessage({ text: inputValue });
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
return (
|
|
264
|
+
<div>
|
|
265
|
+
<pre>{JSON.stringify(messages, null, 2)}</pre>
|
|
266
|
+
<form onSubmit={handleFormSubmit}>
|
|
267
|
+
<input value={inputValue} onChange={e => setInputValue(e.target.value)} placeholder="Name of the city" />
|
|
268
|
+
</form>
|
|
269
|
+
</div>
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Use [`prepareSendMessagesRequest`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/use-chat#transport.default-chat-transport.prepare-send-messages-request) to customize the request sent to the chat route, for example to pass additional configuration to the agent.
|
|
275
|
+
|
|
276
|
+
### `useCompletion()`
|
|
277
|
+
|
|
278
|
+
The `useCompletion()` hook handles single-turn completions between your frontend and a Mastra agent, allowing you to send a prompt and receive a streamed response over HTTP.
|
|
279
|
+
|
|
280
|
+
Your frontend could look like this:
|
|
281
|
+
|
|
282
|
+
```typescript title="app/page.tsx" copy
|
|
283
|
+
import { useCompletion } from '@ai-sdk/react';
|
|
284
|
+
|
|
285
|
+
export default function Page() {
|
|
286
|
+
const { completion, input, handleInputChange, handleSubmit } = useCompletion({
|
|
287
|
+
api: '/api/completion',
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
return (
|
|
291
|
+
<form onSubmit={handleSubmit}>
|
|
292
|
+
<input
|
|
293
|
+
name="prompt"
|
|
294
|
+
value={input}
|
|
295
|
+
onChange={handleInputChange}
|
|
296
|
+
id="input"
|
|
297
|
+
/>
|
|
298
|
+
<button type="submit">Submit</button>
|
|
299
|
+
<div>{completion}</div>
|
|
300
|
+
</form>
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Below are two approaches to implementing the backend:
|
|
306
|
+
|
|
307
|
+
<Tabs>
|
|
308
|
+
|
|
309
|
+
<TabItem value="mastra-server" label="Mastra Server">
|
|
310
|
+
|
|
311
|
+
```ts title="src/mastra/index.ts" copy
|
|
312
|
+
import { Mastra } from '@mastra/core/mastra';
|
|
313
|
+
import { registerApiRoute } from '@mastra/core/server';
|
|
314
|
+
import { handleChatStream } from '@mastra/ai-sdk';
|
|
315
|
+
import { createUIMessageStreamResponse } from 'ai';
|
|
316
|
+
|
|
317
|
+
export const mastra = new Mastra({
|
|
318
|
+
server: {
|
|
319
|
+
apiRoutes: [
|
|
320
|
+
registerApiRoute('/completion', {
|
|
321
|
+
method: 'POST',
|
|
322
|
+
handler: async (c) => {
|
|
323
|
+
const { prompt } = await c.req.json();
|
|
324
|
+
const mastra = c.get('mastra');
|
|
325
|
+
const stream = await handleChatStream({
|
|
326
|
+
mastra,
|
|
327
|
+
agentId: 'weatherAgent',
|
|
328
|
+
params: {
|
|
329
|
+
messages: [
|
|
330
|
+
{
|
|
331
|
+
id: "1",
|
|
332
|
+
role: 'user',
|
|
333
|
+
parts: [
|
|
334
|
+
{
|
|
335
|
+
type: 'text',
|
|
336
|
+
text: prompt
|
|
337
|
+
}
|
|
338
|
+
]
|
|
339
|
+
}
|
|
340
|
+
],
|
|
341
|
+
}
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
return createUIMessageStreamResponse({ stream });
|
|
345
|
+
}
|
|
346
|
+
})
|
|
347
|
+
]
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
</TabItem>
|
|
353
|
+
|
|
354
|
+
<TabItem value="nextjs" label="Next.js">
|
|
355
|
+
|
|
356
|
+
```ts title="app/completion/route.ts" copy
|
|
357
|
+
import { handleChatStream } from '@mastra/ai-sdk';
|
|
358
|
+
import { createUIMessageStreamResponse } from 'ai';
|
|
359
|
+
import { mastra } from '@/src/mastra';
|
|
360
|
+
|
|
361
|
+
// Allow streaming responses up to 30 seconds
|
|
362
|
+
export const maxDuration = 30;
|
|
363
|
+
|
|
364
|
+
export async function POST(req: Request) {
|
|
365
|
+
const { prompt }: { prompt: string } = await req.json();
|
|
366
|
+
|
|
367
|
+
const stream = await handleChatStream({
|
|
368
|
+
mastra,
|
|
369
|
+
agentId: 'weatherAgent',
|
|
370
|
+
params: {
|
|
371
|
+
messages: [
|
|
372
|
+
{
|
|
373
|
+
id: "1",
|
|
374
|
+
role: 'user',
|
|
375
|
+
parts: [
|
|
376
|
+
{
|
|
377
|
+
type: 'text',
|
|
378
|
+
text: prompt
|
|
379
|
+
}
|
|
380
|
+
]
|
|
381
|
+
}
|
|
382
|
+
],
|
|
383
|
+
},
|
|
384
|
+
});
|
|
385
|
+
return createUIMessageStreamResponse({ stream });
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
</TabItem>
|
|
390
|
+
|
|
391
|
+
</Tabs>
|
|
392
|
+
|
|
393
|
+
## Recipes
|
|
394
|
+
|
|
395
|
+
### Stream transformations
|
|
396
|
+
|
|
397
|
+
To manually transform Mastra's streams to AI SDK-compatible format, use the [`toAISdkStream()`](/reference/v1/ai-sdk/to-ai-sdk-stream) utility. See the [examples](/reference/v1/ai-sdk/to-ai-sdk-stream#examples) for concrete usage patterns.
|
|
398
|
+
|
|
399
|
+
### Passing additional data
|
|
400
|
+
|
|
401
|
+
[`sendMessage()`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/use-chat#send-message) allows you to pass additional data from the frontend to Mastra. This data can then be used on the server as [`RequestContext`](/docs/v1/server-db/request-context).
|
|
402
|
+
|
|
403
|
+
Here's an example of the frontend code:
|
|
404
|
+
|
|
405
|
+
```typescript {15-25} copy
|
|
406
|
+
import { useChat } from "@ai-sdk/react";
|
|
407
|
+
import { useState } from "react";
|
|
408
|
+
import { DefaultChatTransport } from 'ai';
|
|
409
|
+
|
|
410
|
+
export function ChatAdditional() {
|
|
411
|
+
const [inputValue, setInputValue] = useState('')
|
|
412
|
+
const { messages, sendMessage } = useChat({
|
|
413
|
+
transport: new DefaultChatTransport({
|
|
414
|
+
api: 'http://localhost:4111/chat-extra',
|
|
415
|
+
}),
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
const handleFormSubmit = (e: React.FormEvent) => {
|
|
419
|
+
e.preventDefault();
|
|
420
|
+
sendMessage({ text: inputValue }, {
|
|
421
|
+
body: {
|
|
422
|
+
data: {
|
|
423
|
+
userId: "user123",
|
|
424
|
+
preferences: {
|
|
425
|
+
language: "en",
|
|
426
|
+
temperature: "celsius"
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
return (
|
|
434
|
+
<div>
|
|
435
|
+
<pre>{JSON.stringify(messages, null, 2)}</pre>
|
|
436
|
+
<form onSubmit={handleFormSubmit}>
|
|
437
|
+
<input value={inputValue} onChange={e => setInputValue(e.target.value)} placeholder="Name of the city" />
|
|
438
|
+
</form>
|
|
439
|
+
</div>
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
Two examples on how to implement the backend portion of it.
|
|
445
|
+
|
|
446
|
+
<Tabs>
|
|
447
|
+
|
|
448
|
+
<TabItem value="mastra-server" label="Mastra Server">
|
|
449
|
+
|
|
450
|
+
Add a `chatRoute()` to your Mastra configuration like shown above. Then, add a server-level middleware:
|
|
451
|
+
|
|
452
|
+
```typescript title="src/mastra/index.ts" copy
|
|
453
|
+
import { Mastra } from "@mastra/core";
|
|
454
|
+
|
|
455
|
+
export const mastra = new Mastra({
|
|
456
|
+
server: {
|
|
457
|
+
middleware: [
|
|
458
|
+
async (c, next) => {
|
|
459
|
+
const requestContext = c.get("requestContext");
|
|
460
|
+
|
|
461
|
+
if (c.req.method === "POST") {
|
|
462
|
+
const clonedReq = c.req.raw.clone();
|
|
463
|
+
const body = await clonedReq.json();
|
|
464
|
+
|
|
465
|
+
if (body?.data) {
|
|
466
|
+
for (const [key, value] of Object.entries(body.data)) {
|
|
467
|
+
requestContext.set(key, value);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
await next();
|
|
472
|
+
},
|
|
473
|
+
],
|
|
474
|
+
},
|
|
475
|
+
});
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
:::info
|
|
479
|
+
|
|
480
|
+
You can access this data in your tools via the `requestContext` parameter. See the [Request Context documentation](/docs/v1/server-db/request-context) for more details.
|
|
481
|
+
|
|
482
|
+
:::
|
|
483
|
+
|
|
484
|
+
</TabItem>
|
|
485
|
+
|
|
486
|
+
<TabItem value="nextjs" label="Next.js">
|
|
487
|
+
|
|
488
|
+
```typescript title="app/chat-extra/route.ts" copy
|
|
489
|
+
import { handleChatStream } from '@mastra/ai-sdk';
|
|
490
|
+
import { RequestContext } from "@mastra/core/request-context";
|
|
491
|
+
import { createUIMessageStreamResponse } from 'ai';
|
|
492
|
+
import { mastra } from '@/src/mastra';
|
|
493
|
+
|
|
494
|
+
export async function POST(req: Request) {
|
|
495
|
+
const { messages, data } = await req.json();
|
|
496
|
+
|
|
497
|
+
const requestContext = new RequestContext();
|
|
498
|
+
|
|
499
|
+
if (data) {
|
|
500
|
+
for (const [key, value] of Object.entries(data)) {
|
|
501
|
+
requestContext.set(key, value);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
const stream = await handleChatStream({
|
|
506
|
+
mastra,
|
|
507
|
+
agentId: 'weatherAgent',
|
|
508
|
+
params: {
|
|
509
|
+
messages,
|
|
510
|
+
requestContext,
|
|
511
|
+
},
|
|
512
|
+
});
|
|
513
|
+
return createUIMessageStreamResponse({ stream });
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
</TabItem>
|
|
518
|
+
|
|
519
|
+
</Tabs>
|
|
520
|
+
|
|
521
|
+
### Custom UI
|
|
522
|
+
|
|
523
|
+
The `@mastra/ai-sdk` package transforms and emits Mastra streams (e.g workflow, network streams) into AI SDK-compatible [uiMessages DataParts](https://ai-sdk.dev/docs/reference/ai-sdk-core/ui-message#datauipart) format.
|
|
524
|
+
|
|
525
|
+
- **Top-level parts**: These are streamed via direct workflow and network stream transformations (e.g in `workflowRoute()` and `networkRoute()`)
|
|
526
|
+
- `data-workflow`: Aggregates a workflow run with step inputs/outputs and final usage.
|
|
527
|
+
- `data-network`: Aggregates a routing/network run with ordered steps (agent/workflow/tool executions) and outputs.
|
|
528
|
+
|
|
529
|
+
- **Nested parts**: These are streamed via nested and merged streams from within a tool's `execute()` method.
|
|
530
|
+
- `data-tool-workflow`: Nested workflow emitted from within a tool stream.
|
|
531
|
+
- `data-tool-network`: Nested network emitted from within an tool stream.
|
|
532
|
+
- `data-tool-agent`: Nested agent emitted from within an tool stream.
|
|
533
|
+
|
|
534
|
+
Here's an example: For a [nested agent stream within a tool](/docs/v1/streaming/tool-streaming#tool-using-an-agent), `data-tool-agent` UI message parts will be emitted and can be leveraged on the client as documented below:
|
|
535
|
+
|
|
536
|
+
```typescript title="app/page.tsx" copy
|
|
537
|
+
"use client";
|
|
538
|
+
|
|
539
|
+
import { useChat } from "@ai-sdk/react";
|
|
540
|
+
import { AgentTool } from '../ui/agent-tool';
|
|
541
|
+
import { DefaultChatTransport } from 'ai';
|
|
542
|
+
import type { AgentDataPart } from "@mastra/ai-sdk";
|
|
543
|
+
|
|
544
|
+
export default function Page() {
|
|
545
|
+
const { messages } = useChat({
|
|
546
|
+
transport: new DefaultChatTransport({
|
|
547
|
+
api: 'http://localhost:4111/chat',
|
|
548
|
+
}),
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
return (
|
|
552
|
+
<div>
|
|
553
|
+
{messages.map((message) => (
|
|
554
|
+
<div key={message.id}>
|
|
555
|
+
{message.parts.map((part, i) => {
|
|
556
|
+
switch (part.type) {
|
|
557
|
+
case 'data-tool-agent':
|
|
558
|
+
return (
|
|
559
|
+
<AgentTool {...part.data as AgentDataPart} key={`${message.id}-${i}`} />
|
|
560
|
+
);
|
|
561
|
+
default:
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
})}
|
|
565
|
+
</div>
|
|
566
|
+
))}
|
|
567
|
+
</div>
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
```typescript title="ui/agent-tool.ts" copy
|
|
573
|
+
import { Tool, ToolContent, ToolHeader, ToolOutput } from "../ai-elements/tool";
|
|
574
|
+
import type { AgentDataPart } from "@mastra/ai-sdk";
|
|
575
|
+
|
|
576
|
+
export const AgentTool = ({ id, text, status }: AgentDataPart) => {
|
|
577
|
+
return (
|
|
578
|
+
<Tool>
|
|
579
|
+
<ToolHeader
|
|
580
|
+
type={`${id}`}
|
|
581
|
+
state={status === 'finished' ? 'output-available' : 'input-available'}
|
|
582
|
+
/>
|
|
583
|
+
<ToolContent>
|
|
584
|
+
<ToolOutput output={text} />
|
|
585
|
+
</ToolContent>
|
|
586
|
+
</Tool>
|
|
587
|
+
);
|
|
588
|
+
};
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
### Custom Tool streaming
|
|
592
|
+
|
|
593
|
+
To stream custom data parts from within your tool execution function, use the `writer.custom()` method.
|
|
594
|
+
|
|
595
|
+
:::tip
|
|
596
|
+
|
|
597
|
+
It is important that you `await` the `writer.custom()` call.
|
|
598
|
+
|
|
599
|
+
:::
|
|
600
|
+
|
|
601
|
+
```typescript {4,7-10,14-17} copy
|
|
602
|
+
import { createTool } from "@mastra/core/tools";
|
|
603
|
+
|
|
604
|
+
export const testTool = createTool({
|
|
605
|
+
execute: async (inputData, context) => {
|
|
606
|
+
const { value } = inputData;
|
|
607
|
+
|
|
608
|
+
await context?.writer?.custom({
|
|
609
|
+
type: "data-tool-progress",
|
|
610
|
+
status: "pending"
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
const response = await fetch(...);
|
|
614
|
+
|
|
615
|
+
await context?.writer?.custom({
|
|
616
|
+
type: "data-tool-progress",
|
|
617
|
+
status: "success"
|
|
618
|
+
});
|
|
619
|
+
|
|
620
|
+
return {
|
|
621
|
+
value: ""
|
|
622
|
+
};
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
For more information about tool streaming see [Tool streaming documentation](/docs/v1/streaming/tool-streaming).
|