@mastra/mcp-docs-server 1.1.5 → 1.1.6
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/docs/agents/adding-voice.md +349 -0
- package/.docs/docs/agents/agent-approval.md +558 -0
- package/.docs/docs/agents/agent-memory.md +209 -0
- package/.docs/docs/agents/guardrails.md +374 -0
- package/.docs/docs/agents/network-approval.md +275 -0
- package/.docs/docs/agents/networks.md +299 -0
- package/.docs/docs/agents/overview.md +304 -0
- package/.docs/docs/agents/processors.md +622 -0
- package/.docs/docs/agents/structured-output.md +273 -0
- package/.docs/docs/agents/supervisor-agents.md +304 -0
- package/.docs/docs/agents/using-tools.md +214 -0
- package/.docs/docs/build-with-ai/mcp-docs-server.md +238 -0
- package/.docs/docs/build-with-ai/skills.md +35 -0
- package/.docs/docs/community/contributing-templates.md +3 -0
- package/.docs/docs/community/discord.md +9 -0
- package/.docs/docs/community/licensing.md +66 -0
- package/.docs/docs/deployment/cloud-providers.md +15 -0
- package/.docs/docs/deployment/mastra-server.md +122 -0
- package/.docs/docs/deployment/monorepo.md +142 -0
- package/.docs/docs/deployment/overview.md +62 -0
- package/.docs/docs/deployment/studio.md +239 -0
- package/.docs/docs/deployment/web-framework.md +52 -0
- package/.docs/docs/deployment/workflow-runners.md +9 -0
- package/.docs/docs/evals/built-in-scorers.md +47 -0
- package/.docs/docs/evals/custom-scorers.md +519 -0
- package/.docs/docs/evals/overview.md +141 -0
- package/.docs/docs/evals/running-in-ci.md +124 -0
- package/.docs/docs/getting-started/build-with-ai.md +68 -0
- package/.docs/docs/getting-started/manual-install.md +226 -0
- package/.docs/docs/getting-started/project-structure.md +60 -0
- package/.docs/docs/getting-started/start.md +28 -0
- package/.docs/docs/getting-started/studio.md +101 -0
- package/.docs/docs/index.md +43 -0
- package/.docs/docs/mastra-cloud/deployment.md +77 -0
- package/.docs/docs/mastra-cloud/observability.md +38 -0
- package/.docs/docs/mastra-cloud/overview.md +23 -0
- package/.docs/docs/mastra-cloud/setup.md +42 -0
- package/.docs/docs/mastra-cloud/studio.md +24 -0
- package/.docs/docs/mastra-code/configuration.md +299 -0
- package/.docs/docs/mastra-code/customization.md +228 -0
- package/.docs/docs/mastra-code/modes.md +104 -0
- package/.docs/docs/mastra-code/overview.md +135 -0
- package/.docs/docs/mastra-code/tools.md +229 -0
- package/.docs/docs/mcp/overview.md +373 -0
- package/.docs/docs/mcp/publishing-mcp-server.md +95 -0
- package/.docs/docs/memory/memory-processors.md +314 -0
- package/.docs/docs/memory/message-history.md +260 -0
- package/.docs/docs/memory/observational-memory.md +248 -0
- package/.docs/docs/memory/overview.md +45 -0
- package/.docs/docs/memory/semantic-recall.md +272 -0
- package/.docs/docs/memory/storage.md +261 -0
- package/.docs/docs/memory/working-memory.md +400 -0
- package/.docs/docs/observability/datasets/overview.md +198 -0
- package/.docs/docs/observability/datasets/running-experiments.md +274 -0
- package/.docs/docs/observability/logging.md +99 -0
- package/.docs/docs/observability/overview.md +70 -0
- package/.docs/docs/observability/tracing/bridges/otel.md +209 -0
- package/.docs/docs/observability/tracing/exporters/arize.md +272 -0
- package/.docs/docs/observability/tracing/exporters/braintrust.md +111 -0
- package/.docs/docs/observability/tracing/exporters/cloud.md +127 -0
- package/.docs/docs/observability/tracing/exporters/datadog.md +187 -0
- package/.docs/docs/observability/tracing/exporters/default.md +209 -0
- package/.docs/docs/observability/tracing/exporters/laminar.md +100 -0
- package/.docs/docs/observability/tracing/exporters/langfuse.md +213 -0
- package/.docs/docs/observability/tracing/exporters/langsmith.md +198 -0
- package/.docs/docs/observability/tracing/exporters/otel.md +476 -0
- package/.docs/docs/observability/tracing/exporters/posthog.md +148 -0
- package/.docs/docs/observability/tracing/exporters/sentry.md +208 -0
- package/.docs/docs/observability/tracing/overview.md +1112 -0
- package/.docs/docs/observability/tracing/processors/sensitive-data-filter.md +300 -0
- package/.docs/docs/rag/chunking-and-embedding.md +183 -0
- package/.docs/docs/rag/graph-rag.md +215 -0
- package/.docs/docs/rag/overview.md +72 -0
- package/.docs/docs/rag/retrieval.md +515 -0
- package/.docs/docs/rag/vector-databases.md +645 -0
- package/.docs/docs/server/auth/auth0.md +220 -0
- package/.docs/docs/server/auth/better-auth.md +203 -0
- package/.docs/docs/server/auth/clerk.md +132 -0
- package/.docs/docs/server/auth/composite-auth.md +234 -0
- package/.docs/docs/server/auth/custom-auth-provider.md +513 -0
- package/.docs/docs/server/auth/firebase.md +272 -0
- package/.docs/docs/server/auth/jwt.md +110 -0
- package/.docs/docs/server/auth/simple-auth.md +180 -0
- package/.docs/docs/server/auth/supabase.md +117 -0
- package/.docs/docs/server/auth/workos.md +186 -0
- package/.docs/docs/server/auth.md +38 -0
- package/.docs/docs/server/custom-adapters.md +378 -0
- package/.docs/docs/server/custom-api-routes.md +267 -0
- package/.docs/docs/server/mastra-client.md +243 -0
- package/.docs/docs/server/mastra-server.md +71 -0
- package/.docs/docs/server/middleware.md +225 -0
- package/.docs/docs/server/request-context.md +471 -0
- package/.docs/docs/server/server-adapters.md +547 -0
- package/.docs/docs/streaming/events.md +237 -0
- package/.docs/docs/streaming/overview.md +175 -0
- package/.docs/docs/streaming/tool-streaming.md +175 -0
- package/.docs/docs/streaming/workflow-streaming.md +109 -0
- package/.docs/docs/voice/overview.md +959 -0
- package/.docs/docs/voice/speech-to-speech.md +102 -0
- package/.docs/docs/voice/speech-to-text.md +79 -0
- package/.docs/docs/voice/text-to-speech.md +83 -0
- package/.docs/docs/workflows/agents-and-tools.md +166 -0
- package/.docs/docs/workflows/control-flow.md +822 -0
- package/.docs/docs/workflows/error-handling.md +360 -0
- package/.docs/docs/workflows/human-in-the-loop.md +215 -0
- package/.docs/docs/workflows/overview.md +370 -0
- package/.docs/docs/workflows/snapshots.md +238 -0
- package/.docs/docs/workflows/suspend-and-resume.md +205 -0
- package/.docs/docs/workflows/time-travel.md +309 -0
- package/.docs/docs/workflows/workflow-state.md +181 -0
- package/.docs/docs/workspace/filesystem.md +164 -0
- package/.docs/docs/workspace/overview.md +239 -0
- package/.docs/docs/workspace/sandbox.md +63 -0
- package/.docs/docs/workspace/search.md +243 -0
- package/.docs/docs/workspace/skills.md +169 -0
- package/.docs/guides/agent-frameworks/ai-sdk.md +140 -0
- package/.docs/guides/build-your-ui/ai-sdk-ui.md +1499 -0
- package/.docs/guides/build-your-ui/assistant-ui.md +156 -0
- package/.docs/guides/build-your-ui/copilotkit.md +289 -0
- package/.docs/guides/deployment/amazon-ec2.md +130 -0
- package/.docs/guides/deployment/aws-lambda.md +248 -0
- package/.docs/guides/deployment/azure-app-services.md +114 -0
- package/.docs/guides/deployment/cloudflare.md +99 -0
- package/.docs/guides/deployment/digital-ocean.md +168 -0
- package/.docs/guides/deployment/inngest.md +682 -0
- package/.docs/guides/deployment/netlify.md +77 -0
- package/.docs/guides/deployment/vercel.md +101 -0
- package/.docs/guides/getting-started/astro.md +398 -0
- package/.docs/guides/getting-started/electron.md +504 -0
- package/.docs/guides/getting-started/express.md +251 -0
- package/.docs/guides/getting-started/hono.md +190 -0
- package/.docs/guides/getting-started/next-js.md +347 -0
- package/.docs/guides/getting-started/nuxt.md +497 -0
- package/.docs/guides/getting-started/quickstart.md +67 -0
- package/.docs/guides/getting-started/sveltekit.md +296 -0
- package/.docs/guides/getting-started/vite-react.md +425 -0
- package/.docs/guides/guide/ai-recruiter.md +226 -0
- package/.docs/guides/guide/chef-michel.md +211 -0
- package/.docs/guides/guide/code-review-bot.md +226 -0
- package/.docs/guides/guide/dev-assistant.md +307 -0
- package/.docs/guides/guide/docs-manager.md +238 -0
- package/.docs/guides/guide/github-actions-pr-description.md +236 -0
- package/.docs/guides/guide/notes-mcp-server.md +416 -0
- package/.docs/guides/guide/research-assistant.md +348 -0
- package/.docs/guides/guide/research-coordinator.md +416 -0
- package/.docs/guides/guide/stock-agent.md +132 -0
- package/.docs/guides/guide/web-search.md +320 -0
- package/.docs/guides/guide/whatsapp-chat-bot.md +405 -0
- package/.docs/guides/index.md +3 -0
- package/.docs/guides/migrations/agentnetwork.md +97 -0
- package/.docs/guides/migrations/ai-sdk-v4-to-v5.md +112 -0
- package/.docs/guides/migrations/network-to-supervisor.md +261 -0
- package/.docs/guides/migrations/upgrade-to-v1/agent.md +404 -0
- package/.docs/guides/migrations/upgrade-to-v1/cli.md +57 -0
- package/.docs/guides/migrations/upgrade-to-v1/client.md +337 -0
- package/.docs/guides/migrations/upgrade-to-v1/deployment.md +37 -0
- package/.docs/guides/migrations/upgrade-to-v1/evals.md +239 -0
- package/.docs/guides/migrations/upgrade-to-v1/mastra.md +143 -0
- package/.docs/guides/migrations/upgrade-to-v1/mcp.md +97 -0
- package/.docs/guides/migrations/upgrade-to-v1/memory.md +285 -0
- package/.docs/guides/migrations/upgrade-to-v1/overview.md +119 -0
- package/.docs/guides/migrations/upgrade-to-v1/processors.md +68 -0
- package/.docs/guides/migrations/upgrade-to-v1/rag.md +42 -0
- package/.docs/guides/migrations/upgrade-to-v1/storage.md +553 -0
- package/.docs/guides/migrations/upgrade-to-v1/tools.md +180 -0
- package/.docs/guides/migrations/upgrade-to-v1/tracing.md +412 -0
- package/.docs/guides/migrations/upgrade-to-v1/vectors.md +87 -0
- package/.docs/guides/migrations/upgrade-to-v1/voice.md +30 -0
- package/.docs/guides/migrations/upgrade-to-v1/workflows.md +341 -0
- package/.docs/guides/migrations/vnext-to-standard-apis.md +362 -0
- package/.docs/models/embeddings.md +161 -0
- package/.docs/models/gateways/azure-openai.md +128 -0
- package/.docs/models/gateways/custom-gateways.md +545 -0
- package/.docs/models/gateways/netlify.md +88 -0
- package/.docs/models/gateways/openrouter.md +219 -0
- package/.docs/models/gateways/vercel.md +225 -0
- package/.docs/models/gateways.md +14 -0
- package/.docs/models/index.md +286 -0
- package/.docs/models/providers/302ai.md +134 -0
- package/.docs/models/providers/abacus.md +125 -0
- package/.docs/models/providers/agentrouter.md +90 -0
- package/.docs/models/providers/aihubmix.md +107 -0
- package/.docs/models/providers/alibaba-cn.md +135 -0
- package/.docs/models/providers/alibaba.md +111 -0
- package/.docs/models/providers/amazon-bedrock.md +33 -0
- package/.docs/models/providers/anthropic.md +153 -0
- package/.docs/models/providers/azure.md +33 -0
- package/.docs/models/providers/bailing.md +72 -0
- package/.docs/models/providers/baseten.md +77 -0
- package/.docs/models/providers/berget.md +78 -0
- package/.docs/models/providers/cerebras.md +101 -0
- package/.docs/models/providers/chutes.md +136 -0
- package/.docs/models/providers/cloudflare-ai-gateway.md +33 -0
- package/.docs/models/providers/cloudflare-workers-ai.md +109 -0
- package/.docs/models/providers/cohere.md +33 -0
- package/.docs/models/providers/cortecs.md +91 -0
- package/.docs/models/providers/deepinfra.md +112 -0
- package/.docs/models/providers/deepseek.md +88 -0
- package/.docs/models/providers/fastrouter.md +84 -0
- package/.docs/models/providers/fireworks-ai.md +89 -0
- package/.docs/models/providers/firmware.md +85 -0
- package/.docs/models/providers/friendli.md +78 -0
- package/.docs/models/providers/github-models.md +125 -0
- package/.docs/models/providers/google-vertex.md +33 -0
- package/.docs/models/providers/google.md +159 -0
- package/.docs/models/providers/groq.md +107 -0
- package/.docs/models/providers/helicone.md +161 -0
- package/.docs/models/providers/huggingface.md +90 -0
- package/.docs/models/providers/iflowcn.md +84 -0
- package/.docs/models/providers/inception.md +72 -0
- package/.docs/models/providers/inference.md +79 -0
- package/.docs/models/providers/io-intelligence.md +87 -0
- package/.docs/models/providers/io-net.md +87 -0
- package/.docs/models/providers/jiekou.md +131 -0
- package/.docs/models/providers/kilo.md +333 -0
- package/.docs/models/providers/kimi-for-coding.md +100 -0
- package/.docs/models/providers/kuae-cloud-coding-plan.md +71 -0
- package/.docs/models/providers/llama.md +77 -0
- package/.docs/models/providers/lmstudio.md +73 -0
- package/.docs/models/providers/lucidquery.md +72 -0
- package/.docs/models/providers/minimax-cn-coding-plan.md +102 -0
- package/.docs/models/providers/minimax-cn.md +102 -0
- package/.docs/models/providers/minimax-coding-plan.md +102 -0
- package/.docs/models/providers/minimax.md +104 -0
- package/.docs/models/providers/mistral.md +124 -0
- package/.docs/models/providers/moark.md +72 -0
- package/.docs/models/providers/modelscope.md +77 -0
- package/.docs/models/providers/moonshotai-cn.md +76 -0
- package/.docs/models/providers/moonshotai.md +76 -0
- package/.docs/models/providers/morph.md +73 -0
- package/.docs/models/providers/nano-gpt.md +103 -0
- package/.docs/models/providers/nebius.md +116 -0
- package/.docs/models/providers/nova.md +72 -0
- package/.docs/models/providers/novita-ai.md +154 -0
- package/.docs/models/providers/nvidia.md +141 -0
- package/.docs/models/providers/ollama-cloud.md +103 -0
- package/.docs/models/providers/ollama.md +33 -0
- package/.docs/models/providers/openai.md +193 -0
- package/.docs/models/providers/opencode.md +100 -0
- package/.docs/models/providers/ovhcloud.md +83 -0
- package/.docs/models/providers/perplexity.md +100 -0
- package/.docs/models/providers/poe.md +183 -0
- package/.docs/models/providers/privatemode-ai.md +75 -0
- package/.docs/models/providers/requesty.md +90 -0
- package/.docs/models/providers/scaleway.md +84 -0
- package/.docs/models/providers/siliconflow-cn.md +138 -0
- package/.docs/models/providers/siliconflow.md +140 -0
- package/.docs/models/providers/stackit.md +78 -0
- package/.docs/models/providers/stepfun.md +73 -0
- package/.docs/models/providers/submodel.md +79 -0
- package/.docs/models/providers/synthetic.md +96 -0
- package/.docs/models/providers/togetherai.md +115 -0
- package/.docs/models/providers/upstage.md +73 -0
- package/.docs/models/providers/venice.md +95 -0
- package/.docs/models/providers/vivgrid.md +106 -0
- package/.docs/models/providers/vultr.md +75 -0
- package/.docs/models/providers/wandb.md +80 -0
- package/.docs/models/providers/xai.md +141 -0
- package/.docs/models/providers/xiaomi.md +71 -0
- package/.docs/models/providers/zai-coding-plan.md +80 -0
- package/.docs/models/providers/zai.md +79 -0
- package/.docs/models/providers/zenmux.md +161 -0
- package/.docs/models/providers/zhipuai-coding-plan.md +79 -0
- package/.docs/models/providers/zhipuai.md +79 -0
- package/.docs/models/providers.md +81 -0
- package/.docs/reference/agents/agent.md +141 -0
- package/.docs/reference/agents/generate.md +186 -0
- package/.docs/reference/agents/generateLegacy.md +173 -0
- package/.docs/reference/agents/getDefaultGenerateOptions.md +36 -0
- package/.docs/reference/agents/getDefaultOptions.md +34 -0
- package/.docs/reference/agents/getDefaultStreamOptions.md +36 -0
- package/.docs/reference/agents/getDescription.md +21 -0
- package/.docs/reference/agents/getInstructions.md +34 -0
- package/.docs/reference/agents/getLLM.md +37 -0
- package/.docs/reference/agents/getMemory.md +34 -0
- package/.docs/reference/agents/getModel.md +34 -0
- package/.docs/reference/agents/getTools.md +29 -0
- package/.docs/reference/agents/getVoice.md +34 -0
- package/.docs/reference/agents/listAgents.md +35 -0
- package/.docs/reference/agents/listScorers.md +34 -0
- package/.docs/reference/agents/listTools.md +34 -0
- package/.docs/reference/agents/listWorkflows.md +34 -0
- package/.docs/reference/agents/network.md +133 -0
- package/.docs/reference/ai-sdk/chat-route.md +82 -0
- package/.docs/reference/ai-sdk/handle-chat-stream.md +53 -0
- package/.docs/reference/ai-sdk/handle-network-stream.md +37 -0
- package/.docs/reference/ai-sdk/handle-workflow-stream.md +55 -0
- package/.docs/reference/ai-sdk/network-route.md +74 -0
- package/.docs/reference/ai-sdk/to-ai-sdk-stream.md +231 -0
- package/.docs/reference/ai-sdk/to-ai-sdk-v4-messages.md +79 -0
- package/.docs/reference/ai-sdk/to-ai-sdk-v5-messages.md +76 -0
- package/.docs/reference/ai-sdk/with-mastra.md +59 -0
- package/.docs/reference/ai-sdk/workflow-route.md +79 -0
- package/.docs/reference/auth/auth0.md +73 -0
- package/.docs/reference/auth/better-auth.md +71 -0
- package/.docs/reference/auth/clerk.md +36 -0
- package/.docs/reference/auth/firebase.md +80 -0
- package/.docs/reference/auth/jwt.md +26 -0
- package/.docs/reference/auth/supabase.md +33 -0
- package/.docs/reference/auth/workos.md +84 -0
- package/.docs/reference/cli/create-mastra.md +137 -0
- package/.docs/reference/cli/mastra.md +336 -0
- package/.docs/reference/client-js/agents.md +437 -0
- package/.docs/reference/client-js/error-handling.md +16 -0
- package/.docs/reference/client-js/logs.md +24 -0
- package/.docs/reference/client-js/mastra-client.md +63 -0
- package/.docs/reference/client-js/memory.md +221 -0
- package/.docs/reference/client-js/observability.md +72 -0
- package/.docs/reference/client-js/telemetry.md +20 -0
- package/.docs/reference/client-js/tools.md +44 -0
- package/.docs/reference/client-js/vectors.md +79 -0
- package/.docs/reference/client-js/workflows.md +199 -0
- package/.docs/reference/configuration.md +752 -0
- package/.docs/reference/core/addGateway.md +42 -0
- package/.docs/reference/core/getAgent.md +21 -0
- package/.docs/reference/core/getAgentById.md +21 -0
- package/.docs/reference/core/getDeployer.md +22 -0
- package/.docs/reference/core/getGateway.md +38 -0
- package/.docs/reference/core/getGatewayById.md +41 -0
- package/.docs/reference/core/getLogger.md +22 -0
- package/.docs/reference/core/getMCPServer.md +47 -0
- package/.docs/reference/core/getMCPServerById.md +55 -0
- package/.docs/reference/core/getMemory.md +50 -0
- package/.docs/reference/core/getScorer.md +54 -0
- package/.docs/reference/core/getScorerById.md +54 -0
- package/.docs/reference/core/getServer.md +22 -0
- package/.docs/reference/core/getStorage.md +22 -0
- package/.docs/reference/core/getStoredAgentById.md +89 -0
- package/.docs/reference/core/getTelemetry.md +22 -0
- package/.docs/reference/core/getVector.md +22 -0
- package/.docs/reference/core/getWorkflow.md +42 -0
- package/.docs/reference/core/listAgents.md +21 -0
- package/.docs/reference/core/listGateways.md +40 -0
- package/.docs/reference/core/listLogs.md +38 -0
- package/.docs/reference/core/listLogsByRunId.md +36 -0
- package/.docs/reference/core/listMCPServers.md +55 -0
- package/.docs/reference/core/listMemory.md +56 -0
- package/.docs/reference/core/listScorers.md +29 -0
- package/.docs/reference/core/listStoredAgents.md +93 -0
- package/.docs/reference/core/listVectors.md +22 -0
- package/.docs/reference/core/listWorkflows.md +21 -0
- package/.docs/reference/core/mastra-class.md +66 -0
- package/.docs/reference/core/mastra-model-gateway.md +153 -0
- package/.docs/reference/core/setLogger.md +26 -0
- package/.docs/reference/core/setStorage.md +27 -0
- package/.docs/reference/datasets/addItem.md +37 -0
- package/.docs/reference/datasets/addItems.md +35 -0
- package/.docs/reference/datasets/compareExperiments.md +52 -0
- package/.docs/reference/datasets/create.md +51 -0
- package/.docs/reference/datasets/dataset.md +82 -0
- package/.docs/reference/datasets/datasets-manager.md +94 -0
- package/.docs/reference/datasets/delete.md +25 -0
- package/.docs/reference/datasets/deleteExperiment.md +27 -0
- package/.docs/reference/datasets/deleteItem.md +27 -0
- package/.docs/reference/datasets/deleteItems.md +29 -0
- package/.docs/reference/datasets/get.md +31 -0
- package/.docs/reference/datasets/getDetails.md +47 -0
- package/.docs/reference/datasets/getExperiment.md +30 -0
- package/.docs/reference/datasets/getItem.md +33 -0
- package/.docs/reference/datasets/getItemHistory.md +31 -0
- package/.docs/reference/datasets/list.md +31 -0
- package/.docs/reference/datasets/listExperimentResults.md +39 -0
- package/.docs/reference/datasets/listExperiments.md +33 -0
- package/.docs/reference/datasets/listItems.md +46 -0
- package/.docs/reference/datasets/listVersions.md +33 -0
- package/.docs/reference/datasets/startExperiment.md +62 -0
- package/.docs/reference/datasets/startExperimentAsync.md +43 -0
- package/.docs/reference/datasets/update.md +48 -0
- package/.docs/reference/datasets/updateItem.md +38 -0
- package/.docs/reference/deployer/cloudflare.md +79 -0
- package/.docs/reference/deployer/netlify.md +80 -0
- package/.docs/reference/deployer/vercel.md +91 -0
- package/.docs/reference/deployer.md +100 -0
- package/.docs/reference/evals/answer-relevancy.md +105 -0
- package/.docs/reference/evals/answer-similarity.md +99 -0
- package/.docs/reference/evals/bias.md +120 -0
- package/.docs/reference/evals/completeness.md +136 -0
- package/.docs/reference/evals/content-similarity.md +101 -0
- package/.docs/reference/evals/context-precision.md +196 -0
- package/.docs/reference/evals/context-relevance.md +531 -0
- package/.docs/reference/evals/create-scorer.md +270 -0
- package/.docs/reference/evals/faithfulness.md +114 -0
- package/.docs/reference/evals/hallucination.md +213 -0
- package/.docs/reference/evals/keyword-coverage.md +128 -0
- package/.docs/reference/evals/mastra-scorer.md +123 -0
- package/.docs/reference/evals/noise-sensitivity.md +675 -0
- package/.docs/reference/evals/prompt-alignment.md +614 -0
- package/.docs/reference/evals/run-evals.md +179 -0
- package/.docs/reference/evals/scorer-utils.md +326 -0
- package/.docs/reference/evals/textual-difference.md +113 -0
- package/.docs/reference/evals/tone-consistency.md +119 -0
- package/.docs/reference/evals/tool-call-accuracy.md +533 -0
- package/.docs/reference/evals/toxicity.md +123 -0
- package/.docs/reference/harness/harness-class.md +708 -0
- package/.docs/reference/index.md +277 -0
- package/.docs/reference/logging/pino-logger.md +117 -0
- package/.docs/reference/mastra-code/createMastraCode.md +108 -0
- package/.docs/reference/memory/clone-utilities.md +199 -0
- package/.docs/reference/memory/cloneThread.md +130 -0
- package/.docs/reference/memory/createThread.md +68 -0
- package/.docs/reference/memory/deleteMessages.md +38 -0
- package/.docs/reference/memory/getThreadById.md +24 -0
- package/.docs/reference/memory/listThreads.md +145 -0
- package/.docs/reference/memory/memory-class.md +147 -0
- package/.docs/reference/memory/observational-memory.md +565 -0
- package/.docs/reference/memory/recall.md +91 -0
- package/.docs/reference/observability/tracing/bridges/otel.md +131 -0
- package/.docs/reference/observability/tracing/configuration.md +178 -0
- package/.docs/reference/observability/tracing/exporters/arize.md +141 -0
- package/.docs/reference/observability/tracing/exporters/braintrust.md +93 -0
- package/.docs/reference/observability/tracing/exporters/cloud-exporter.md +163 -0
- package/.docs/reference/observability/tracing/exporters/console-exporter.md +138 -0
- package/.docs/reference/observability/tracing/exporters/datadog.md +116 -0
- package/.docs/reference/observability/tracing/exporters/default-exporter.md +174 -0
- package/.docs/reference/observability/tracing/exporters/laminar.md +78 -0
- package/.docs/reference/observability/tracing/exporters/langfuse.md +134 -0
- package/.docs/reference/observability/tracing/exporters/langsmith.md +108 -0
- package/.docs/reference/observability/tracing/exporters/otel.md +199 -0
- package/.docs/reference/observability/tracing/exporters/posthog.md +92 -0
- package/.docs/reference/observability/tracing/exporters/sentry.md +184 -0
- package/.docs/reference/observability/tracing/instances.md +107 -0
- package/.docs/reference/observability/tracing/interfaces.md +743 -0
- package/.docs/reference/observability/tracing/processors/sensitive-data-filter.md +144 -0
- package/.docs/reference/observability/tracing/spans.md +224 -0
- package/.docs/reference/processors/batch-parts-processor.md +61 -0
- package/.docs/reference/processors/language-detector.md +82 -0
- package/.docs/reference/processors/message-history-processor.md +85 -0
- package/.docs/reference/processors/moderation-processor.md +104 -0
- package/.docs/reference/processors/pii-detector.md +108 -0
- package/.docs/reference/processors/processor-interface.md +521 -0
- package/.docs/reference/processors/prompt-injection-detector.md +72 -0
- package/.docs/reference/processors/semantic-recall-processor.md +117 -0
- package/.docs/reference/processors/system-prompt-scrubber.md +80 -0
- package/.docs/reference/processors/token-limiter-processor.md +115 -0
- package/.docs/reference/processors/tool-call-filter.md +85 -0
- package/.docs/reference/processors/tool-search-processor.md +111 -0
- package/.docs/reference/processors/unicode-normalizer.md +62 -0
- package/.docs/reference/processors/working-memory-processor.md +152 -0
- package/.docs/reference/rag/chunk.md +221 -0
- package/.docs/reference/rag/database-config.md +261 -0
- package/.docs/reference/rag/document.md +114 -0
- package/.docs/reference/rag/embeddings.md +92 -0
- package/.docs/reference/rag/extract-params.md +168 -0
- package/.docs/reference/rag/graph-rag.md +111 -0
- package/.docs/reference/rag/metadata-filters.md +216 -0
- package/.docs/reference/rag/rerank.md +75 -0
- package/.docs/reference/rag/rerankWithScorer.md +80 -0
- package/.docs/reference/server/create-route.md +262 -0
- package/.docs/reference/server/express-adapter.md +176 -0
- package/.docs/reference/server/fastify-adapter.md +90 -0
- package/.docs/reference/server/hono-adapter.md +162 -0
- package/.docs/reference/server/koa-adapter.md +127 -0
- package/.docs/reference/server/mastra-server.md +298 -0
- package/.docs/reference/server/register-api-route.md +249 -0
- package/.docs/reference/server/routes.md +306 -0
- package/.docs/reference/storage/cloudflare-d1.md +218 -0
- package/.docs/reference/storage/cloudflare.md +88 -0
- package/.docs/reference/storage/composite.md +235 -0
- package/.docs/reference/storage/convex.md +161 -0
- package/.docs/reference/storage/dynamodb.md +282 -0
- package/.docs/reference/storage/lance.md +131 -0
- package/.docs/reference/storage/libsql.md +135 -0
- package/.docs/reference/storage/mongodb.md +262 -0
- package/.docs/reference/storage/mssql.md +157 -0
- package/.docs/reference/storage/overview.md +121 -0
- package/.docs/reference/storage/postgresql.md +526 -0
- package/.docs/reference/storage/upstash.md +160 -0
- package/.docs/reference/streaming/ChunkType.md +292 -0
- package/.docs/reference/streaming/agents/MastraModelOutput.md +182 -0
- package/.docs/reference/streaming/agents/stream.md +221 -0
- package/.docs/reference/streaming/agents/streamLegacy.md +142 -0
- package/.docs/reference/streaming/workflows/observeStream.md +42 -0
- package/.docs/reference/streaming/workflows/resumeStream.md +61 -0
- package/.docs/reference/streaming/workflows/stream.md +88 -0
- package/.docs/reference/streaming/workflows/timeTravelStream.md +142 -0
- package/.docs/reference/templates/overview.md +194 -0
- package/.docs/reference/tools/create-tool.md +237 -0
- package/.docs/reference/tools/document-chunker-tool.md +89 -0
- package/.docs/reference/tools/graph-rag-tool.md +182 -0
- package/.docs/reference/tools/mcp-client.md +954 -0
- package/.docs/reference/tools/mcp-server.md +1271 -0
- package/.docs/reference/tools/vector-query-tool.md +459 -0
- package/.docs/reference/vectors/astra.md +121 -0
- package/.docs/reference/vectors/chroma.md +264 -0
- package/.docs/reference/vectors/convex.md +300 -0
- package/.docs/reference/vectors/couchbase.md +226 -0
- package/.docs/reference/vectors/duckdb.md +318 -0
- package/.docs/reference/vectors/elasticsearch.md +189 -0
- package/.docs/reference/vectors/lance.md +220 -0
- package/.docs/reference/vectors/libsql.md +305 -0
- package/.docs/reference/vectors/mongodb.md +295 -0
- package/.docs/reference/vectors/opensearch.md +99 -0
- package/.docs/reference/vectors/pg.md +408 -0
- package/.docs/reference/vectors/pinecone.md +168 -0
- package/.docs/reference/vectors/qdrant.md +222 -0
- package/.docs/reference/vectors/s3vectors.md +277 -0
- package/.docs/reference/vectors/turbopuffer.md +157 -0
- package/.docs/reference/vectors/upstash.md +294 -0
- package/.docs/reference/vectors/vectorize.md +147 -0
- package/.docs/reference/voice/azure.md +148 -0
- package/.docs/reference/voice/cloudflare.md +83 -0
- package/.docs/reference/voice/composite-voice.md +121 -0
- package/.docs/reference/voice/deepgram.md +79 -0
- package/.docs/reference/voice/elevenlabs.md +98 -0
- package/.docs/reference/voice/google-gemini-live.md +378 -0
- package/.docs/reference/voice/google.md +228 -0
- package/.docs/reference/voice/mastra-voice.md +311 -0
- package/.docs/reference/voice/murf.md +122 -0
- package/.docs/reference/voice/openai-realtime.md +203 -0
- package/.docs/reference/voice/openai.md +88 -0
- package/.docs/reference/voice/playai.md +80 -0
- package/.docs/reference/voice/sarvam.md +126 -0
- package/.docs/reference/voice/speechify.md +75 -0
- package/.docs/reference/voice/voice.addInstructions.md +55 -0
- package/.docs/reference/voice/voice.addTools.md +67 -0
- package/.docs/reference/voice/voice.answer.md +54 -0
- package/.docs/reference/voice/voice.close.md +51 -0
- package/.docs/reference/voice/voice.connect.md +94 -0
- package/.docs/reference/voice/voice.events.md +37 -0
- package/.docs/reference/voice/voice.getSpeakers.md +129 -0
- package/.docs/reference/voice/voice.listen.md +164 -0
- package/.docs/reference/voice/voice.off.md +54 -0
- package/.docs/reference/voice/voice.on.md +111 -0
- package/.docs/reference/voice/voice.send.md +65 -0
- package/.docs/reference/voice/voice.speak.md +157 -0
- package/.docs/reference/voice/voice.updateConfig.md +60 -0
- package/.docs/reference/workflows/run-methods/cancel.md +86 -0
- package/.docs/reference/workflows/run-methods/restart.md +33 -0
- package/.docs/reference/workflows/run-methods/resume.md +59 -0
- package/.docs/reference/workflows/run-methods/start.md +58 -0
- package/.docs/reference/workflows/run-methods/startAsync.md +67 -0
- package/.docs/reference/workflows/run-methods/timeTravel.md +142 -0
- package/.docs/reference/workflows/run.md +59 -0
- package/.docs/reference/workflows/step.md +119 -0
- package/.docs/reference/workflows/workflow-methods/branch.md +25 -0
- package/.docs/reference/workflows/workflow-methods/commit.md +17 -0
- package/.docs/reference/workflows/workflow-methods/create-run.md +63 -0
- package/.docs/reference/workflows/workflow-methods/dountil.md +25 -0
- package/.docs/reference/workflows/workflow-methods/dowhile.md +25 -0
- package/.docs/reference/workflows/workflow-methods/foreach.md +118 -0
- package/.docs/reference/workflows/workflow-methods/map.md +93 -0
- package/.docs/reference/workflows/workflow-methods/parallel.md +21 -0
- package/.docs/reference/workflows/workflow-methods/sleep.md +35 -0
- package/.docs/reference/workflows/workflow-methods/sleepUntil.md +35 -0
- package/.docs/reference/workflows/workflow-methods/then.md +21 -0
- package/.docs/reference/workflows/workflow.md +157 -0
- package/.docs/reference/workspace/e2b-sandbox.md +289 -0
- package/.docs/reference/workspace/filesystem.md +255 -0
- package/.docs/reference/workspace/gcs-filesystem.md +174 -0
- package/.docs/reference/workspace/local-filesystem.md +343 -0
- package/.docs/reference/workspace/local-sandbox.md +301 -0
- package/.docs/reference/workspace/s3-filesystem.md +175 -0
- package/.docs/reference/workspace/sandbox.md +87 -0
- package/.docs/reference/workspace/workspace-class.md +244 -0
- package/CHANGELOG.md +16 -0
- package/package.json +6 -6
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
# Custom Model Gateways
|
|
2
|
+
|
|
3
|
+
Custom model gateways allow you to implement private or specialized LLM provider integrations by extending the `MastraModelGateway` base class.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Gateways handle provider-specific logic for accessing language models:
|
|
8
|
+
|
|
9
|
+
- Provider configuration and model discovery
|
|
10
|
+
- Authentication and API key management
|
|
11
|
+
- URL construction for API endpoints
|
|
12
|
+
- Language model instance creation
|
|
13
|
+
|
|
14
|
+
Create custom gateways to support:
|
|
15
|
+
|
|
16
|
+
- Private or enterprise LLM deployments
|
|
17
|
+
- Custom authentication schemes
|
|
18
|
+
- Specialized routing logic
|
|
19
|
+
- Gateway versioning with unique IDs
|
|
20
|
+
|
|
21
|
+
## Creating a Custom Gateway
|
|
22
|
+
|
|
23
|
+
Extend the `MastraModelGateway` class and implement the required methods:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { MastraModelGateway, type ProviderConfig } from '@mastra/core/llm';
|
|
27
|
+
import { createOpenAICompatible } from '@ai-sdk/openai-compatible-v5';
|
|
28
|
+
import type { LanguageModelV2 } from '@ai-sdk/provider-v5';
|
|
29
|
+
|
|
30
|
+
class MyPrivateGateway extends MastraModelGateway {
|
|
31
|
+
// Required: Unique identifier for the gateway
|
|
32
|
+
// This ID is used as the prefix for all providers from this gateway
|
|
33
|
+
readonly id = 'private';
|
|
34
|
+
|
|
35
|
+
// Required: Human-readable name
|
|
36
|
+
readonly name = 'My Private Gateway';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Fetch provider configurations from your gateway
|
|
40
|
+
* Returns a record of provider configurations
|
|
41
|
+
*/
|
|
42
|
+
async fetchProviders(): Promise<Record<string, ProviderConfig>> {
|
|
43
|
+
return {
|
|
44
|
+
'my-provider': {
|
|
45
|
+
name: 'My Provider',
|
|
46
|
+
models: ['model-1', 'model-2', 'model-3'],
|
|
47
|
+
apiKeyEnvVar: 'MY_API_KEY',
|
|
48
|
+
gateway: this.id,
|
|
49
|
+
url: 'https://api.myprovider.com/v1',
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Build the API URL for a model
|
|
56
|
+
* @param modelId - Full model ID (e.g., "private/my-provider/model-1")
|
|
57
|
+
* @param envVars - Environment variables (optional)
|
|
58
|
+
*/
|
|
59
|
+
buildUrl(modelId: string, envVars?: Record<string, string>): string {
|
|
60
|
+
return 'https://api.myprovider.com/v1';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get the API key for authentication
|
|
65
|
+
* @param modelId - Full model ID
|
|
66
|
+
*/
|
|
67
|
+
async getApiKey(modelId: string): Promise<string> {
|
|
68
|
+
const apiKey = process.env.MY_API_KEY;
|
|
69
|
+
if (!apiKey) {
|
|
70
|
+
throw new Error(`Missing MY_API_KEY environment variable`);
|
|
71
|
+
}
|
|
72
|
+
return apiKey;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Create a language model instance
|
|
77
|
+
* @param args - Model ID, provider ID, and API key
|
|
78
|
+
*/
|
|
79
|
+
async resolveLanguageModel({
|
|
80
|
+
modelId,
|
|
81
|
+
providerId,
|
|
82
|
+
apiKey,
|
|
83
|
+
}: {
|
|
84
|
+
modelId: string;
|
|
85
|
+
providerId: string;
|
|
86
|
+
apiKey: string;
|
|
87
|
+
}): Promise<LanguageModelV2> {
|
|
88
|
+
const baseURL = this.buildUrl(`${providerId}/${modelId}`);
|
|
89
|
+
|
|
90
|
+
return createOpenAICompatible({
|
|
91
|
+
name: providerId,
|
|
92
|
+
apiKey,
|
|
93
|
+
baseURL,
|
|
94
|
+
supportsStructuredOutputs: true,
|
|
95
|
+
}).chatModel(modelId);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Registering Custom Gateways
|
|
101
|
+
|
|
102
|
+
### During Initialization
|
|
103
|
+
|
|
104
|
+
Pass gateways as a record when creating your Mastra instance:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { Mastra } from '@mastra/core';
|
|
108
|
+
|
|
109
|
+
const mastra = new Mastra({
|
|
110
|
+
gateways: {
|
|
111
|
+
myGateway: new MyPrivateGateway(),
|
|
112
|
+
anotherGateway: new AnotherGateway(),
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### After Initialization
|
|
118
|
+
|
|
119
|
+
Add gateways dynamically using `addGateway`:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
const mastra = new Mastra();
|
|
123
|
+
|
|
124
|
+
// Add with explicit key
|
|
125
|
+
mastra.addGateway(new MyPrivateGateway(), 'myGateway');
|
|
126
|
+
|
|
127
|
+
// Add using gateway's ID
|
|
128
|
+
mastra.addGateway(new MyPrivateGateway());
|
|
129
|
+
// Stored with key 'my-private-gateway' (the gateway's id)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Using Custom Gateways
|
|
133
|
+
|
|
134
|
+
Reference models from your custom gateway using the gateway ID as prefix:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { Agent } from '@mastra/core/agent';
|
|
138
|
+
|
|
139
|
+
const agent = new Agent({
|
|
140
|
+
id: 'my-agent',
|
|
141
|
+
name: 'My Agent',
|
|
142
|
+
instructions: 'You are a helpful assistant',
|
|
143
|
+
model: 'private/my-provider/model-1', // Uses MyPrivateGateway
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
mastra.addAgent(agent, 'myAgent');
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
When you create an agent or use a model, Mastra's model router automatically selects the appropriate gateway based on the model ID. The gateway ID serves as the prefix. If no custom gateways match, it falls back to the built-in gateways.
|
|
150
|
+
|
|
151
|
+
### TypeScript Autocomplete
|
|
152
|
+
|
|
153
|
+
**Automatic Type Generation in Development**
|
|
154
|
+
|
|
155
|
+
When running in development mode (`MASTRA_DEV=true`), Mastra automatically generates TypeScript types for your custom gateways!
|
|
156
|
+
|
|
157
|
+
1. **Set the environment variable**:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
export MASTRA_DEV=true
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
2. **Register your gateways**:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
const mastra = new Mastra({
|
|
167
|
+
gateways: {
|
|
168
|
+
myGateway: new MyPrivateGateway(),
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
3. **Types are generated automatically**:
|
|
174
|
+
|
|
175
|
+
- When you add a gateway, Mastra syncs with the GatewayRegistry
|
|
176
|
+
- The registry fetches providers from your custom gateway
|
|
177
|
+
- TypeScript types are regenerated in `~/.cache/mastra/`
|
|
178
|
+
- Your IDE picks up the new types within seconds
|
|
179
|
+
|
|
180
|
+
4. **Autocomplete now works**:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
const agent = new Agent({
|
|
184
|
+
model: 'my-gateway-id/my-provider/model-1', // Full autocomplete!
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**How It Works**
|
|
189
|
+
|
|
190
|
+
The GatewayRegistry runs an hourly sync that:
|
|
191
|
+
|
|
192
|
+
- Calls `fetchProviders()` on all registered gateways
|
|
193
|
+
- Generates TypeScript type definitions
|
|
194
|
+
- Writes them to both global cache and your project's `dist/` directory
|
|
195
|
+
- Your TypeScript server automatically picks up the changes
|
|
196
|
+
|
|
197
|
+
> **Tip:** The first time you add a gateway, it may take a few seconds for types to generate. Subsequent updates happen in the background every hour.
|
|
198
|
+
|
|
199
|
+
#### Manual Type Generation Alternatives
|
|
200
|
+
|
|
201
|
+
If you're not running in development mode or need immediate type updates:
|
|
202
|
+
|
|
203
|
+
**Option 1: Use type assertion (simplest)**
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
const agent = new Agent({
|
|
207
|
+
id: 'my-agent',
|
|
208
|
+
name: 'my-agent',
|
|
209
|
+
instructions: 'You are a helpful assistant',
|
|
210
|
+
model: 'private/my-provider/model-1' as any, // Bypass type checking
|
|
211
|
+
});
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Option 2: Create a custom type union (type-safe)**
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import type { ModelRouterModelId } from '@mastra/core/llm';
|
|
218
|
+
|
|
219
|
+
// Define your custom model IDs
|
|
220
|
+
type CustomModelId =
|
|
221
|
+
| 'private/my-provider/model-1'
|
|
222
|
+
| 'private/my-provider/model-2'
|
|
223
|
+
| 'private/my-provider/model-3';
|
|
224
|
+
|
|
225
|
+
// Combine with built-in models
|
|
226
|
+
type AllModelIds = ModelRouterModelId | CustomModelId;
|
|
227
|
+
|
|
228
|
+
const agent = new Agent({
|
|
229
|
+
id: 'my-agent',
|
|
230
|
+
name: 'my-agent',
|
|
231
|
+
instructions: 'You are a helpful assistant',
|
|
232
|
+
model: 'private/my-provider/model-1' satisfies AllModelIds,
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Option 3: Extend ModelRouterModelId globally (advanced)**
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
// In a types.d.ts file in your project
|
|
240
|
+
declare module '@mastra/core/llm' {
|
|
241
|
+
interface ProviderModelsMap {
|
|
242
|
+
'my-provider': readonly ['model-1', 'model-2', 'model-3'];
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
This extends the built-in type to include your custom models, giving you full autocomplete support.
|
|
248
|
+
|
|
249
|
+
## Gateway Management
|
|
250
|
+
|
|
251
|
+
### getGateway(key)
|
|
252
|
+
|
|
253
|
+
Retrieve a gateway by its registration key:
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
const gateway = mastra.getGateway('myGateway');
|
|
257
|
+
console.log(gateway.name); // 'My Private Gateway'
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### getGatewayById(id)
|
|
261
|
+
|
|
262
|
+
Retrieve a gateway by its unique ID:
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
const gateway = mastra.getGatewayById('my-private-gateway');
|
|
266
|
+
console.log(gateway.name); // 'My Private Gateway'
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
This is useful when:
|
|
270
|
+
|
|
271
|
+
- Gateways have explicit IDs different from their registration keys
|
|
272
|
+
- You need to find a gateway by its ID across different instances
|
|
273
|
+
- Supporting gateway versioning (e.g., `'gateway-v1'`, `'gateway-v2'`)
|
|
274
|
+
|
|
275
|
+
### listGateways()
|
|
276
|
+
|
|
277
|
+
Get all registered gateways:
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
const gateways = mastra.listGateways();
|
|
281
|
+
console.log(Object.keys(gateways)); // ['myGateway', 'anotherGateway']
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Gateway Properties
|
|
285
|
+
|
|
286
|
+
### Required
|
|
287
|
+
|
|
288
|
+
| Property | Type | Description |
|
|
289
|
+
| -------- | -------- | ---------------------------------------------------------------------------------- |
|
|
290
|
+
| `id` | `string` | Unique identifier for the gateway, used as the gateway prefix for the model string |
|
|
291
|
+
| `name` | `string` | Human-readable gateway name |
|
|
292
|
+
|
|
293
|
+
### Methods
|
|
294
|
+
|
|
295
|
+
| Method | Description |
|
|
296
|
+
| ----------------------------- | --------------------------------------- |
|
|
297
|
+
| `fetchProviders()` | Fetch provider configurations |
|
|
298
|
+
| `buildUrl(modelId, envVars?)` | Build API URL for a model |
|
|
299
|
+
| `getApiKey(modelId)` | Get API key for authentication |
|
|
300
|
+
| `resolveLanguageModel(args)` | Create language model instance |
|
|
301
|
+
| `getId()` | Get gateway ID (returns `id` or `name`) |
|
|
302
|
+
|
|
303
|
+
## Provider Configuration
|
|
304
|
+
|
|
305
|
+
The `fetchProviders()` method returns a record of `ProviderConfig` objects:
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
interface ProviderConfig {
|
|
309
|
+
name: string; // Display name
|
|
310
|
+
models: string[]; // Available model IDs
|
|
311
|
+
apiKeyEnvVar: string | string[]; // Environment variable(s) for API key
|
|
312
|
+
gateway: string; // Gateway identifier
|
|
313
|
+
url?: string; // Optional API base URL
|
|
314
|
+
apiKeyHeader?: string; // Optional custom auth header
|
|
315
|
+
docUrl?: string; // Optional documentation URL
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Gateway IDs vs Keys
|
|
320
|
+
|
|
321
|
+
Understanding the distinction:
|
|
322
|
+
|
|
323
|
+
- **Key**: The registration key used when adding the gateway to Mastra (record key)
|
|
324
|
+
- **ID**: The gateway's unique identifier (via `id` property or `name` if not set)
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
class VersionedGateway extends MastraModelGateway {
|
|
328
|
+
readonly id = 'my-gateway-v2'; // Unique ID for versioning and prefixing
|
|
329
|
+
readonly name = 'My Gateway'; // Display name
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const mastra = new Mastra({
|
|
333
|
+
gateways: {
|
|
334
|
+
currentGateway: new VersionedGateway(), // Key: 'currentGateway'
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
// Retrieve by key
|
|
339
|
+
const byKey = mastra.getGateway('currentGateway');
|
|
340
|
+
|
|
341
|
+
// Retrieve by ID
|
|
342
|
+
const byId = mastra.getGatewayById('my-gateway-v2');
|
|
343
|
+
|
|
344
|
+
// Both return the same gateway
|
|
345
|
+
console.log(byKey === byId); // true
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Model ID Format
|
|
349
|
+
|
|
350
|
+
Models accessed through custom gateways follow this format:
|
|
351
|
+
|
|
352
|
+
```text
|
|
353
|
+
[gatewayId]/[provider]/[model]
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
Examples:
|
|
357
|
+
|
|
358
|
+
- `private/my-provider/model-1`
|
|
359
|
+
|
|
360
|
+
## Advanced Example
|
|
361
|
+
|
|
362
|
+
Token-based gateway with caching:
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
class TokenGateway extends MastraModelGateway {
|
|
366
|
+
readonly id = 'token-gateway-v1';
|
|
367
|
+
readonly name = 'Token Gateway';
|
|
368
|
+
|
|
369
|
+
private tokenCache: Map<string, { token: string; expiresAt: number }> = new Map();
|
|
370
|
+
|
|
371
|
+
async fetchProviders(): Promise<Record<string, ProviderConfig>> {
|
|
372
|
+
const response = await fetch('https://api.gateway.com/providers');
|
|
373
|
+
const data = await response.json();
|
|
374
|
+
|
|
375
|
+
return {
|
|
376
|
+
provider: {
|
|
377
|
+
name: data.name,
|
|
378
|
+
models: data.models,
|
|
379
|
+
apiKeyEnvVar: 'GATEWAY_TOKEN',
|
|
380
|
+
gateway: this.id,
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
async buildUrl(modelId: string, envVars?: Record<string, string>): Promise<string> {
|
|
386
|
+
const token = await this.getApiKey(modelId);
|
|
387
|
+
const siteId = envVars?.SITE_ID || process.env.SITE_ID;
|
|
388
|
+
|
|
389
|
+
const response = await fetch(`https://api.gateway.com/sites/${siteId}/token`, {
|
|
390
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
const { url } = await response.json();
|
|
394
|
+
return url;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
async getApiKey(modelId: string): Promise<string> {
|
|
398
|
+
const cached = this.tokenCache.get(modelId);
|
|
399
|
+
|
|
400
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
401
|
+
return cached.token;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
const token = process.env.GATEWAY_TOKEN;
|
|
405
|
+
if (!token) {
|
|
406
|
+
throw new Error('Missing GATEWAY_TOKEN');
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// Cache token for 1 hour
|
|
410
|
+
this.tokenCache.set(modelId, {
|
|
411
|
+
token,
|
|
412
|
+
expiresAt: Date.now() + 3600000,
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
return token;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
async resolveLanguageModel({ modelId, providerId, apiKey }: {
|
|
419
|
+
modelId: string;
|
|
420
|
+
providerId: string;
|
|
421
|
+
apiKey: string;
|
|
422
|
+
}): Promise<LanguageModelV2> {
|
|
423
|
+
const baseURL = await this.buildUrl(`${providerId}/${modelId}`);
|
|
424
|
+
|
|
425
|
+
return createOpenAICompatible({
|
|
426
|
+
name: providerId,
|
|
427
|
+
apiKey,
|
|
428
|
+
baseURL,
|
|
429
|
+
supportsStructuredOutputs: true,
|
|
430
|
+
}).chatModel(modelId);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
## Error Handling
|
|
436
|
+
|
|
437
|
+
Provide descriptive errors for common failure scenarios:
|
|
438
|
+
|
|
439
|
+
```typescript
|
|
440
|
+
class RobustGateway extends MastraModelGateway {
|
|
441
|
+
// ... properties
|
|
442
|
+
|
|
443
|
+
async getApiKey(modelId: string): Promise<string> {
|
|
444
|
+
const apiKey = process.env.MY_API_KEY;
|
|
445
|
+
|
|
446
|
+
if (!apiKey) {
|
|
447
|
+
throw new Error(
|
|
448
|
+
`Missing MY_API_KEY environment variable for model: ${modelId}. ` +
|
|
449
|
+
`Please set MY_API_KEY in your environment.`
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return apiKey;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
async buildUrl(modelId: string, envVars?: Record<string, string>): Promise<string> {
|
|
457
|
+
const baseUrl = envVars?.BASE_URL || process.env.BASE_URL;
|
|
458
|
+
|
|
459
|
+
if (!baseUrl) {
|
|
460
|
+
throw new Error(
|
|
461
|
+
`No base URL configured for model: ${modelId}. ` +
|
|
462
|
+
`Set BASE_URL environment variable or pass it in envVars.`
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
return baseUrl;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
## Testing Custom Gateways
|
|
472
|
+
|
|
473
|
+
Example test structure:
|
|
474
|
+
|
|
475
|
+
```typescript
|
|
476
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
477
|
+
import { Mastra } from '@mastra/core';
|
|
478
|
+
|
|
479
|
+
describe('MyPrivateGateway', () => {
|
|
480
|
+
beforeEach(() => {
|
|
481
|
+
process.env.MY_API_KEY = 'test-key';
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
it('should fetch providers', async () => {
|
|
485
|
+
const gateway = new MyPrivateGateway();
|
|
486
|
+
const providers = await gateway.fetchProviders();
|
|
487
|
+
|
|
488
|
+
expect(providers['my-provider']).toBeDefined();
|
|
489
|
+
expect(providers['my-provider'].models).toContain('model-1');
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
it('should integrate with Mastra', () => {
|
|
493
|
+
const mastra = new Mastra({
|
|
494
|
+
gateways: {
|
|
495
|
+
private: new MyPrivateGateway(),
|
|
496
|
+
},
|
|
497
|
+
});
|
|
498
|
+
|
|
499
|
+
const gateway = mastra.getGateway('private');
|
|
500
|
+
expect(gateway.name).toBe('My Private Gateway');
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
it('should resolve models by ID', () => {
|
|
504
|
+
const mastra = new Mastra({
|
|
505
|
+
gateways: {
|
|
506
|
+
key: new MyPrivateGateway(),
|
|
507
|
+
},
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
const gateway = mastra.getGatewayById('my-private-gateway');
|
|
511
|
+
expect(gateway).toBeDefined();
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
## Best Practices
|
|
517
|
+
|
|
518
|
+
1. **Use descriptive IDs for versioning**: Set explicit `id` values when you need to version your gateways
|
|
519
|
+
|
|
520
|
+
```typescript
|
|
521
|
+
readonly id = 'my-gateway-v1';
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
2. **Implement proper error handling**: Throw descriptive errors with actionable messages
|
|
525
|
+
|
|
526
|
+
3. **Cache expensive operations**: Cache tokens, URLs, or provider configurations when appropriate
|
|
527
|
+
|
|
528
|
+
4. **Validate environment variables**: Check for required environment variables in `getApiKey` and `buildUrl`
|
|
529
|
+
|
|
530
|
+
5. **Document your gateway**: Add JSDoc comments explaining the gateway's purpose and configuration
|
|
531
|
+
|
|
532
|
+
6. **Follow naming conventions**: Use clear, consistent naming for providers and models
|
|
533
|
+
|
|
534
|
+
7. **Handle async operations**: Use `async/await` for network requests and I/O operations
|
|
535
|
+
|
|
536
|
+
8. **Test thoroughly**: Write unit tests for all gateway methods
|
|
537
|
+
|
|
538
|
+
## Built-in Gateways
|
|
539
|
+
|
|
540
|
+
Mastra includes built-in gateways as reference implementations:
|
|
541
|
+
|
|
542
|
+
- **NetlifyGateway**: Netlify AI Gateway integration with token exchange
|
|
543
|
+
- **ModelsDevGateway**: Registry of OpenAI-compatible providers from models.dev
|
|
544
|
+
|
|
545
|
+
See [Netlify](https://mastra.ai/models/gateways/netlify), [OpenRouter](https://mastra.ai/models/gateways/openrouter), and [Vercel](https://mastra.ai/models/gateways/vercel) for examples of gateway usage.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Netlify
|
|
2
|
+
|
|
3
|
+
Netlify AI Gateway provides unified access to multiple providers with built-in caching and observability. Access 52 models through Mastra's model router.
|
|
4
|
+
|
|
5
|
+
Learn more in the [Netlify documentation](https://docs.netlify.com/build/ai-gateway/overview/).
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { Agent } from "@mastra/core/agent";
|
|
11
|
+
|
|
12
|
+
const agent = new Agent({
|
|
13
|
+
id: "my-agent",
|
|
14
|
+
name: "My Agent",
|
|
15
|
+
instructions: "You are a helpful assistant",
|
|
16
|
+
model: "netlify/anthropic/claude-3-5-haiku-20241022"
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
> **Info:** Mastra uses the OpenAI-compatible `/chat/completions` endpoint. Some provider-specific features may not be available. Check the [Netlify documentation](https://docs.netlify.com/build/ai-gateway/overview/) for details.
|
|
21
|
+
|
|
22
|
+
## Configuration
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Use gateway API key
|
|
26
|
+
NETLIFY_API_KEY=your-gateway-key
|
|
27
|
+
|
|
28
|
+
# Or use provider API keys directly
|
|
29
|
+
OPENAI_API_KEY=sk-...
|
|
30
|
+
ANTHROPIC_API_KEY=ant-...
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Available Models
|
|
34
|
+
|
|
35
|
+
| Model |
|
|
36
|
+
| ---------------------------------------------- |
|
|
37
|
+
| `anthropic/claude-3-5-haiku-20241022` |
|
|
38
|
+
| `anthropic/claude-3-7-sonnet-20250219` |
|
|
39
|
+
| `anthropic/claude-3-haiku-20240307` |
|
|
40
|
+
| `anthropic/claude-haiku-4-5` |
|
|
41
|
+
| `anthropic/claude-haiku-4-5-20251001` |
|
|
42
|
+
| `anthropic/claude-opus-4-1-20250805` |
|
|
43
|
+
| `anthropic/claude-opus-4-20250514` |
|
|
44
|
+
| `anthropic/claude-opus-4-5` |
|
|
45
|
+
| `anthropic/claude-opus-4-5-20251101` |
|
|
46
|
+
| `anthropic/claude-opus-4-6` |
|
|
47
|
+
| `anthropic/claude-sonnet-4-0` |
|
|
48
|
+
| `anthropic/claude-sonnet-4-20250514` |
|
|
49
|
+
| `anthropic/claude-sonnet-4-5` |
|
|
50
|
+
| `anthropic/claude-sonnet-4-5-20250929` |
|
|
51
|
+
| `gemini/gemini-2.0-flash` |
|
|
52
|
+
| `gemini/gemini-2.0-flash-lite` |
|
|
53
|
+
| `gemini/gemini-2.5-flash` |
|
|
54
|
+
| `gemini/gemini-2.5-flash-image` |
|
|
55
|
+
| `gemini/gemini-2.5-flash-lite` |
|
|
56
|
+
| `gemini/gemini-2.5-flash-lite-preview-09-2025` |
|
|
57
|
+
| `gemini/gemini-2.5-pro` |
|
|
58
|
+
| `gemini/gemini-3-flash-preview` |
|
|
59
|
+
| `gemini/gemini-3-pro-image-preview` |
|
|
60
|
+
| `gemini/gemini-3-pro-preview` |
|
|
61
|
+
| `gemini/gemini-flash-latest` |
|
|
62
|
+
| `gemini/gemini-flash-lite-latest` |
|
|
63
|
+
| `openai/codex-mini-latest` |
|
|
64
|
+
| `openai/gpt-4.1` |
|
|
65
|
+
| `openai/gpt-4.1-mini` |
|
|
66
|
+
| `openai/gpt-4.1-nano` |
|
|
67
|
+
| `openai/gpt-4o` |
|
|
68
|
+
| `openai/gpt-4o-mini` |
|
|
69
|
+
| `openai/gpt-5` |
|
|
70
|
+
| `openai/gpt-5-2025-08-07` |
|
|
71
|
+
| `openai/gpt-5-codex` |
|
|
72
|
+
| `openai/gpt-5-mini` |
|
|
73
|
+
| `openai/gpt-5-mini-2025-08-07` |
|
|
74
|
+
| `openai/gpt-5-nano` |
|
|
75
|
+
| `openai/gpt-5-pro` |
|
|
76
|
+
| `openai/gpt-5.1` |
|
|
77
|
+
| `openai/gpt-5.1-2025-11-13` |
|
|
78
|
+
| `openai/gpt-5.1-codex` |
|
|
79
|
+
| `openai/gpt-5.1-codex-max` |
|
|
80
|
+
| `openai/gpt-5.1-codex-mini` |
|
|
81
|
+
| `openai/gpt-5.2` |
|
|
82
|
+
| `openai/gpt-5.2-2025-12-11` |
|
|
83
|
+
| `openai/gpt-5.2-codex` |
|
|
84
|
+
| `openai/gpt-5.2-pro` |
|
|
85
|
+
| `openai/gpt-5.2-pro-2025-12-11` |
|
|
86
|
+
| `openai/o3` |
|
|
87
|
+
| `openai/o3-mini` |
|
|
88
|
+
| `openai/o4-mini` |
|