@mastra/mcp-docs-server 0.13.39 → 1.0.0-beta.1
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%2Fai-sdk-v4.md +1 -0
- package/.docs/organized/changelogs/%40internal%2Fchangeset-cli.md +0 -10
- package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +0 -10
- package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +36 -36
- package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +0 -10
- package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +70 -70
- package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +40 -40
- package/.docs/organized/changelogs/%40mastra%2Fastra.md +19 -19
- package/.docs/organized/changelogs/%40mastra%2Fauth.md +4 -14
- package/.docs/organized/changelogs/%40mastra%2Fchroma.md +18 -18
- package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +199 -199
- package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +220 -220
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +190 -190
- package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +199 -199
- package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +7 -0
- package/.docs/organized/changelogs/%40mastra%2Fcore.md +210 -210
- package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +16 -16
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +69 -69
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +67 -67
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +70 -70
- package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +67 -67
- package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +209 -209
- package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +191 -191
- package/.docs/organized/changelogs/%40mastra%2Fevals.md +34 -34
- package/.docs/organized/changelogs/%40mastra%2Ffastembed.md +5 -13
- package/.docs/organized/changelogs/%40mastra%2Flance.md +182 -182
- package/.docs/organized/changelogs/%40mastra%2Flibsql.md +199 -199
- package/.docs/organized/changelogs/%40mastra%2Floggers.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +56 -56
- package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fmcp.md +65 -65
- package/.docs/organized/changelogs/%40mastra%2Fmemory.md +228 -228
- package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +199 -199
- package/.docs/organized/changelogs/%40mastra%2Fmssql.md +206 -206
- package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +19 -19
- package/.docs/organized/changelogs/%40mastra%2Fpg.md +197 -197
- package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +16 -16
- package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +216 -216
- package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +16 -16
- package/.docs/organized/changelogs/%40mastra%2Frag.md +61 -61
- package/.docs/organized/changelogs/%40mastra%2Freact.md +66 -66
- package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +9 -17
- package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +6 -30
- package/.docs/organized/changelogs/%40mastra%2Fserver.md +203 -203
- package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +16 -16
- package/.docs/organized/changelogs/%40mastra%2Fupstash.md +190 -190
- package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +18 -18
- package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +21 -21
- package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +56 -56
- package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +56 -56
- package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +20 -20
- package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +20 -20
- package/.docs/organized/changelogs/create-mastra.md +29 -29
- package/.docs/organized/changelogs/mastra.md +93 -93
- package/.docs/organized/code-examples/a2a.md +4 -2
- package/.docs/organized/code-examples/agui.md +12 -9
- package/.docs/organized/code-examples/ai-sdk-useChat.md +12 -18
- package/.docs/organized/code-examples/ai-sdk-v5.md +4 -2
- package/.docs/organized/code-examples/bird-checker-with-express.md +5 -4
- package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +4 -3
- package/.docs/organized/code-examples/bird-checker-with-nextjs.md +4 -3
- package/.docs/organized/code-examples/client-side-tools.md +1 -0
- package/.docs/organized/code-examples/crypto-chatbot.md +1 -1
- package/.docs/organized/code-examples/experimental-auth-weather-agent.md +8 -177
- package/.docs/organized/code-examples/fireworks-r1.md +2 -2
- package/.docs/organized/code-examples/heads-up-game.md +10 -7
- package/.docs/organized/code-examples/mcp-configuration.md +5 -3
- package/.docs/organized/code-examples/mcp-registry-registry.md +3 -2
- package/.docs/organized/code-examples/memory-per-resource-example.md +4 -2
- package/.docs/organized/code-examples/memory-todo-agent.md +1 -0
- package/.docs/organized/code-examples/memory-with-context.md +2 -1
- package/.docs/organized/code-examples/memory-with-libsql.md +4 -2
- package/.docs/organized/code-examples/memory-with-mongodb.md +4 -2
- package/.docs/organized/code-examples/memory-with-pg.md +4 -2
- package/.docs/organized/code-examples/memory-with-processors.md +13 -8
- package/.docs/organized/code-examples/memory-with-upstash.md +5 -3
- package/.docs/organized/code-examples/openapi-spec-writer.md +32 -41
- package/.docs/organized/code-examples/quick-start.md +5 -32
- package/.docs/organized/code-examples/stock-price-tool.md +6 -5
- package/.docs/organized/code-examples/weather-agent.md +21 -16
- package/.docs/organized/code-examples/workflow-ai-recruiter.md +3 -2
- package/.docs/organized/code-examples/workflow-with-inline-steps.md +9 -12
- package/.docs/organized/code-examples/workflow-with-memory.md +16 -15
- package/.docs/organized/code-examples/workflow-with-separate-steps.md +2 -2
- package/.docs/organized/code-examples/workflow-with-suspend-resume.md +3 -2
- package/.docs/raw/agents/adding-voice.mdx +27 -22
- package/.docs/raw/agents/agent-memory.mdx +24 -16
- package/.docs/raw/agents/guardrails.mdx +33 -12
- package/.docs/raw/agents/networks.mdx +8 -4
- package/.docs/raw/agents/overview.mdx +23 -17
- package/.docs/raw/agents/using-tools.mdx +11 -8
- package/.docs/raw/auth/auth0.mdx +9 -9
- package/.docs/raw/auth/clerk.mdx +7 -7
- package/.docs/raw/auth/firebase.mdx +9 -9
- package/.docs/raw/auth/index.mdx +6 -6
- package/.docs/raw/auth/jwt.mdx +7 -7
- package/.docs/raw/auth/supabase.mdx +8 -8
- package/.docs/raw/auth/workos.mdx +9 -9
- package/.docs/raw/community/contributing-templates.mdx +3 -3
- package/.docs/raw/community/discord.mdx +1 -1
- package/.docs/raw/course/01-first-agent/03-verifying-installation.md +1 -1
- package/.docs/raw/course/01-first-agent/08-exporting-your-agent.md +2 -1
- package/.docs/raw/course/01-first-agent/16-adding-memory-to-agent.md +2 -1
- package/.docs/raw/course/02-agent-tools-mcp/02-installing-mcp.md +1 -1
- package/.docs/raw/course/02-agent-tools-mcp/31-enhancing-memory-configuration.md +2 -0
- package/.docs/raw/course/03-agent-memory/03-installing-memory.md +1 -1
- package/.docs/raw/course/03-agent-memory/04-creating-basic-memory-agent.md +1 -0
- package/.docs/raw/course/03-agent-memory/10-storage-configuration.md +2 -3
- package/.docs/raw/course/03-agent-memory/13-vector-store-configuration.md +2 -0
- package/.docs/raw/course/03-agent-memory/16-configuring-semantic-recall.md +2 -0
- package/.docs/raw/course/03-agent-memory/18-advanced-configuration-semantic-recall.md +1 -0
- package/.docs/raw/course/03-agent-memory/21-configuring-working-memory.md +2 -0
- package/.docs/raw/course/03-agent-memory/22-custom-working-memory-templates.md +1 -0
- package/.docs/raw/course/03-agent-memory/25-combining-memory-features.md +1 -0
- package/.docs/raw/course/03-agent-memory/27-creating-learning-assistant.md +1 -0
- package/.docs/raw/course/04-workflows/08-running-workflows-programmatically.md +2 -2
- package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +6 -6
- package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +8 -6
- package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +5 -5
- package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +5 -5
- package/.docs/raw/deployment/cloud-providers/index.mdx +11 -8
- package/.docs/raw/deployment/monorepo.mdx +2 -2
- package/.docs/raw/deployment/overview.mdx +2 -2
- package/.docs/raw/deployment/server-deployment.mdx +2 -10
- package/.docs/raw/deployment/serverless-platforms/cloudflare-deployer.mdx +5 -5
- package/.docs/raw/deployment/serverless-platforms/index.mdx +10 -7
- package/.docs/raw/deployment/serverless-platforms/netlify-deployer.mdx +5 -5
- package/.docs/raw/deployment/serverless-platforms/vercel-deployer.mdx +5 -5
- package/.docs/raw/deployment/web-framework.mdx +8 -8
- package/.docs/raw/{scorers → evals}/custom-scorers.mdx +6 -6
- package/.docs/raw/evals/off-the-shelf-scorers.mdx +50 -0
- package/.docs/raw/{scorers → evals}/overview.mdx +9 -9
- package/.docs/raw/evals/running-in-ci.mdx +113 -0
- package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +26 -25
- package/.docs/raw/frameworks/agentic-uis/assistant-ui.mdx +1 -1
- package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +17 -17
- package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +4 -1
- package/.docs/raw/frameworks/servers/express.mdx +11 -10
- package/.docs/raw/frameworks/web-frameworks/astro.mdx +18 -18
- package/.docs/raw/frameworks/web-frameworks/next-js.mdx +7 -7
- package/.docs/raw/frameworks/web-frameworks/sveltekit.mdx +16 -16
- package/.docs/raw/frameworks/web-frameworks/vite-react.mdx +7 -7
- package/.docs/raw/getting-started/installation.mdx +26 -25
- package/.docs/raw/getting-started/mcp-docs-server.mdx +1 -1
- package/.docs/raw/getting-started/project-structure.mdx +4 -4
- package/.docs/raw/getting-started/studio.mdx +8 -8
- package/.docs/raw/getting-started/templates.mdx +6 -6
- package/.docs/raw/guides/guide/ai-recruiter.mdx +264 -0
- package/.docs/raw/guides/guide/chef-michel.mdx +271 -0
- package/.docs/raw/guides/guide/notes-mcp-server.mdx +450 -0
- package/.docs/raw/guides/guide/research-assistant.mdx +380 -0
- package/.docs/raw/guides/guide/stock-agent.mdx +185 -0
- package/.docs/raw/guides/guide/web-search.mdx +291 -0
- package/.docs/raw/guides/index.mdx +43 -0
- package/.docs/raw/guides/migrations/agentnetwork.mdx +114 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/_template.mdx +50 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +265 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/cli.mdx +48 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +153 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/evals.mdx +230 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +171 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/mcp.mdx +114 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +241 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +83 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/processors.mdx +62 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +270 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/tools.mdx +115 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/tracing.mdx +280 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +23 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/voice.mdx +39 -0
- package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +178 -0
- package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +367 -0
- package/.docs/raw/guides/quickstarts/nextjs.mdx +275 -0
- package/.docs/raw/index.mdx +9 -9
- package/.docs/raw/{observability/logging.mdx → logging.mdx} +4 -4
- package/.docs/raw/mastra-cloud/dashboard.mdx +2 -2
- package/.docs/raw/mastra-cloud/observability.mdx +6 -6
- package/.docs/raw/mastra-cloud/overview.mdx +2 -2
- package/.docs/raw/mastra-cloud/setting-up.mdx +4 -4
- package/.docs/raw/memory/conversation-history.mdx +1 -0
- package/.docs/raw/memory/memory-processors.mdx +4 -3
- package/.docs/raw/memory/overview.mdx +10 -6
- package/.docs/raw/memory/semantic-recall.mdx +13 -8
- package/.docs/raw/memory/storage/memory-with-libsql.mdx +12 -7
- package/.docs/raw/memory/storage/memory-with-pg.mdx +11 -6
- package/.docs/raw/memory/storage/memory-with-upstash.mdx +11 -6
- package/.docs/raw/memory/threads-and-resources.mdx +11 -13
- package/.docs/raw/memory/working-memory.mdx +30 -14
- package/.docs/raw/observability/overview.mdx +13 -30
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/arize.mdx +11 -19
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/braintrust.mdx +8 -17
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/cloud.mdx +11 -17
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/default.mdx +16 -20
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/langfuse.mdx +8 -17
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/langsmith.mdx +8 -17
- package/.docs/raw/observability/{ai-tracing → tracing}/exporters/otel.mdx +12 -21
- package/.docs/raw/observability/{ai-tracing → tracing}/overview.mdx +107 -142
- package/.docs/raw/observability/{ai-tracing → tracing}/processors/sensitive-data-filter.mdx +14 -13
- package/.docs/raw/rag/chunking-and-embedding.mdx +5 -5
- package/.docs/raw/rag/overview.mdx +3 -13
- package/.docs/raw/rag/retrieval.mdx +24 -12
- package/.docs/raw/rag/vector-databases.mdx +7 -1
- package/.docs/raw/reference/agents/agent.mdx +35 -30
- package/.docs/raw/reference/agents/generate.mdx +10 -10
- package/.docs/raw/reference/agents/generateLegacy.mdx +8 -8
- package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +21 -15
- package/.docs/raw/reference/agents/getDefaultOptions.mdx +69 -0
- package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +22 -16
- package/.docs/raw/reference/agents/getDescription.mdx +1 -1
- package/.docs/raw/reference/agents/getInstructions.mdx +8 -8
- package/.docs/raw/reference/agents/getLLM.mdx +9 -9
- package/.docs/raw/reference/agents/getMemory.mdx +9 -9
- package/.docs/raw/reference/agents/getModel.mdx +10 -10
- package/.docs/raw/reference/agents/getVoice.mdx +8 -8
- package/.docs/raw/reference/agents/listAgents.mdx +9 -9
- package/.docs/raw/reference/agents/listScorers.mdx +7 -7
- package/.docs/raw/reference/agents/listTools.mdx +7 -7
- package/.docs/raw/reference/agents/listWorkflows.mdx +7 -7
- package/.docs/raw/reference/agents/network.mdx +11 -10
- package/.docs/raw/reference/auth/auth0.mdx +4 -4
- package/.docs/raw/reference/auth/clerk.mdx +4 -4
- package/.docs/raw/reference/auth/firebase.mdx +6 -6
- package/.docs/raw/reference/auth/jwt.mdx +4 -4
- package/.docs/raw/reference/auth/supabase.mdx +4 -4
- package/.docs/raw/reference/auth/workos.mdx +4 -4
- package/.docs/raw/reference/cli/create-mastra.mdx +10 -10
- package/.docs/raw/reference/cli/mastra.mdx +7 -7
- package/.docs/raw/reference/client-js/agents.mdx +6 -2
- package/.docs/raw/reference/client-js/mastra-client.mdx +7 -7
- package/.docs/raw/reference/client-js/memory.mdx +24 -16
- package/.docs/raw/reference/client-js/observability.mdx +11 -11
- package/.docs/raw/reference/client-js/workflows.mdx +6 -34
- 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 +2 -2
- package/.docs/raw/reference/core/getLogger.mdx +2 -2
- package/.docs/raw/reference/core/getMCPServer.mdx +31 -15
- package/.docs/raw/reference/core/getMCPServerById.mdx +81 -0
- package/.docs/raw/reference/core/getScorer.mdx +3 -3
- package/.docs/raw/reference/core/getScorerById.mdx +79 -0
- package/.docs/raw/reference/core/getServer.mdx +2 -2
- package/.docs/raw/reference/core/getStorage.mdx +2 -2
- package/.docs/raw/reference/core/getTelemetry.mdx +2 -2
- package/.docs/raw/reference/core/getVector.mdx +2 -2
- package/.docs/raw/reference/core/getWorkflow.mdx +1 -1
- package/.docs/raw/reference/core/listAgents.mdx +1 -1
- 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 +65 -0
- package/.docs/raw/reference/core/listScorers.mdx +3 -3
- package/.docs/raw/reference/core/listVectors.mdx +36 -0
- package/.docs/raw/reference/core/listWorkflows.mdx +6 -6
- package/.docs/raw/reference/core/mastra-class.mdx +3 -2
- package/.docs/raw/reference/core/setLogger.mdx +2 -2
- package/.docs/raw/reference/core/setStorage.mdx +3 -2
- package/.docs/raw/reference/core/setTelemetry.mdx +2 -2
- package/.docs/raw/reference/deployer/cloudflare.mdx +2 -2
- package/.docs/raw/reference/deployer/deployer.mdx +0 -6
- package/.docs/raw/reference/deployer/netlify.mdx +2 -2
- package/.docs/raw/reference/deployer/vercel.mdx +3 -3
- package/.docs/raw/reference/evals/answer-relevancy.mdx +164 -126
- package/.docs/raw/reference/{scorers → evals}/answer-similarity.mdx +27 -27
- package/.docs/raw/reference/evals/bias.mdx +149 -115
- package/.docs/raw/reference/evals/completeness.mdx +148 -117
- package/.docs/raw/reference/evals/content-similarity.mdx +126 -113
- package/.docs/raw/reference/evals/context-precision.mdx +290 -133
- package/.docs/raw/reference/{scorers → evals}/context-relevance.mdx +6 -6
- package/.docs/raw/reference/{scorers → evals}/create-scorer.mdx +69 -60
- package/.docs/raw/reference/evals/faithfulness.mdx +163 -121
- package/.docs/raw/reference/evals/hallucination.mdx +159 -132
- package/.docs/raw/reference/evals/keyword-coverage.mdx +169 -125
- package/.docs/raw/reference/{scorers → evals}/mastra-scorer.mdx +7 -5
- package/.docs/raw/reference/{scorers → evals}/noise-sensitivity.mdx +9 -9
- package/.docs/raw/reference/evals/prompt-alignment.mdx +604 -182
- package/.docs/raw/reference/{scorers/run-experiment.mdx → evals/run-evals.mdx} +17 -18
- package/.docs/raw/reference/evals/textual-difference.mdx +149 -117
- package/.docs/raw/reference/evals/tone-consistency.mdx +149 -125
- package/.docs/raw/reference/{scorers → evals}/tool-call-accuracy.mdx +8 -6
- package/.docs/raw/reference/evals/toxicity.mdx +152 -96
- package/.docs/raw/reference/{observability/logging → logging}/pino-logger.mdx +2 -2
- package/.docs/raw/reference/memory/createThread.mdx +5 -5
- package/.docs/raw/reference/memory/deleteMessages.mdx +7 -7
- package/.docs/raw/reference/memory/getThreadById.mdx +4 -4
- package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +110 -0
- package/.docs/raw/reference/memory/memory-class.mdx +13 -9
- package/.docs/raw/reference/memory/query.mdx +58 -57
- package/.docs/raw/reference/memory/recall.mdx +185 -0
- package/.docs/raw/reference/observability/tracing/configuration.mdx +245 -0
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/arize.mdx +13 -13
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/braintrust.mdx +11 -8
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/cloud-exporter.mdx +21 -19
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/console-exporter.mdx +49 -17
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/default-exporter.mdx +42 -41
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/langfuse.mdx +10 -7
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/langsmith.mdx +10 -7
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/exporters/otel.mdx +5 -5
- package/.docs/raw/reference/observability/tracing/instances.mdx +168 -0
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/interfaces.mdx +115 -89
- package/.docs/raw/reference/observability/{ai-tracing → tracing}/processors/sensitive-data-filter.mdx +3 -3
- package/.docs/raw/reference/observability/{ai-tracing/span.mdx → tracing/spans.mdx} +59 -41
- package/.docs/raw/reference/processors/batch-parts-processor.mdx +9 -3
- package/.docs/raw/reference/processors/language-detector.mdx +9 -3
- package/.docs/raw/reference/processors/moderation-processor.mdx +9 -3
- package/.docs/raw/reference/processors/pii-detector.mdx +9 -3
- package/.docs/raw/reference/processors/prompt-injection-detector.mdx +9 -3
- package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +9 -3
- package/.docs/raw/reference/processors/token-limiter-processor.mdx +9 -3
- package/.docs/raw/reference/processors/unicode-normalizer.mdx +9 -3
- package/.docs/raw/reference/rag/chunk.mdx +1 -8
- package/.docs/raw/reference/rag/database-config.mdx +7 -7
- package/.docs/raw/reference/rag/metadata-filters.mdx +14 -11
- package/.docs/raw/reference/storage/cloudflare-d1.mdx +1 -1
- package/.docs/raw/reference/storage/cloudflare.mdx +1 -1
- package/.docs/raw/reference/storage/dynamodb.mdx +3 -3
- package/.docs/raw/reference/storage/lance.mdx +1 -1
- package/.docs/raw/reference/storage/libsql.mdx +3 -1
- package/.docs/raw/reference/storage/mongodb.mdx +1 -1
- package/.docs/raw/reference/storage/mssql.mdx +6 -1
- package/.docs/raw/reference/storage/postgresql.mdx +7 -1
- package/.docs/raw/reference/storage/upstash.mdx +2 -1
- package/.docs/raw/reference/streaming/agents/stream.mdx +12 -12
- package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +8 -8
- package/.docs/raw/reference/streaming/workflows/observeStream.mdx +3 -3
- package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +3 -3
- package/.docs/raw/reference/streaming/workflows/resumeStreamVNext.mdx +6 -6
- package/.docs/raw/reference/streaming/workflows/stream.mdx +10 -10
- package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +11 -11
- package/.docs/raw/reference/templates/overview.mdx +3 -3
- package/.docs/raw/reference/tools/create-tool.mdx +52 -35
- package/.docs/raw/reference/tools/graph-rag-tool.mdx +15 -15
- package/.docs/raw/reference/tools/mcp-client.mdx +1 -1
- package/.docs/raw/reference/tools/mcp-server.mdx +119 -35
- package/.docs/raw/reference/tools/vector-query-tool.mdx +27 -26
- package/.docs/raw/reference/vectors/couchbase.mdx +8 -2
- package/.docs/raw/reference/vectors/libsql.mdx +2 -1
- package/.docs/raw/reference/vectors/mongodb.mdx +7 -1
- package/.docs/raw/reference/vectors/pg.mdx +3 -0
- package/.docs/raw/reference/vectors/s3vectors.mdx +1 -1
- package/.docs/raw/reference/vectors/upstash.mdx +1 -0
- package/.docs/raw/reference/voice/google-gemini-live.mdx +1 -1
- package/.docs/raw/reference/voice/voice.addTools.mdx +3 -3
- package/.docs/raw/reference/workflows/run-methods/cancel.mdx +4 -4
- package/.docs/raw/reference/workflows/run-methods/resume.mdx +14 -14
- package/.docs/raw/reference/workflows/run-methods/start.mdx +17 -17
- package/.docs/raw/reference/workflows/run.mdx +1 -8
- package/.docs/raw/reference/workflows/step.mdx +5 -5
- package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +2 -2
- package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +7 -13
- 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 +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/map.mdx +5 -0
- package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
- package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +2 -2
- 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 +1 -1
- package/.docs/raw/server-db/custom-api-routes.mdx +2 -2
- package/.docs/raw/server-db/mastra-client.mdx +23 -22
- package/.docs/raw/server-db/middleware.mdx +7 -7
- package/.docs/raw/server-db/production-server.mdx +4 -4
- package/.docs/raw/server-db/{runtime-context.mdx → request-context.mdx} +46 -45
- package/.docs/raw/server-db/storage.mdx +29 -21
- package/.docs/raw/streaming/events.mdx +3 -3
- package/.docs/raw/streaming/overview.mdx +5 -5
- package/.docs/raw/streaming/tool-streaming.mdx +18 -17
- package/.docs/raw/streaming/workflow-streaming.mdx +1 -1
- package/.docs/raw/tools-mcp/advanced-usage.mdx +5 -4
- package/.docs/raw/tools-mcp/mcp-overview.mdx +33 -20
- package/.docs/raw/tools-mcp/overview.mdx +11 -11
- package/.docs/raw/voice/overview.mdx +63 -43
- package/.docs/raw/voice/speech-to-speech.mdx +5 -3
- package/.docs/raw/voice/speech-to-text.mdx +10 -9
- package/.docs/raw/voice/text-to-speech.mdx +13 -12
- package/.docs/raw/workflows/agents-and-tools.mdx +9 -5
- package/.docs/raw/workflows/control-flow.mdx +3 -3
- package/.docs/raw/workflows/error-handling.mdx +2 -21
- package/.docs/raw/workflows/human-in-the-loop.mdx +7 -4
- package/.docs/raw/workflows/inngest-workflow.mdx +3 -3
- package/.docs/raw/workflows/input-data-mapping.mdx +107 -0
- package/.docs/raw/workflows/overview.mdx +17 -16
- package/.docs/raw/workflows/snapshots.mdx +13 -11
- package/.docs/raw/workflows/suspend-and-resume.mdx +23 -15
- package/CHANGELOG.md +55 -53
- package/README.md +11 -2
- package/dist/{chunk-TUAHUTTB.js → chunk-5NJC7NRO.js} +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
- package/dist/prepare-docs/prepare.js +1 -1
- package/dist/prompts/migration.d.ts +6 -0
- package/dist/prompts/migration.d.ts.map +1 -0
- package/dist/stdio.js +402 -30
- package/dist/tools/migration.d.ts +40 -0
- package/dist/tools/migration.d.ts.map +1 -0
- package/package.json +8 -12
- package/.docs/organized/changelogs/%40mastra%2Fcloud.md +0 -302
- package/.docs/raw/observability/nextjs-tracing.mdx +0 -109
- package/.docs/raw/observability/otel-tracing.mdx +0 -189
- package/.docs/raw/reference/agents/getScorers.mdx +0 -69
- package/.docs/raw/reference/agents/getTools.mdx +0 -69
- package/.docs/raw/reference/agents/getWorkflows.mdx +0 -69
- package/.docs/raw/reference/client-js/workflows-legacy.mdx +0 -143
- package/.docs/raw/reference/core/getAgents.mdx +0 -35
- package/.docs/raw/reference/core/getLogs.mdx +0 -96
- package/.docs/raw/reference/core/getLogsByRunId.mdx +0 -87
- package/.docs/raw/reference/core/getMCPServers.mdx +0 -36
- package/.docs/raw/reference/core/getMemory.mdx +0 -36
- package/.docs/raw/reference/core/getScorerByName.mdx +0 -78
- package/.docs/raw/reference/core/getScorers.mdx +0 -43
- package/.docs/raw/reference/core/getVectors.mdx +0 -36
- package/.docs/raw/reference/core/getWorkflows.mdx +0 -45
- package/.docs/raw/reference/evals/context-position.mdx +0 -197
- package/.docs/raw/reference/evals/context-relevancy.mdx +0 -196
- package/.docs/raw/reference/evals/contextual-recall.mdx +0 -196
- package/.docs/raw/reference/evals/summarization.mdx +0 -212
- package/.docs/raw/reference/legacyWorkflows/after.mdx +0 -89
- package/.docs/raw/reference/legacyWorkflows/afterEvent.mdx +0 -79
- package/.docs/raw/reference/legacyWorkflows/commit.mdx +0 -33
- package/.docs/raw/reference/legacyWorkflows/createRun.mdx +0 -76
- package/.docs/raw/reference/legacyWorkflows/else.mdx +0 -68
- package/.docs/raw/reference/legacyWorkflows/events.mdx +0 -305
- package/.docs/raw/reference/legacyWorkflows/execute.mdx +0 -110
- package/.docs/raw/reference/legacyWorkflows/if.mdx +0 -108
- package/.docs/raw/reference/legacyWorkflows/resume.mdx +0 -158
- package/.docs/raw/reference/legacyWorkflows/resumeWithEvent.mdx +0 -133
- package/.docs/raw/reference/legacyWorkflows/snapshots.mdx +0 -207
- package/.docs/raw/reference/legacyWorkflows/start.mdx +0 -87
- package/.docs/raw/reference/legacyWorkflows/step-class.mdx +0 -100
- package/.docs/raw/reference/legacyWorkflows/step-condition.mdx +0 -137
- package/.docs/raw/reference/legacyWorkflows/step-function.mdx +0 -93
- package/.docs/raw/reference/legacyWorkflows/step-options.mdx +0 -69
- package/.docs/raw/reference/legacyWorkflows/step-retries.mdx +0 -196
- package/.docs/raw/reference/legacyWorkflows/suspend.mdx +0 -70
- package/.docs/raw/reference/legacyWorkflows/then.mdx +0 -72
- package/.docs/raw/reference/legacyWorkflows/until.mdx +0 -168
- package/.docs/raw/reference/legacyWorkflows/watch.mdx +0 -124
- package/.docs/raw/reference/legacyWorkflows/while.mdx +0 -168
- package/.docs/raw/reference/legacyWorkflows/workflow.mdx +0 -234
- package/.docs/raw/reference/memory/getThreadsByResourceId.mdx +0 -79
- package/.docs/raw/reference/memory/getThreadsByResourceIdPaginated.mdx +0 -110
- package/.docs/raw/reference/observability/ai-tracing/ai-tracing.mdx +0 -185
- package/.docs/raw/reference/observability/ai-tracing/configuration.mdx +0 -238
- package/.docs/raw/reference/observability/otel-tracing/otel-config.mdx +0 -117
- package/.docs/raw/reference/observability/otel-tracing/providers/arize-ax.mdx +0 -81
- package/.docs/raw/reference/observability/otel-tracing/providers/arize-phoenix.mdx +0 -121
- package/.docs/raw/reference/observability/otel-tracing/providers/braintrust.mdx +0 -40
- package/.docs/raw/reference/observability/otel-tracing/providers/dash0.mdx +0 -40
- package/.docs/raw/reference/observability/otel-tracing/providers/index.mdx +0 -20
- package/.docs/raw/reference/observability/otel-tracing/providers/keywordsai.mdx +0 -73
- package/.docs/raw/reference/observability/otel-tracing/providers/laminar.mdx +0 -41
- package/.docs/raw/reference/observability/otel-tracing/providers/langfuse.mdx +0 -84
- package/.docs/raw/reference/observability/otel-tracing/providers/langsmith.mdx +0 -48
- package/.docs/raw/reference/observability/otel-tracing/providers/langwatch.mdx +0 -43
- package/.docs/raw/reference/observability/otel-tracing/providers/new-relic.mdx +0 -40
- package/.docs/raw/reference/observability/otel-tracing/providers/signoz.mdx +0 -40
- package/.docs/raw/reference/observability/otel-tracing/providers/traceloop.mdx +0 -40
- package/.docs/raw/reference/scorers/answer-relevancy.mdx +0 -227
- package/.docs/raw/reference/scorers/bias.mdx +0 -228
- package/.docs/raw/reference/scorers/completeness.mdx +0 -214
- package/.docs/raw/reference/scorers/content-similarity.mdx +0 -197
- package/.docs/raw/reference/scorers/context-precision.mdx +0 -352
- package/.docs/raw/reference/scorers/faithfulness.mdx +0 -241
- package/.docs/raw/reference/scorers/hallucination.mdx +0 -252
- package/.docs/raw/reference/scorers/keyword-coverage.mdx +0 -229
- package/.docs/raw/reference/scorers/prompt-alignment.mdx +0 -668
- package/.docs/raw/reference/scorers/textual-difference.mdx +0 -203
- package/.docs/raw/reference/scorers/tone-consistency.mdx +0 -211
- package/.docs/raw/reference/scorers/toxicity.mdx +0 -228
- package/.docs/raw/reference/workflows/run-methods/watch.mdx +0 -73
- package/.docs/raw/scorers/evals-old-api/custom-eval.mdx +0 -24
- package/.docs/raw/scorers/evals-old-api/overview.mdx +0 -106
- package/.docs/raw/scorers/evals-old-api/running-in-ci.mdx +0 -85
- package/.docs/raw/scorers/evals-old-api/textual-evals.mdx +0 -58
- package/.docs/raw/scorers/off-the-shelf-scorers.mdx +0 -50
- package/.docs/raw/workflows-legacy/control-flow.mdx +0 -774
- package/.docs/raw/workflows-legacy/dynamic-workflows.mdx +0 -239
- package/.docs/raw/workflows-legacy/error-handling.mdx +0 -187
- package/.docs/raw/workflows-legacy/nested-workflows.mdx +0 -360
- package/.docs/raw/workflows-legacy/overview.mdx +0 -182
- package/.docs/raw/workflows-legacy/runtime-variables.mdx +0 -156
- package/.docs/raw/workflows-legacy/steps.mdx +0 -115
- package/.docs/raw/workflows-legacy/suspend-and-resume.mdx +0 -406
- package/.docs/raw/workflows-legacy/variables.mdx +0 -318
|
@@ -13,12 +13,12 @@ import { VideoPlayer } from "@site/src/components/video-player";
|
|
|
13
13
|
|
|
14
14
|
The `create mastra` CLI command is the quickest way to start a new Mastra project. It walks you through setup and creates example agents, workflows, and tools for you to learn from or adapt.
|
|
15
15
|
|
|
16
|
-
For more control over setup, or to add Mastra to an existing project, see the [manual installation guide](#install-manually). You can also use [`mastra init`](/reference/cli/mastra#mastra-init) for existing projects.
|
|
16
|
+
For more control over setup, or to add Mastra to an existing project, see the [manual installation guide](#install-manually). You can also use [`mastra init`](/reference/v1/cli/mastra#mastra-init) for existing projects.
|
|
17
17
|
|
|
18
18
|
## Before you start
|
|
19
19
|
|
|
20
|
-
- You'll need an API key from a [model provider](/models) to complete setup. We suggest starting with [OpenAI](https://platform.openai.com/api-keys), but if you need a provider that doesn't require a credit card, Google's [Gemini](https://aistudio.google.com/app/api-keys) is also an option.
|
|
21
|
-
- [Install](https://nodejs.org/en/download) Node.js
|
|
20
|
+
- You'll need an API key from a [model provider](/models/v1) to complete setup. We suggest starting with [OpenAI](https://platform.openai.com/api-keys), but if you need a provider that doesn't require a credit card, Google's [Gemini](https://aistudio.google.com/app/api-keys) is also an option.
|
|
21
|
+
- [Install](https://nodejs.org/en/download) Node.js 22.13.0 or later.
|
|
22
22
|
|
|
23
23
|
## Install with `create mastra`
|
|
24
24
|
|
|
@@ -30,28 +30,28 @@ The wizard will guide you through setup, create a new directory for your project
|
|
|
30
30
|
<TabItem value="npm" label="npm">
|
|
31
31
|
|
|
32
32
|
```bash copy
|
|
33
|
-
npm create mastra@
|
|
33
|
+
npm create mastra@beta
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
</TabItem>
|
|
37
37
|
<TabItem value="pnpm" label="pnpm">
|
|
38
38
|
|
|
39
39
|
```bash copy
|
|
40
|
-
pnpm create mastra@
|
|
40
|
+
pnpm create mastra@beta
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
</TabItem>
|
|
44
44
|
<TabItem value="yarn" label="yarn">
|
|
45
45
|
|
|
46
46
|
```bash copy
|
|
47
|
-
yarn create mastra@
|
|
47
|
+
yarn create mastra@beta
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
</TabItem>
|
|
51
51
|
<TabItem value="bun" label="bun">
|
|
52
52
|
|
|
53
53
|
```bash copy
|
|
54
|
-
bun create mastra@
|
|
54
|
+
bun create mastra@beta
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
</TabItem>
|
|
@@ -59,7 +59,7 @@ bun create mastra@latest
|
|
|
59
59
|
|
|
60
60
|
:::note
|
|
61
61
|
|
|
62
|
-
You can use flags with `create mastra` like `--no-example` to skip the example weather agent or `--template` to start from a specific [template](/docs/getting-started/templates). Read the [CLI reference](/reference/cli/create-mastra) for all options.
|
|
62
|
+
You can use flags with `create mastra` like `--no-example` to skip the example weather agent or `--template` to start from a specific [template](/docs/v1/getting-started/templates). Read the [CLI reference](/reference/v1/cli/create-mastra) for all options.
|
|
63
63
|
|
|
64
64
|
:::
|
|
65
65
|
|
|
@@ -77,13 +77,13 @@ If you encounter an error, your API key may not be configured correctly. Double-
|
|
|
77
77
|
|
|
78
78
|
:::
|
|
79
79
|
|
|
80
|
-
[Studio](/docs/getting-started/studio) lets you rapidly build and prototype agents without needing to build a UI. Once you're ready, you can integrate your Mastra agent into your application using the guides below.
|
|
80
|
+
[Studio](/docs/v1/getting-started/studio) lets you rapidly build and prototype agents without needing to build a UI. Once you're ready, you can integrate your Mastra agent into your application using the guides below.
|
|
81
81
|
|
|
82
82
|
### Next steps
|
|
83
83
|
|
|
84
|
-
- Read more about [Mastra's features](/docs#why-mastra).
|
|
85
|
-
- Integrate Mastra with your frontend framework: [Next.js](/docs/frameworks/web-frameworks/next-js), [React](/docs/frameworks/web-frameworks/vite-react), or [Astro](/docs/frameworks/web-frameworks/astro).
|
|
86
|
-
- Build an agent from scratch following one of our [guides](/guides).
|
|
84
|
+
- Read more about [Mastra's features](/docs/v1#why-mastra).
|
|
85
|
+
- Integrate Mastra with your frontend framework: [Next.js](/docs/v1/frameworks/web-frameworks/next-js), [React](/docs/v1/frameworks/web-frameworks/vite-react), or [Astro](/docs/v1/frameworks/web-frameworks/astro).
|
|
86
|
+
- Build an agent from scratch following one of our [guides](/guides/v1).
|
|
87
87
|
- Watch conceptual guides on our [YouTube channel](https://www.youtube.com/@mastra-ai) and [subscribe](https://www.youtube.com/@mastra-ai?sub_confirmation=1)!
|
|
88
88
|
|
|
89
89
|
## Install manually
|
|
@@ -107,17 +107,17 @@ Initialize a TypeScript project and install the following dependencies:
|
|
|
107
107
|
|
|
108
108
|
```bash copy
|
|
109
109
|
npm init -y
|
|
110
|
-
npm install -D typescript @types/node mastra@
|
|
111
|
-
npm install @mastra/core@
|
|
110
|
+
npm install -D typescript @types/node mastra@beta
|
|
111
|
+
npm install @mastra/core@beta zod@^4
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
</TabItem>
|
|
115
115
|
<TabItem value="pnpm" label="pnpm">
|
|
116
116
|
|
|
117
117
|
```bash copy
|
|
118
|
-
pnpm init
|
|
119
|
-
pnpm add -D typescript @types/node mastra@
|
|
120
|
-
pnpm add @mastra/core@
|
|
118
|
+
pnpm init
|
|
119
|
+
pnpm add -D typescript @types/node mastra@beta
|
|
120
|
+
pnpm add @mastra/core@beta zod@^4
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
</TabItem>
|
|
@@ -125,8 +125,8 @@ pnpm add @mastra/core@latest zod@^4
|
|
|
125
125
|
|
|
126
126
|
```bash copy
|
|
127
127
|
yarn init -y
|
|
128
|
-
yarn add -D typescript @types/node mastra@
|
|
129
|
-
yarn add @mastra/core@
|
|
128
|
+
yarn add -D typescript @types/node mastra@beta
|
|
129
|
+
yarn add @mastra/core@beta zod@^4
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
</TabItem>
|
|
@@ -134,8 +134,8 @@ yarn add @mastra/core@latest zod@^4
|
|
|
134
134
|
|
|
135
135
|
```bash copy
|
|
136
136
|
bun init -y
|
|
137
|
-
bun add -d typescript @types/node mastra@
|
|
138
|
-
bun add @mastra/core@
|
|
137
|
+
bun add -d typescript @types/node mastra@beta
|
|
138
|
+
bun add @mastra/core@beta zod@^4
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
</TabItem>
|
|
@@ -206,7 +206,7 @@ GOOGLE_GENERATIVE_AI_API_KEY=<your-api-key>
|
|
|
206
206
|
|
|
207
207
|
:::note
|
|
208
208
|
|
|
209
|
-
This guide uses Google Gemini, but you can use any supported [model provider](/models), including OpenAI, Anthropic, and more.
|
|
209
|
+
This guide uses Google Gemini, but you can use any supported [model provider](/models/v1), including OpenAI, Anthropic, and more.
|
|
210
210
|
|
|
211
211
|
:::
|
|
212
212
|
|
|
@@ -245,7 +245,7 @@ export const weatherTool = createTool({
|
|
|
245
245
|
|
|
246
246
|
:::info
|
|
247
247
|
|
|
248
|
-
We've shortened and simplified the `weatherTool` example here. You can see the complete weather tool under [Giving an Agent a Tool](/docs/agents/using-tools).
|
|
248
|
+
We've shortened and simplified the `weatherTool` example here. You can see the complete weather tool under [Giving an Agent a Tool](/docs/v1/agents/using-tools).
|
|
249
249
|
|
|
250
250
|
:::
|
|
251
251
|
|
|
@@ -266,6 +266,7 @@ import { Agent } from "@mastra/core/agent";
|
|
|
266
266
|
import { weatherTool } from "../tools/weather-tool";
|
|
267
267
|
|
|
268
268
|
export const weatherAgent = new Agent({
|
|
269
|
+
id: "weather-agent",
|
|
269
270
|
name: "Weather Agent",
|
|
270
271
|
instructions: `
|
|
271
272
|
You are a helpful weather assistant that provides accurate weather information.
|
|
@@ -297,7 +298,7 @@ touch src/mastra/index.ts
|
|
|
297
298
|
Add the following code:
|
|
298
299
|
|
|
299
300
|
```ts title="src/mastra/index.ts" showLineNumbers copy
|
|
300
|
-
import { Mastra } from "@mastra/core
|
|
301
|
+
import { Mastra } from "@mastra/core";
|
|
301
302
|
import { weatherAgent } from "./agents/weather-agent";
|
|
302
303
|
|
|
303
304
|
export const mastra = new Mastra({
|
|
@@ -309,7 +310,7 @@ export const mastra = new Mastra({
|
|
|
309
310
|
|
|
310
311
|
<StepItem>
|
|
311
312
|
|
|
312
|
-
You can now launch [Studio](/docs/getting-started/studio) and test your agent.
|
|
313
|
+
You can now launch [Studio](/docs/v1/getting-started/studio) and test your agent.
|
|
313
314
|
|
|
314
315
|
<Tabs>
|
|
315
316
|
<TabItem value="npm" label="npm">
|
|
@@ -19,7 +19,7 @@ In this guide you'll learn how to add Mastra's MCP server to your AI tooling.
|
|
|
19
19
|
|
|
20
20
|
### create-mastra
|
|
21
21
|
|
|
22
|
-
During the interactive [create-mastra](/reference/cli/create-mastra) wizard, choose one of your tools in the MCP step.
|
|
22
|
+
During the interactive [create-mastra](/reference/v1/cli/create-mastra) wizard, choose one of your tools in the MCP step.
|
|
23
23
|
|
|
24
24
|
### Manual setup
|
|
25
25
|
|
|
@@ -55,13 +55,13 @@ Top-level files define how your Mastra project is configured, built, and connect
|
|
|
55
55
|
| File | Description |
|
|
56
56
|
| --------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
57
57
|
| `src/mastra/index.ts` | Central entry point where you configure and initialize Mastra. |
|
|
58
|
-
| `.env.example` | Template for environment variables - copy and rename to `.env` to add your secret [model provider](/models) keys. |
|
|
58
|
+
| `.env.example` | Template for environment variables - copy and rename to `.env` to add your secret [model provider](/models/v1) keys. |
|
|
59
59
|
| `package.json` | Defines project metadata, dependencies, and available npm scripts. |
|
|
60
60
|
| `tsconfig.json` | Configures TypeScript options such as path aliases, compiler settings, and build output. |
|
|
61
61
|
|
|
62
62
|
## Next steps
|
|
63
63
|
|
|
64
|
-
- Read more about [Mastra's features](/docs#why-mastra).
|
|
65
|
-
- Integrate Mastra with your frontend framework: [Next.js](/docs/frameworks/web-frameworks/next-js), [React](/docs/frameworks/web-frameworks/vite-react), or [Astro](/docs/frameworks/web-frameworks/astro).
|
|
66
|
-
- Build an agent from scratch following one of our [guides](/guides).
|
|
64
|
+
- Read more about [Mastra's features](/docs/v1#why-mastra).
|
|
65
|
+
- Integrate Mastra with your frontend framework: [Next.js](/docs/v1/frameworks/web-frameworks/next-js), [React](/docs/v1/frameworks/web-frameworks/vite-react), or [Astro](/docs/v1/frameworks/web-frameworks/astro).
|
|
66
|
+
- Build an agent from scratch following one of our [guides](/guides/v1).
|
|
67
67
|
- Watch conceptual guides on our [YouTube channel](https://www.youtube.com/@mastra-ai) and [subscribe](https://www.youtube.com/@mastra-ai?sub_confirmation=1)!
|
|
@@ -61,7 +61,7 @@ The Studio UI provides an interactive development environment for you to test yo
|
|
|
61
61
|
|
|
62
62
|
### Agents
|
|
63
63
|
|
|
64
|
-
Chat with your agent directly, dynamically switch [models](/models), and tweak settings like temperature and top-p to understand how they affect the output.
|
|
64
|
+
Chat with your agent directly, dynamically switch [models](/models/v1), and tweak settings like temperature and top-p to understand how they affect the output.
|
|
65
65
|
|
|
66
66
|
<VideoPlayer src="https://res.cloudinary.com/mastra-assets/video/upload/v1751406022/local-dev-agents-playground_100_m3begx.mp4" />
|
|
67
67
|
|
|
@@ -91,7 +91,7 @@ When you run an agent or workflow, the Observability tab displays traces that hi
|
|
|
91
91
|
|
|
92
92
|

|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
Tracing filters out low-level framework details so your traces stay focused and readable.
|
|
95
95
|
|
|
96
96
|
### Scorers
|
|
97
97
|
|
|
@@ -99,7 +99,7 @@ The Scorers tab displays the results of your agent's scorers as they run. When m
|
|
|
99
99
|
|
|
100
100
|
## REST API
|
|
101
101
|
|
|
102
|
-
The local development server exposes a complete set of REST API routes, allowing you to programmatically interact with your agents, workflows, and tools during development. This is particularly helpful if you plan to deploy the Mastra server, since the local development server uses the exact same API routes as the [production server](/docs/server-db/production-server), allowing you to develop and test against it with full parity.
|
|
102
|
+
The local development server exposes a complete set of REST API routes, allowing you to programmatically interact with your agents, workflows, and tools during development. This is particularly helpful if you plan to deploy the Mastra server, since the local development server uses the exact same API routes as the [production server](/docs/v1/server-db/production-server), allowing you to develop and test against it with full parity.
|
|
103
103
|
|
|
104
104
|
You can explore all available endpoints in the OpenAPI specification at http://localhost:4111/openapi.json, which details every endpoint and its request and response schemas.
|
|
105
105
|
|
|
@@ -116,7 +116,7 @@ The OpenAPI and Swagger endpoints are disabled in production by default. To enab
|
|
|
116
116
|
By default, the development server runs at http://localhost:4111. You can change the `host` and `port` in the Mastra server configuration:
|
|
117
117
|
|
|
118
118
|
```typescript
|
|
119
|
-
import { Mastra } from "@mastra/core
|
|
119
|
+
import { Mastra } from "@mastra/core";
|
|
120
120
|
|
|
121
121
|
export const mastra = new Mastra({
|
|
122
122
|
server: {
|
|
@@ -128,10 +128,10 @@ export const mastra = new Mastra({
|
|
|
128
128
|
|
|
129
129
|
### Local HTTPS
|
|
130
130
|
|
|
131
|
-
Mastra supports local HTTPS development through the [`--https`](/reference/cli/mastra#--https) flag, which automatically creates and manages certificates for your project. When you run `mastra dev --https`, a private key and certificate are generated for localhost (or your configured host). For custom certificate management, you can provide your own key and certificate files through the server configuration:
|
|
131
|
+
Mastra supports local HTTPS development through the [`--https`](/reference/v1/cli/mastra#--https) flag, which automatically creates and manages certificates for your project. When you run `mastra dev --https`, a private key and certificate are generated for localhost (or your configured host). For custom certificate management, you can provide your own key and certificate files through the server configuration:
|
|
132
132
|
|
|
133
133
|
```typescript
|
|
134
|
-
import { Mastra } from "@mastra/core
|
|
134
|
+
import { Mastra } from "@mastra/core";
|
|
135
135
|
import fs from "node:fs";
|
|
136
136
|
|
|
137
137
|
export const mastra = new Mastra({
|
|
@@ -146,5 +146,5 @@ export const mastra = new Mastra({
|
|
|
146
146
|
|
|
147
147
|
## Next steps
|
|
148
148
|
|
|
149
|
-
- Learn more about Mastra's suggested [project structure](/docs/getting-started/project-structure).
|
|
150
|
-
- Integrate Mastra with your frontend framework of choice - [Next.js](/docs/frameworks/web-frameworks/next-js), [React](/docs/frameworks/web-frameworks/vite-react), or [Astro](/docs/frameworks/web-frameworks/astro).
|
|
149
|
+
- Learn more about Mastra's suggested [project structure](/docs/v1/getting-started/project-structure).
|
|
150
|
+
- Integrate Mastra with your frontend framework of choice - [Next.js](/docs/v1/frameworks/web-frameworks/next-js), [React](/docs/v1/frameworks/web-frameworks/vite-react), or [Astro](/docs/v1/frameworks/web-frameworks/astro).
|
|
@@ -17,22 +17,22 @@ Install a template using the `create-mastra` command:
|
|
|
17
17
|
<Tabs>
|
|
18
18
|
<TabItem value="npm" label="npm">
|
|
19
19
|
```bash copy
|
|
20
|
-
npx create-mastra@
|
|
20
|
+
npx create-mastra@beta --template template-name
|
|
21
21
|
```
|
|
22
22
|
</TabItem>
|
|
23
23
|
<TabItem value="yarn" label="yarn">
|
|
24
24
|
```bash copy
|
|
25
|
-
yarn dlx create-mastra@
|
|
25
|
+
yarn dlx create-mastra@beta --template template-name
|
|
26
26
|
```
|
|
27
27
|
</TabItem>
|
|
28
28
|
<TabItem value="pnpm" label="pnpm">
|
|
29
29
|
```bash copy
|
|
30
|
-
pnpm create mastra@
|
|
30
|
+
pnpm create mastra@beta --template template-name
|
|
31
31
|
```
|
|
32
32
|
</TabItem>
|
|
33
33
|
<TabItem value="bun" label="bun">
|
|
34
34
|
```bash copy
|
|
35
|
-
bun create mastra@
|
|
35
|
+
bun create mastra@beta --template template-name
|
|
36
36
|
```
|
|
37
37
|
</TabItem>
|
|
38
38
|
</Tabs>
|
|
@@ -40,7 +40,7 @@ Install a template using the `create-mastra` command:
|
|
|
40
40
|
For example, to create a text-to-SQL application:
|
|
41
41
|
|
|
42
42
|
```bash copy
|
|
43
|
-
npx create-mastra@
|
|
43
|
+
npx create-mastra@beta --template text-to-sql
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
## Setting Up a Template
|
|
@@ -70,4 +70,4 @@ After installation:
|
|
|
70
70
|
Each template includes a comprehensive README with specific setup instructions and usage examples.
|
|
71
71
|
:::
|
|
72
72
|
|
|
73
|
-
For detailed information on creating templates, see the [Templates Reference](/reference/templates/overview).
|
|
73
|
+
For detailed information on creating templates, see the [Templates Reference](/reference/v1/templates/overview).
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Guide: Building an AI Recruiter | Mastra Workflows | Guides"
|
|
3
|
+
description: Guide on building a recruiter workflow in Mastra to gather and process candidate information using LLMs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import Steps from "@site/src/components/Steps";
|
|
7
|
+
import StepItem from "@site/src/components/StepItem";
|
|
8
|
+
|
|
9
|
+
# Building an AI Recruiter
|
|
10
|
+
|
|
11
|
+
In this guide, you'll learn how Mastra helps you build workflows with LLMs.
|
|
12
|
+
|
|
13
|
+
You'll create a workflow that gathers information from a candidate's resume, then branches to either a technical or behavioral question based on the candidate's profile. Along the way, you'll see how to structure workflow steps, handle branching, and integrate LLM calls.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
- Node.js `v22.13.0` or later installed
|
|
18
|
+
- An API key from a supported [Model Provider](/models/v1)
|
|
19
|
+
- An existing Mastra project (Follow the [installation guide](/docs/v1/getting-started/installation) to set up a new project)
|
|
20
|
+
|
|
21
|
+
## Building the Workflow
|
|
22
|
+
|
|
23
|
+
Set up the Workflow, define steps to extract and classify candidate data, and then ask suitable follow-up questions.
|
|
24
|
+
|
|
25
|
+
<Steps>
|
|
26
|
+
|
|
27
|
+
<StepItem>
|
|
28
|
+
|
|
29
|
+
Create a new file `src/mastra/workflows/candidate-workflow.ts` and define your workflow:
|
|
30
|
+
|
|
31
|
+
```ts copy title="src/mastra/workflows/candidate-workflow.ts"
|
|
32
|
+
import { createWorkflow, createStep } from "@mastra/core/workflows";
|
|
33
|
+
import { z } from "zod";
|
|
34
|
+
|
|
35
|
+
export const candidateWorkflow = createWorkflow({
|
|
36
|
+
id: "candidate-workflow",
|
|
37
|
+
inputSchema: z.object({
|
|
38
|
+
resumeText: z.string(),
|
|
39
|
+
}),
|
|
40
|
+
outputSchema: z.object({
|
|
41
|
+
askAboutSpecialty: z.object({
|
|
42
|
+
question: z.string(),
|
|
43
|
+
}),
|
|
44
|
+
askAboutRole: z.object({
|
|
45
|
+
question: z.string(),
|
|
46
|
+
}),
|
|
47
|
+
}),
|
|
48
|
+
}).commit();
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
</StepItem>
|
|
52
|
+
|
|
53
|
+
<StepItem>
|
|
54
|
+
|
|
55
|
+
You want to extract candidate details from the resume text and classify the person as "technical" or "non-technical". This step calls an LLM to parse the resume and returns structured JSON, including the name, technical status, specialty, and the original resume text. Defined through the `inputSchema` you get access to the `resumeText` inside `execute()`. Use it to prompt an LLM and return the organized fields.
|
|
56
|
+
|
|
57
|
+
To the existing `src/mastra/workflows/candidate-workflow.ts` file add the following:
|
|
58
|
+
|
|
59
|
+
```ts copy title="src/mastra/workflows/candidate-workflow.ts"
|
|
60
|
+
import { Agent } from "@mastra/core/agent";
|
|
61
|
+
import { openai } from "@ai-sdk/openai";
|
|
62
|
+
|
|
63
|
+
const recruiter = new Agent({
|
|
64
|
+
id: "recruiter-agent",
|
|
65
|
+
name: "Recruiter Agent",
|
|
66
|
+
instructions: `You are a recruiter.`,
|
|
67
|
+
model: openai("gpt-4o-mini"),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const gatherCandidateInfo = createStep({
|
|
71
|
+
id: "gatherCandidateInfo",
|
|
72
|
+
inputSchema: z.object({
|
|
73
|
+
resumeText: z.string(),
|
|
74
|
+
}),
|
|
75
|
+
outputSchema: z.object({
|
|
76
|
+
candidateName: z.string(),
|
|
77
|
+
isTechnical: z.boolean(),
|
|
78
|
+
specialty: z.string(),
|
|
79
|
+
resumeText: z.string(),
|
|
80
|
+
}),
|
|
81
|
+
execute: async ({ inputData }) => {
|
|
82
|
+
const resumeText = inputData?.resumeText;
|
|
83
|
+
|
|
84
|
+
const prompt = `Extract details from the resume text:
|
|
85
|
+
"${resumeText}"`;
|
|
86
|
+
|
|
87
|
+
const res = await recruiter.generate(prompt, {
|
|
88
|
+
structuredOutput: {
|
|
89
|
+
schema: z.object({
|
|
90
|
+
candidateName: z.string(),
|
|
91
|
+
isTechnical: z.boolean(),
|
|
92
|
+
specialty: z.string(),
|
|
93
|
+
resumeText: z.string(),
|
|
94
|
+
}),
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return res.object;
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Since you're using a Recruiter agent inside `execute()` you need to define it above the step and add the necessary imports.
|
|
104
|
+
|
|
105
|
+
</StepItem>
|
|
106
|
+
|
|
107
|
+
<StepItem>
|
|
108
|
+
|
|
109
|
+
This step prompts a candidate who is identified as "technical" for more information about how they got into their specialty. It uses the entire resume text so the LLM can craft a relevant follow-up question.
|
|
110
|
+
|
|
111
|
+
To the existing `src/mastra/workflows/candidate-workflow.ts` file add the following:
|
|
112
|
+
|
|
113
|
+
```ts copy title="src/mastra/workflows/candidate-workflow.ts"
|
|
114
|
+
const askAboutSpecialty = createStep({
|
|
115
|
+
id: "askAboutSpecialty",
|
|
116
|
+
inputSchema: z.object({
|
|
117
|
+
candidateName: z.string(),
|
|
118
|
+
isTechnical: z.boolean(),
|
|
119
|
+
specialty: z.string(),
|
|
120
|
+
resumeText: z.string(),
|
|
121
|
+
}),
|
|
122
|
+
outputSchema: z.object({
|
|
123
|
+
question: z.string(),
|
|
124
|
+
}),
|
|
125
|
+
execute: async ({ inputData: candidateInfo }) => {
|
|
126
|
+
const prompt = `You are a recruiter. Given the resume below, craft a short question
|
|
127
|
+
for ${candidateInfo?.candidateName} about how they got into "${candidateInfo?.specialty}".
|
|
128
|
+
Resume: ${candidateInfo?.resumeText}`;
|
|
129
|
+
const res = await recruiter.generate(prompt);
|
|
130
|
+
|
|
131
|
+
return { question: res?.text?.trim() || "" };
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
</StepItem>
|
|
137
|
+
|
|
138
|
+
<StepItem>
|
|
139
|
+
|
|
140
|
+
If the candidate is "non-technical", you want a different follow-up question. This step asks what interests them most about the role, again referencing their complete resume text. The `execute()` function solicits a role-focused query from the LLM.
|
|
141
|
+
|
|
142
|
+
To the existing `src/mastra/workflows/candidate-workflow.ts` file add the following:
|
|
143
|
+
|
|
144
|
+
```ts title="src/mastra/workflows/candidate-workflow.ts" copy
|
|
145
|
+
const askAboutRole = createStep({
|
|
146
|
+
id: "askAboutRole",
|
|
147
|
+
inputSchema: z.object({
|
|
148
|
+
candidateName: z.string(),
|
|
149
|
+
isTechnical: z.boolean(),
|
|
150
|
+
specialty: z.string(),
|
|
151
|
+
resumeText: z.string(),
|
|
152
|
+
}),
|
|
153
|
+
outputSchema: z.object({
|
|
154
|
+
question: z.string(),
|
|
155
|
+
}),
|
|
156
|
+
execute: async ({ inputData: candidateInfo }) => {
|
|
157
|
+
const prompt = `You are a recruiter. Given the resume below, craft a short question
|
|
158
|
+
for ${candidateInfo?.candidateName} asking what interests them most about this role.
|
|
159
|
+
Resume: ${candidateInfo?.resumeText}`;
|
|
160
|
+
const res = await recruiter.generate(prompt);
|
|
161
|
+
return { question: res?.text?.trim() || "" };
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
</StepItem>
|
|
167
|
+
|
|
168
|
+
<StepItem>
|
|
169
|
+
|
|
170
|
+
You now combine the steps to implement branching logic based on the candidate's technical status. The workflow first gathers candidate data, then either asks about their specialty or about their role, depending on `isTechnical`. This is done by chaining `gatherCandidateInfo` with `askAboutSpecialty` and `askAboutRole`.
|
|
171
|
+
|
|
172
|
+
To the existing `src/mastra/workflows/candidate-workflow.ts` file change the `candidateWorkflow` like so:
|
|
173
|
+
|
|
174
|
+
```ts title="src/mastra/workflows/candidate-workflow.ts" copy {10-14}
|
|
175
|
+
export const candidateWorkflow = createWorkflow({
|
|
176
|
+
id: "candidate-workflow",
|
|
177
|
+
inputSchema: z.object({
|
|
178
|
+
resumeText: z.string(),
|
|
179
|
+
}),
|
|
180
|
+
outputSchema: z.object({
|
|
181
|
+
askAboutSpecialty: z.object({
|
|
182
|
+
question: z.string(),
|
|
183
|
+
}),
|
|
184
|
+
askAboutRole: z.object({
|
|
185
|
+
question: z.string(),
|
|
186
|
+
}),
|
|
187
|
+
}),
|
|
188
|
+
})
|
|
189
|
+
.then(gatherCandidateInfo)
|
|
190
|
+
.branch([
|
|
191
|
+
[async ({ inputData: { isTechnical } }) => isTechnical, askAboutSpecialty],
|
|
192
|
+
[async ({ inputData: { isTechnical } }) => !isTechnical, askAboutRole],
|
|
193
|
+
])
|
|
194
|
+
.commit();
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
</StepItem>
|
|
198
|
+
|
|
199
|
+
<StepItem>
|
|
200
|
+
|
|
201
|
+
In your `src/mastra/index.ts` file, register the workflow:
|
|
202
|
+
|
|
203
|
+
```ts copy title="src/mastra/index.ts" {2, 5}
|
|
204
|
+
import { Mastra } from "@mastra/core";
|
|
205
|
+
import { candidateWorkflow } from "./workflows/candidate-workflow";
|
|
206
|
+
|
|
207
|
+
export const mastra = new Mastra({
|
|
208
|
+
workflows: { candidateWorkflow },
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
</StepItem>
|
|
213
|
+
|
|
214
|
+
</Steps>
|
|
215
|
+
|
|
216
|
+
## Testing the Workflow
|
|
217
|
+
|
|
218
|
+
You can test your workflow inside [Studio](/docs/v1/getting-started/studio) by starting the development server:
|
|
219
|
+
|
|
220
|
+
```bash copy
|
|
221
|
+
mastra dev
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
In the sidebar, navigate to **Workflows** and select **candidate-workflow**. In the middle you'll see a graph view of your workflow and on the right sidebar the **Run** tab is selected by default. Inside this tab you can enter a resume text, for example:
|
|
225
|
+
|
|
226
|
+
```text copy
|
|
227
|
+
Knowledgeable Software Engineer with more than 10 years of experience in software development. Proven expertise in the design and development of software databases and optimization of user interfaces.
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
After entering the resume text, press the **Run** button. You should now see two status boxes (`GatherCandidateInfo` and `AskAboutSpecialty`) which contain the output of the workflow steps.
|
|
231
|
+
|
|
232
|
+
You can also test the workflow programmatically by calling [`.createRun()`](/reference/v1/workflows/workflow-methods/create-run) and [`.start()`](/reference/v1/workflows/run-methods/start). Create a new file `src/test-workflow.ts` and add the following:
|
|
233
|
+
|
|
234
|
+
```ts copy title="src/test-workflow.ts"
|
|
235
|
+
import { mastra } from "./mastra";
|
|
236
|
+
|
|
237
|
+
const run = await mastra.getWorkflow("candidateWorkflow").createRun();
|
|
238
|
+
|
|
239
|
+
const res = await run.start({
|
|
240
|
+
inputData: {
|
|
241
|
+
resumeText:
|
|
242
|
+
"Knowledgeable Software Engineer with more than 10 years of experience in software development. Proven expertise in the design and development of software databases and optimization of user interfaces.",
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
// Dump the complete workflow result (includes status, steps and result)
|
|
247
|
+
console.log(JSON.stringify(res, null, 2));
|
|
248
|
+
|
|
249
|
+
// Get the workflow output value
|
|
250
|
+
if (res.status === "success") {
|
|
251
|
+
const question =
|
|
252
|
+
res.result.askAboutRole?.question ?? res.result.askAboutSpecialty?.question;
|
|
253
|
+
|
|
254
|
+
console.log(`Output value: ${question}`);
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Now, run the workflow and get output in your terminal:
|
|
259
|
+
|
|
260
|
+
```bash copy
|
|
261
|
+
npx tsx src/test-workflow.ts
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
You've just built a workflow to parse a resume and decide which question to ask based on the candidate's technical abilities. Congrats and happy hacking!
|