@mastra/mcp-docs-server 1.0.0-beta.1 → 1.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/.docs/organized/changelogs/%40internal%2Fchangeset-cli.md +1 -15
  2. package/.docs/organized/changelogs/%40internal%2Fexternal-types.md +1 -7
  3. package/.docs/organized/changelogs/%40internal%2Fstorage-test-utils.md +201 -1
  4. package/.docs/organized/changelogs/%40internal%2Ftypes-builder.md +1 -55
  5. package/.docs/organized/changelogs/%40mastra%2Fagent-builder.md +201 -1
  6. package/.docs/organized/changelogs/%40mastra%2Fai-sdk.md +276 -76
  7. package/.docs/organized/changelogs/%40mastra%2Fastra.md +201 -1
  8. package/.docs/organized/changelogs/%40mastra%2Fauth.md +6 -0
  9. package/.docs/organized/changelogs/%40mastra%2Fchroma.md +201 -1
  10. package/.docs/organized/changelogs/%40mastra%2Fclickhouse.md +201 -1
  11. package/.docs/organized/changelogs/%40mastra%2Fclient-js.md +200 -0
  12. package/.docs/organized/changelogs/%40mastra%2Fcloudflare-d1.md +201 -1
  13. package/.docs/organized/changelogs/%40mastra%2Fcloudflare.md +201 -1
  14. package/.docs/organized/changelogs/%40mastra%2Fcodemod.md +26 -0
  15. package/.docs/organized/changelogs/%40mastra%2Fconvex.md +89 -0
  16. package/.docs/organized/changelogs/%40mastra%2Fcore.md +392 -192
  17. package/.docs/organized/changelogs/%40mastra%2Fcouchbase.md +201 -1
  18. package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloud.md +201 -1
  19. package/.docs/organized/changelogs/%40mastra%2Fdeployer-cloudflare.md +201 -1
  20. package/.docs/organized/changelogs/%40mastra%2Fdeployer-netlify.md +201 -1
  21. package/.docs/organized/changelogs/%40mastra%2Fdeployer-vercel.md +201 -1
  22. package/.docs/organized/changelogs/%40mastra%2Fdeployer.md +200 -0
  23. package/.docs/organized/changelogs/%40mastra%2Fduckdb.md +42 -0
  24. package/.docs/organized/changelogs/%40mastra%2Fdynamodb.md +201 -1
  25. package/.docs/organized/changelogs/%40mastra%2Felasticsearch.md +61 -0
  26. package/.docs/organized/changelogs/%40mastra%2Fevals.md +201 -1
  27. package/.docs/organized/changelogs/%40mastra%2Flance.md +201 -1
  28. package/.docs/organized/changelogs/%40mastra%2Flibsql.md +201 -1
  29. package/.docs/organized/changelogs/%40mastra%2Floggers.md +201 -1
  30. package/.docs/organized/changelogs/%40mastra%2Fmcp-docs-server.md +201 -1
  31. package/.docs/organized/changelogs/%40mastra%2Fmcp-registry-registry.md +201 -1
  32. package/.docs/organized/changelogs/%40mastra%2Fmcp.md +201 -1
  33. package/.docs/organized/changelogs/%40mastra%2Fmemory.md +201 -1
  34. package/.docs/organized/changelogs/%40mastra%2Fmongodb.md +201 -1
  35. package/.docs/organized/changelogs/%40mastra%2Fmssql.md +201 -1
  36. package/.docs/organized/changelogs/%40mastra%2Fopensearch.md +201 -1
  37. package/.docs/organized/changelogs/%40mastra%2Fpg.md +201 -1
  38. package/.docs/organized/changelogs/%40mastra%2Fpinecone.md +201 -1
  39. package/.docs/organized/changelogs/%40mastra%2Fplayground-ui.md +263 -63
  40. package/.docs/organized/changelogs/%40mastra%2Fqdrant.md +201 -1
  41. package/.docs/organized/changelogs/%40mastra%2Frag.md +201 -1
  42. package/.docs/organized/changelogs/%40mastra%2Freact.md +154 -1
  43. package/.docs/organized/changelogs/%40mastra%2Fs3vectors.md +18 -0
  44. package/.docs/organized/changelogs/%40mastra%2Fschema-compat.md +42 -0
  45. package/.docs/organized/changelogs/%40mastra%2Fserver.md +274 -74
  46. package/.docs/organized/changelogs/%40mastra%2Fturbopuffer.md +201 -1
  47. package/.docs/organized/changelogs/%40mastra%2Fupstash.md +201 -1
  48. package/.docs/organized/changelogs/%40mastra%2Fvectorize.md +201 -1
  49. package/.docs/organized/changelogs/%40mastra%2Fvoice-azure.md +201 -1
  50. package/.docs/organized/changelogs/%40mastra%2Fvoice-cloudflare.md +201 -1
  51. package/.docs/organized/changelogs/%40mastra%2Fvoice-deepgram.md +201 -1
  52. package/.docs/organized/changelogs/%40mastra%2Fvoice-elevenlabs.md +201 -1
  53. package/.docs/organized/changelogs/%40mastra%2Fvoice-gladia.md +92 -1
  54. package/.docs/organized/changelogs/%40mastra%2Fvoice-google-gemini-live.md +67 -1
  55. package/.docs/organized/changelogs/%40mastra%2Fvoice-google.md +201 -1
  56. package/.docs/organized/changelogs/%40mastra%2Fvoice-murf.md +201 -1
  57. package/.docs/organized/changelogs/%40mastra%2Fvoice-openai-realtime.md +201 -1
  58. package/.docs/organized/changelogs/%40mastra%2Fvoice-openai.md +201 -1
  59. package/.docs/organized/changelogs/%40mastra%2Fvoice-playai.md +201 -1
  60. package/.docs/organized/changelogs/%40mastra%2Fvoice-sarvam.md +201 -1
  61. package/.docs/organized/changelogs/%40mastra%2Fvoice-speechify.md +201 -1
  62. package/.docs/organized/changelogs/create-mastra.md +201 -1
  63. package/.docs/organized/changelogs/mastra.md +201 -1
  64. package/.docs/organized/code-examples/agui.md +1 -0
  65. package/.docs/organized/code-examples/ai-elements.md +2 -2
  66. package/.docs/organized/code-examples/ai-sdk-useChat.md +2 -2
  67. package/.docs/organized/code-examples/ai-sdk-v5.md +3 -2
  68. package/.docs/organized/code-examples/assistant-ui.md +2 -2
  69. package/.docs/organized/code-examples/bird-checker-with-express.md +1 -1
  70. package/.docs/organized/code-examples/bird-checker-with-nextjs-and-eval.md +2 -2
  71. package/.docs/organized/code-examples/bird-checker-with-nextjs.md +2 -2
  72. package/.docs/organized/code-examples/client-side-tools.md +1 -1
  73. package/.docs/organized/code-examples/crypto-chatbot.md +2 -2
  74. package/.docs/organized/code-examples/fireworks-r1.md +1 -1
  75. package/.docs/organized/code-examples/heads-up-game.md +1 -1
  76. package/.docs/organized/code-examples/mcp-configuration.md +0 -3
  77. package/.docs/organized/code-examples/mcp-server-adapters.md +720 -0
  78. package/.docs/organized/code-examples/memory-per-resource-example.md +1 -1
  79. package/.docs/organized/code-examples/memory-with-processors.md +1 -1
  80. package/.docs/organized/code-examples/openapi-spec-writer.md +1 -1
  81. package/.docs/organized/code-examples/processors-with-ai-sdk.md +14 -0
  82. package/.docs/organized/code-examples/quick-start.md +2 -2
  83. package/.docs/organized/code-examples/server-app-access.md +342 -0
  84. package/.docs/organized/code-examples/server-express-adapter.md +87 -0
  85. package/.docs/organized/code-examples/server-hono-adapter.md +85 -0
  86. package/.docs/organized/code-examples/stock-price-tool.md +1 -21
  87. package/.docs/organized/code-examples/workflow-ai-recruiter.md +1 -1
  88. package/.docs/organized/code-examples/workflow-with-inline-steps.md +1 -1
  89. package/.docs/organized/code-examples/workflow-with-memory.md +1 -1
  90. package/.docs/organized/code-examples/workflow-with-separate-steps.md +1 -1
  91. package/.docs/organized/code-examples/workflow-with-suspend-resume.md +1 -1
  92. package/.docs/raw/agents/adding-voice.mdx +56 -10
  93. package/.docs/raw/agents/agent-approval.mdx +189 -0
  94. package/.docs/raw/agents/agent-memory.mdx +1 -1
  95. package/.docs/raw/agents/guardrails.mdx +70 -30
  96. package/.docs/raw/agents/networks.mdx +3 -3
  97. package/.docs/raw/agents/overview.mdx +18 -167
  98. package/.docs/raw/agents/processors.mdx +430 -0
  99. package/.docs/raw/agents/structured-output.mdx +224 -0
  100. package/.docs/raw/agents/using-tools.mdx +14 -14
  101. package/.docs/raw/auth/auth0.mdx +1 -1
  102. package/.docs/raw/auth/clerk.mdx +1 -1
  103. package/.docs/raw/auth/firebase.mdx +1 -1
  104. package/.docs/raw/auth/index.mdx +1 -1
  105. package/.docs/raw/auth/jwt.mdx +1 -1
  106. package/.docs/raw/auth/supabase.mdx +1 -1
  107. package/.docs/raw/auth/workos.mdx +1 -1
  108. package/.docs/raw/community/contributing-templates.mdx +1 -1
  109. package/.docs/raw/community/discord.mdx +2 -2
  110. package/.docs/raw/community/licensing.mdx +1 -1
  111. package/.docs/raw/course/01-first-agent/05-running-playground.md +5 -5
  112. package/.docs/raw/course/01-first-agent/09-testing-your-agent.md +3 -3
  113. package/.docs/raw/course/01-first-agent/13-testing-your-tool.md +3 -3
  114. package/.docs/raw/course/01-first-agent/17-testing-memory.md +2 -2
  115. package/.docs/raw/course/04-workflows/07-using-playground.md +1 -1
  116. package/.docs/raw/deployment/{server-deployment.mdx → building-mastra.mdx} +4 -4
  117. package/.docs/raw/deployment/cloud-providers/amazon-ec2.mdx +2 -2
  118. package/.docs/raw/deployment/cloud-providers/aws-lambda.mdx +3 -3
  119. package/.docs/raw/deployment/cloud-providers/azure-app-services.mdx +2 -2
  120. package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/cloudflare-deployer.mdx +1 -1
  121. package/.docs/raw/deployment/cloud-providers/digital-ocean.mdx +2 -2
  122. package/.docs/raw/deployment/cloud-providers/index.mdx +26 -29
  123. package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/netlify-deployer.mdx +45 -14
  124. package/.docs/raw/deployment/{serverless-platforms → cloud-providers}/vercel-deployer.mdx +1 -1
  125. package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/dashboard.mdx +3 -3
  126. package/.docs/raw/deployment/mastra-cloud/observability.mdx +53 -0
  127. package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/overview.mdx +3 -3
  128. package/.docs/raw/{mastra-cloud → deployment/mastra-cloud}/setting-up.mdx +4 -4
  129. package/.docs/raw/deployment/monorepo.mdx +3 -3
  130. package/.docs/raw/deployment/overview.mdx +7 -7
  131. package/.docs/raw/deployment/web-framework.mdx +6 -6
  132. package/.docs/raw/evals/{off-the-shelf-scorers.mdx → built-in-scorers.mdx} +17 -15
  133. package/.docs/raw/evals/custom-scorers.mdx +4 -6
  134. package/.docs/raw/evals/overview.mdx +5 -6
  135. package/.docs/raw/evals/running-in-ci.mdx +2 -4
  136. package/.docs/raw/getting-started/{installation.mdx → manual-install.mdx} +6 -80
  137. package/.docs/raw/getting-started/mcp-docs-server.mdx +63 -6
  138. package/.docs/raw/getting-started/project-structure.mdx +2 -2
  139. package/.docs/raw/getting-started/start.mdx +72 -0
  140. package/.docs/raw/getting-started/studio.mdx +32 -7
  141. package/.docs/raw/guides/agent-frameworks/ai-sdk.mdx +147 -0
  142. package/.docs/raw/guides/build-your-ui/ai-sdk-ui.mdx +627 -0
  143. package/.docs/raw/{frameworks/agentic-uis → guides/build-your-ui}/assistant-ui.mdx +71 -19
  144. package/.docs/raw/guides/build-your-ui/copilotkit.mdx +206 -0
  145. package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/astro.mdx +24 -26
  146. package/.docs/raw/{frameworks/servers → guides/getting-started}/express.mdx +4 -5
  147. package/.docs/raw/guides/{quickstarts/nextjs.mdx → getting-started/next-js.mdx} +26 -25
  148. package/.docs/raw/guides/getting-started/quickstart.mdx +97 -0
  149. package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/sveltekit.mdx +24 -26
  150. package/.docs/raw/{frameworks/web-frameworks → guides/getting-started}/vite-react.mdx +7 -7
  151. package/.docs/raw/guides/guide/ai-recruiter.mdx +2 -3
  152. package/.docs/raw/guides/guide/chef-michel.mdx +2 -3
  153. package/.docs/raw/guides/guide/notes-mcp-server.mdx +2 -2
  154. package/.docs/raw/guides/guide/research-assistant.mdx +7 -8
  155. package/.docs/raw/guides/guide/stock-agent.mdx +4 -6
  156. package/.docs/raw/guides/guide/web-search.mdx +12 -10
  157. package/.docs/raw/guides/guide/whatsapp-chat-bot.mdx +421 -0
  158. package/.docs/raw/guides/index.mdx +3 -35
  159. package/.docs/raw/guides/migrations/agentnetwork.mdx +4 -4
  160. package/.docs/raw/guides/migrations/ai-sdk-v4-to-v5.mdx +119 -0
  161. package/.docs/raw/guides/migrations/upgrade-to-v1/agent.mdx +121 -1
  162. package/.docs/raw/guides/migrations/upgrade-to-v1/client.mdx +42 -2
  163. package/.docs/raw/guides/migrations/upgrade-to-v1/evals.mdx +31 -1
  164. package/.docs/raw/guides/migrations/upgrade-to-v1/mastra.mdx +27 -3
  165. package/.docs/raw/guides/migrations/upgrade-to-v1/mcp.mdx +1 -1
  166. package/.docs/raw/guides/migrations/upgrade-to-v1/memory.mdx +28 -0
  167. package/.docs/raw/guides/migrations/upgrade-to-v1/overview.mdx +25 -3
  168. package/.docs/raw/guides/migrations/upgrade-to-v1/storage.mdx +80 -0
  169. package/.docs/raw/guides/migrations/upgrade-to-v1/tools.mdx +68 -3
  170. package/.docs/raw/guides/migrations/upgrade-to-v1/vectors.mdx +25 -1
  171. package/.docs/raw/guides/migrations/upgrade-to-v1/workflows.mdx +174 -1
  172. package/.docs/raw/guides/migrations/vnext-to-standard-apis.mdx +2 -2
  173. package/.docs/raw/index.mdx +3 -3
  174. package/.docs/raw/mcp/overview.mdx +358 -0
  175. package/.docs/raw/mcp/publishing-mcp-server.mdx +139 -0
  176. package/.docs/raw/memory/conversation-history.mdx +1 -1
  177. package/.docs/raw/memory/memory-processors.mdx +265 -80
  178. package/.docs/raw/memory/overview.mdx +2 -2
  179. package/.docs/raw/memory/semantic-recall.mdx +9 -9
  180. package/.docs/raw/memory/storage/memory-with-libsql.mdx +3 -8
  181. package/.docs/raw/memory/storage/memory-with-mongodb.mdx +150 -0
  182. package/.docs/raw/memory/storage/memory-with-pg.mdx +3 -8
  183. package/.docs/raw/memory/storage/memory-with-upstash.mdx +3 -8
  184. package/.docs/raw/memory/threads-and-resources.mdx +4 -4
  185. package/.docs/raw/memory/working-memory.mdx +16 -8
  186. package/.docs/raw/{logging.mdx → observability/logging.mdx} +7 -7
  187. package/.docs/raw/observability/overview.mdx +3 -4
  188. package/.docs/raw/observability/tracing/bridges/otel.mdx +200 -0
  189. package/.docs/raw/observability/tracing/exporters/arize.mdx +37 -1
  190. package/.docs/raw/observability/tracing/exporters/braintrust.mdx +20 -1
  191. package/.docs/raw/observability/tracing/exporters/cloud.mdx +2 -2
  192. package/.docs/raw/observability/tracing/exporters/default.mdx +1 -1
  193. package/.docs/raw/observability/tracing/exporters/langfuse.mdx +84 -1
  194. package/.docs/raw/observability/tracing/exporters/langsmith.mdx +13 -1
  195. package/.docs/raw/observability/tracing/exporters/otel.mdx +123 -25
  196. package/.docs/raw/observability/tracing/exporters/posthog.mdx +127 -0
  197. package/.docs/raw/observability/tracing/overview.mdx +80 -9
  198. package/.docs/raw/observability/tracing/processors/sensitive-data-filter.mdx +1 -2
  199. package/.docs/raw/rag/chunking-and-embedding.mdx +16 -17
  200. package/.docs/raw/rag/overview.mdx +4 -3
  201. package/.docs/raw/rag/retrieval.mdx +44 -39
  202. package/.docs/raw/rag/vector-databases.mdx +94 -3
  203. package/.docs/raw/reference/agents/agent.mdx +19 -16
  204. package/.docs/raw/reference/agents/generate.mdx +67 -99
  205. package/.docs/raw/reference/agents/generateLegacy.mdx +3 -3
  206. package/.docs/raw/reference/agents/getDefaultGenerateOptions.mdx +1 -1
  207. package/.docs/raw/reference/agents/getDefaultOptions.mdx +1 -1
  208. package/.docs/raw/reference/agents/getDefaultStreamOptions.mdx +1 -1
  209. package/.docs/raw/reference/agents/getDescription.mdx +1 -1
  210. package/.docs/raw/reference/agents/getInstructions.mdx +1 -1
  211. package/.docs/raw/reference/agents/getLLM.mdx +2 -2
  212. package/.docs/raw/reference/agents/getMemory.mdx +1 -1
  213. package/.docs/raw/reference/agents/getModel.mdx +1 -1
  214. package/.docs/raw/reference/agents/getTools.mdx +69 -0
  215. package/.docs/raw/reference/agents/getVoice.mdx +1 -1
  216. package/.docs/raw/reference/agents/listAgents.mdx +1 -1
  217. package/.docs/raw/reference/agents/listScorers.mdx +1 -1
  218. package/.docs/raw/reference/agents/listTools.mdx +2 -2
  219. package/.docs/raw/reference/agents/listWorkflows.mdx +1 -1
  220. package/.docs/raw/reference/agents/network.mdx +33 -72
  221. package/.docs/raw/reference/ai-sdk/chat-route.mdx +127 -0
  222. package/.docs/raw/reference/ai-sdk/handle-chat-stream.mdx +117 -0
  223. package/.docs/raw/reference/ai-sdk/handle-network-stream.mdx +64 -0
  224. package/.docs/raw/reference/ai-sdk/handle-workflow-stream.mdx +116 -0
  225. package/.docs/raw/reference/ai-sdk/network-route.mdx +99 -0
  226. package/.docs/raw/reference/ai-sdk/to-ai-sdk-stream.mdx +289 -0
  227. package/.docs/raw/reference/ai-sdk/with-mastra.mdx +119 -0
  228. package/.docs/raw/reference/ai-sdk/workflow-route.mdx +110 -0
  229. package/.docs/raw/reference/auth/auth0.mdx +1 -1
  230. package/.docs/raw/reference/auth/clerk.mdx +1 -1
  231. package/.docs/raw/reference/auth/firebase.mdx +1 -1
  232. package/.docs/raw/reference/auth/jwt.mdx +1 -1
  233. package/.docs/raw/reference/auth/supabase.mdx +1 -1
  234. package/.docs/raw/reference/auth/workos.mdx +1 -1
  235. package/.docs/raw/reference/cli/create-mastra.mdx +1 -1
  236. package/.docs/raw/reference/cli/mastra.mdx +19 -6
  237. package/.docs/raw/reference/client-js/agents.mdx +252 -68
  238. package/.docs/raw/reference/client-js/error-handling.mdx +1 -1
  239. package/.docs/raw/reference/client-js/logs.mdx +1 -1
  240. package/.docs/raw/reference/client-js/mastra-client.mdx +4 -4
  241. package/.docs/raw/reference/client-js/memory.mdx +48 -2
  242. package/.docs/raw/reference/client-js/observability.mdx +1 -1
  243. package/.docs/raw/reference/client-js/telemetry.mdx +1 -1
  244. package/.docs/raw/reference/client-js/tools.mdx +1 -1
  245. package/.docs/raw/reference/client-js/vectors.mdx +1 -1
  246. package/.docs/raw/reference/client-js/workflows.mdx +93 -64
  247. package/.docs/raw/reference/core/addGateway.mdx +59 -0
  248. package/.docs/raw/reference/core/getAgent.mdx +1 -1
  249. package/.docs/raw/reference/core/getAgentById.mdx +1 -1
  250. package/.docs/raw/reference/core/getDeployer.mdx +1 -1
  251. package/.docs/raw/reference/core/getGateway.mdx +59 -0
  252. package/.docs/raw/reference/core/getGatewayById.mdx +62 -0
  253. package/.docs/raw/reference/core/getLogger.mdx +2 -2
  254. package/.docs/raw/reference/core/getMCPServer.mdx +2 -2
  255. package/.docs/raw/reference/core/getMCPServerById.mdx +2 -2
  256. package/.docs/raw/reference/core/getMemory.mdx +73 -0
  257. package/.docs/raw/reference/core/getScorer.mdx +1 -1
  258. package/.docs/raw/reference/core/getScorerById.mdx +1 -1
  259. package/.docs/raw/reference/core/getServer.mdx +3 -3
  260. package/.docs/raw/reference/core/getStorage.mdx +1 -1
  261. package/.docs/raw/reference/core/getStoredAgentById.mdx +183 -0
  262. package/.docs/raw/reference/core/getTelemetry.mdx +1 -1
  263. package/.docs/raw/reference/core/getVector.mdx +1 -1
  264. package/.docs/raw/reference/core/getWorkflow.mdx +1 -1
  265. package/.docs/raw/reference/core/listAgents.mdx +1 -1
  266. package/.docs/raw/reference/core/listGateways.mdx +53 -0
  267. package/.docs/raw/reference/core/listLogs.mdx +2 -2
  268. package/.docs/raw/reference/core/listLogsByRunId.mdx +2 -2
  269. package/.docs/raw/reference/core/listMCPServers.mdx +2 -2
  270. package/.docs/raw/reference/core/listMemory.mdx +70 -0
  271. package/.docs/raw/reference/core/listScorers.mdx +1 -1
  272. package/.docs/raw/reference/core/listStoredAgents.mdx +151 -0
  273. package/.docs/raw/reference/core/listVectors.mdx +1 -1
  274. package/.docs/raw/reference/core/listWorkflows.mdx +1 -1
  275. package/.docs/raw/reference/core/mastra-class.mdx +17 -1
  276. package/.docs/raw/reference/core/mastra-model-gateway.mdx +227 -0
  277. package/.docs/raw/reference/core/setLogger.mdx +2 -2
  278. package/.docs/raw/reference/core/setStorage.mdx +1 -1
  279. package/.docs/raw/reference/core/setTelemetry.mdx +2 -2
  280. package/.docs/raw/reference/deployer/cloudflare.mdx +1 -1
  281. package/.docs/raw/reference/deployer/deployer.mdx +1 -1
  282. package/.docs/raw/reference/deployer/netlify.mdx +2 -3
  283. package/.docs/raw/reference/deployer/vercel.mdx +1 -1
  284. package/.docs/raw/reference/evals/answer-relevancy.mdx +29 -99
  285. package/.docs/raw/reference/evals/answer-similarity.mdx +13 -259
  286. package/.docs/raw/reference/evals/bias.mdx +30 -88
  287. package/.docs/raw/reference/evals/completeness.mdx +32 -91
  288. package/.docs/raw/reference/evals/content-similarity.mdx +29 -89
  289. package/.docs/raw/reference/evals/context-precision.mdx +29 -131
  290. package/.docs/raw/reference/evals/context-relevance.mdx +12 -12
  291. package/.docs/raw/reference/evals/create-scorer.mdx +1 -1
  292. package/.docs/raw/reference/evals/faithfulness.mdx +29 -102
  293. package/.docs/raw/reference/evals/hallucination.mdx +29 -104
  294. package/.docs/raw/reference/evals/keyword-coverage.mdx +29 -108
  295. package/.docs/raw/reference/evals/mastra-scorer.mdx +1 -1
  296. package/.docs/raw/reference/evals/noise-sensitivity.mdx +12 -12
  297. package/.docs/raw/reference/evals/prompt-alignment.mdx +16 -16
  298. package/.docs/raw/reference/evals/run-evals.mdx +1 -1
  299. package/.docs/raw/reference/evals/scorer-utils.mdx +362 -0
  300. package/.docs/raw/reference/evals/textual-difference.mdx +28 -101
  301. package/.docs/raw/reference/evals/tone-consistency.mdx +26 -99
  302. package/.docs/raw/reference/evals/tool-call-accuracy.mdx +8 -8
  303. package/.docs/raw/reference/evals/toxicity.mdx +30 -93
  304. package/.docs/raw/reference/index.mdx +1 -0
  305. package/.docs/raw/reference/logging/pino-logger.mdx +2 -2
  306. package/.docs/raw/reference/memory/createThread.mdx +1 -1
  307. package/.docs/raw/reference/memory/deleteMessages.mdx +1 -1
  308. package/.docs/raw/reference/memory/getThreadById.mdx +1 -1
  309. package/.docs/raw/reference/memory/listThreadsByResourceId.mdx +1 -1
  310. package/.docs/raw/reference/memory/memory-class.mdx +6 -8
  311. package/.docs/raw/reference/memory/query.mdx +1 -1
  312. package/.docs/raw/reference/memory/recall.mdx +1 -1
  313. package/.docs/raw/reference/observability/tracing/bridges/otel.mdx +177 -0
  314. package/.docs/raw/reference/observability/tracing/configuration.mdx +1 -5
  315. package/.docs/raw/reference/observability/tracing/exporters/arize.mdx +30 -1
  316. package/.docs/raw/reference/observability/tracing/exporters/braintrust.mdx +1 -1
  317. package/.docs/raw/reference/observability/tracing/exporters/cloud-exporter.mdx +1 -1
  318. package/.docs/raw/reference/observability/tracing/exporters/console-exporter.mdx +1 -1
  319. package/.docs/raw/reference/observability/tracing/exporters/default-exporter.mdx +1 -1
  320. package/.docs/raw/reference/observability/tracing/exporters/langfuse.mdx +44 -1
  321. package/.docs/raw/reference/observability/tracing/exporters/langsmith.mdx +18 -2
  322. package/.docs/raw/reference/observability/tracing/exporters/otel.mdx +34 -44
  323. package/.docs/raw/reference/observability/tracing/exporters/posthog.mdx +132 -0
  324. package/.docs/raw/reference/observability/tracing/instances.mdx +1 -5
  325. package/.docs/raw/reference/observability/tracing/interfaces.mdx +30 -5
  326. package/.docs/raw/reference/observability/tracing/processors/sensitive-data-filter.mdx +1 -1
  327. package/.docs/raw/reference/observability/tracing/spans.mdx +1 -5
  328. package/.docs/raw/reference/processors/batch-parts-processor.mdx +2 -2
  329. package/.docs/raw/reference/processors/language-detector.mdx +11 -4
  330. package/.docs/raw/reference/processors/message-history-processor.mdx +131 -0
  331. package/.docs/raw/reference/processors/moderation-processor.mdx +13 -6
  332. package/.docs/raw/reference/processors/pii-detector.mdx +13 -6
  333. package/.docs/raw/reference/processors/processor-interface.mdx +803 -0
  334. package/.docs/raw/reference/processors/prompt-injection-detector.mdx +11 -4
  335. package/.docs/raw/reference/processors/semantic-recall-processor.mdx +197 -0
  336. package/.docs/raw/reference/processors/system-prompt-scrubber.mdx +4 -5
  337. package/.docs/raw/reference/processors/token-limiter-processor.mdx +3 -3
  338. package/.docs/raw/reference/processors/tool-call-filter.mdx +125 -0
  339. package/.docs/raw/reference/processors/unicode-normalizer.mdx +2 -2
  340. package/.docs/raw/reference/processors/working-memory-processor.mdx +221 -0
  341. package/.docs/raw/reference/rag/chunk.mdx +1 -1
  342. package/.docs/raw/reference/rag/database-config.mdx +1 -1
  343. package/.docs/raw/reference/rag/document.mdx +1 -1
  344. package/.docs/raw/reference/rag/embeddings.mdx +6 -6
  345. package/.docs/raw/reference/rag/extract-params.mdx +1 -1
  346. package/.docs/raw/reference/rag/graph-rag.mdx +1 -1
  347. package/.docs/raw/reference/rag/metadata-filters.mdx +1 -1
  348. package/.docs/raw/reference/rag/rerank.mdx +2 -3
  349. package/.docs/raw/reference/rag/rerankWithScorer.mdx +1 -2
  350. package/.docs/raw/reference/server/create-route.mdx +328 -0
  351. package/.docs/raw/reference/server/express-adapter.mdx +260 -0
  352. package/.docs/raw/reference/server/hono-adapter.mdx +242 -0
  353. package/.docs/raw/reference/server/mastra-server.mdx +345 -0
  354. package/.docs/raw/reference/server/routes.mdx +250 -0
  355. package/.docs/raw/reference/storage/cloudflare-d1.mdx +38 -1
  356. package/.docs/raw/reference/storage/cloudflare.mdx +1 -1
  357. package/.docs/raw/reference/storage/convex.mdx +164 -0
  358. package/.docs/raw/reference/storage/dynamodb.mdx +1 -1
  359. package/.docs/raw/reference/storage/lance.mdx +34 -1
  360. package/.docs/raw/reference/storage/libsql.mdx +38 -1
  361. package/.docs/raw/reference/storage/mongodb.mdx +40 -1
  362. package/.docs/raw/reference/storage/mssql.mdx +38 -1
  363. package/.docs/raw/reference/storage/postgresql.mdx +38 -1
  364. package/.docs/raw/reference/storage/upstash.mdx +1 -1
  365. package/.docs/raw/reference/streaming/ChunkType.mdx +25 -4
  366. package/.docs/raw/reference/streaming/agents/MastraModelOutput.mdx +1 -1
  367. package/.docs/raw/reference/streaming/agents/stream.mdx +84 -124
  368. package/.docs/raw/reference/streaming/agents/streamLegacy.mdx +1 -1
  369. package/.docs/raw/reference/streaming/workflows/observeStream.mdx +8 -10
  370. package/.docs/raw/reference/streaming/workflows/{resumeStreamVNext.mdx → resumeStream.mdx} +51 -11
  371. package/.docs/raw/reference/streaming/workflows/stream.mdx +84 -25
  372. package/.docs/raw/reference/streaming/workflows/timeTravelStream.mdx +170 -0
  373. package/.docs/raw/reference/templates/overview.mdx +2 -5
  374. package/.docs/raw/reference/tools/client.mdx +2 -3
  375. package/.docs/raw/reference/tools/create-tool.mdx +135 -4
  376. package/.docs/raw/reference/tools/document-chunker-tool.mdx +1 -1
  377. package/.docs/raw/reference/tools/graph-rag-tool.mdx +7 -7
  378. package/.docs/raw/reference/tools/mcp-client.mdx +131 -23
  379. package/.docs/raw/reference/tools/mcp-server.mdx +56 -8
  380. package/.docs/raw/reference/tools/vector-query-tool.mdx +16 -17
  381. package/.docs/raw/reference/vectors/astra.mdx +1 -1
  382. package/.docs/raw/reference/vectors/chroma.mdx +82 -2
  383. package/.docs/raw/reference/vectors/convex.mdx +429 -0
  384. package/.docs/raw/reference/vectors/couchbase.mdx +25 -18
  385. package/.docs/raw/reference/vectors/duckdb.mdx +462 -0
  386. package/.docs/raw/reference/vectors/elasticsearch.mdx +310 -0
  387. package/.docs/raw/reference/vectors/lance.mdx +39 -23
  388. package/.docs/raw/reference/vectors/libsql.mdx +36 -3
  389. package/.docs/raw/reference/vectors/mongodb.mdx +36 -3
  390. package/.docs/raw/reference/vectors/opensearch.mdx +38 -17
  391. package/.docs/raw/reference/vectors/pg.mdx +44 -37
  392. package/.docs/raw/reference/vectors/pinecone.mdx +70 -3
  393. package/.docs/raw/reference/vectors/qdrant.mdx +37 -2
  394. package/.docs/raw/reference/vectors/s3vectors.mdx +1 -1
  395. package/.docs/raw/reference/vectors/turbopuffer.mdx +75 -1
  396. package/.docs/raw/reference/vectors/upstash.mdx +1 -1
  397. package/.docs/raw/reference/vectors/vectorize.mdx +1 -1
  398. package/.docs/raw/reference/voice/azure.mdx +96 -81
  399. package/.docs/raw/reference/voice/cloudflare.mdx +1 -1
  400. package/.docs/raw/reference/voice/composite-voice.mdx +72 -29
  401. package/.docs/raw/reference/voice/deepgram.mdx +1 -1
  402. package/.docs/raw/reference/voice/elevenlabs.mdx +1 -1
  403. package/.docs/raw/reference/voice/google-gemini-live.mdx +1 -1
  404. package/.docs/raw/reference/voice/google.mdx +160 -21
  405. package/.docs/raw/reference/voice/mastra-voice.mdx +1 -1
  406. package/.docs/raw/reference/voice/murf.mdx +1 -1
  407. package/.docs/raw/reference/voice/openai-realtime.mdx +3 -3
  408. package/.docs/raw/reference/voice/openai.mdx +1 -1
  409. package/.docs/raw/reference/voice/playai.mdx +1 -1
  410. package/.docs/raw/reference/voice/sarvam.mdx +1 -1
  411. package/.docs/raw/reference/voice/speechify.mdx +1 -1
  412. package/.docs/raw/reference/voice/voice.addInstructions.mdx +3 -4
  413. package/.docs/raw/reference/voice/voice.addTools.mdx +2 -2
  414. package/.docs/raw/reference/voice/voice.answer.mdx +2 -2
  415. package/.docs/raw/reference/voice/voice.close.mdx +2 -2
  416. package/.docs/raw/reference/voice/voice.connect.mdx +2 -2
  417. package/.docs/raw/reference/voice/voice.events.mdx +1 -1
  418. package/.docs/raw/reference/voice/voice.getSpeakers.mdx +1 -1
  419. package/.docs/raw/reference/voice/voice.listen.mdx +87 -53
  420. package/.docs/raw/reference/voice/voice.off.mdx +2 -2
  421. package/.docs/raw/reference/voice/voice.on.mdx +2 -2
  422. package/.docs/raw/reference/voice/voice.send.mdx +2 -2
  423. package/.docs/raw/reference/voice/voice.speak.mdx +76 -41
  424. package/.docs/raw/reference/voice/voice.updateConfig.mdx +2 -2
  425. package/.docs/raw/reference/workflows/run-methods/cancel.mdx +1 -1
  426. package/.docs/raw/reference/workflows/run-methods/restart.mdx +142 -0
  427. package/.docs/raw/reference/workflows/run-methods/resume.mdx +45 -1
  428. package/.docs/raw/reference/workflows/run-methods/start.mdx +48 -4
  429. package/.docs/raw/reference/workflows/run-methods/timeTravel.mdx +310 -0
  430. package/.docs/raw/reference/workflows/run.mdx +28 -6
  431. package/.docs/raw/reference/workflows/step.mdx +65 -1
  432. package/.docs/raw/reference/workflows/workflow-methods/branch.mdx +1 -1
  433. package/.docs/raw/reference/workflows/workflow-methods/commit.mdx +1 -1
  434. package/.docs/raw/reference/workflows/workflow-methods/create-run.mdx +1 -1
  435. package/.docs/raw/reference/workflows/workflow-methods/dountil.mdx +1 -1
  436. package/.docs/raw/reference/workflows/workflow-methods/dowhile.mdx +1 -1
  437. package/.docs/raw/reference/workflows/workflow-methods/foreach.mdx +69 -4
  438. package/.docs/raw/reference/workflows/workflow-methods/map.mdx +1 -1
  439. package/.docs/raw/reference/workflows/workflow-methods/parallel.mdx +1 -1
  440. package/.docs/raw/reference/workflows/workflow-methods/sendEvent.mdx +1 -1
  441. package/.docs/raw/reference/workflows/workflow-methods/sleep.mdx +1 -1
  442. package/.docs/raw/reference/workflows/workflow-methods/sleepUntil.mdx +1 -1
  443. package/.docs/raw/reference/workflows/workflow-methods/then.mdx +1 -1
  444. package/.docs/raw/reference/workflows/workflow-methods/waitForEvent.mdx +1 -1
  445. package/.docs/raw/reference/workflows/workflow.mdx +44 -2
  446. package/.docs/raw/server-db/custom-adapters.mdx +386 -0
  447. package/.docs/raw/server-db/custom-api-routes.mdx +6 -6
  448. package/.docs/raw/server-db/mastra-client.mdx +3 -4
  449. package/.docs/raw/server-db/{production-server.mdx → mastra-server.mdx} +22 -12
  450. package/.docs/raw/server-db/middleware.mdx +31 -31
  451. package/.docs/raw/server-db/request-context.mdx +3 -4
  452. package/.docs/raw/server-db/server-adapters.mdx +312 -0
  453. package/.docs/raw/server-db/storage.mdx +12 -1
  454. package/.docs/raw/streaming/events.mdx +1 -1
  455. package/.docs/raw/streaming/overview.mdx +27 -16
  456. package/.docs/raw/streaming/tool-streaming.mdx +58 -19
  457. package/.docs/raw/streaming/workflow-streaming.mdx +6 -12
  458. package/.docs/raw/tools-mcp/advanced-usage.mdx +2 -3
  459. package/.docs/raw/tools-mcp/mcp-overview.mdx +4 -6
  460. package/.docs/raw/tools-mcp/overview.mdx +1 -1
  461. package/.docs/raw/voice/overview.mdx +88 -41
  462. package/.docs/raw/voice/speech-to-speech.mdx +5 -5
  463. package/.docs/raw/voice/speech-to-text.mdx +2 -3
  464. package/.docs/raw/voice/text-to-speech.mdx +2 -3
  465. package/.docs/raw/workflows/agents-and-tools.mdx +43 -5
  466. package/.docs/raw/workflows/control-flow.mdx +534 -3
  467. package/.docs/raw/workflows/error-handling.mdx +5 -4
  468. package/.docs/raw/workflows/human-in-the-loop.mdx +160 -213
  469. package/.docs/raw/workflows/inngest-workflow.mdx +1 -1
  470. package/.docs/raw/workflows/input-data-mapping.mdx +1 -1
  471. package/.docs/raw/workflows/overview.mdx +67 -47
  472. package/.docs/raw/workflows/snapshots.mdx +5 -3
  473. package/.docs/raw/workflows/suspend-and-resume.mdx +121 -204
  474. package/.docs/raw/workflows/time-travel.mdx +313 -0
  475. package/.docs/raw/workflows/workflow-state.mdx +190 -0
  476. package/CHANGELOG.md +88 -0
  477. package/dist/{chunk-5NJC7NRO.js → chunk-4CM2BQNP.js} +24 -4
  478. package/dist/prepare-docs/package-changes.d.ts.map +1 -1
  479. package/dist/prepare-docs/prepare.js +1 -1
  480. package/dist/stdio.js +17 -19
  481. package/package.json +10 -14
  482. package/.docs/raw/deployment/serverless-platforms/index.mdx +0 -58
  483. package/.docs/raw/frameworks/agentic-uis/ai-sdk.mdx +0 -688
  484. package/.docs/raw/frameworks/agentic-uis/cedar-os.mdx +0 -123
  485. package/.docs/raw/frameworks/agentic-uis/copilotkit.mdx +0 -382
  486. package/.docs/raw/frameworks/agentic-uis/openrouter.mdx +0 -179
  487. package/.docs/raw/frameworks/web-frameworks/next-js.mdx +0 -379
  488. package/.docs/raw/getting-started/templates.mdx +0 -73
  489. package/.docs/raw/mastra-cloud/observability.mdx +0 -51
  490. package/.docs/raw/reference/streaming/workflows/observeStreamVNext.mdx +0 -47
  491. package/.docs/raw/reference/streaming/workflows/streamVNext.mdx +0 -153
@@ -0,0 +1,720 @@
1
+ ### package.json
2
+ ```json
3
+ {
4
+ "name": "examples-mcp-server-adapters",
5
+ "dependencies": {
6
+ "@mastra/core": "latest",
7
+ "@mastra/mcp": "latest",
8
+ "@mastra/hono": "latest",
9
+ "@mastra/express": "latest",
10
+ "@mastra/auth": "latest",
11
+ "@mastra/auth-supabase": "latest",
12
+ "@mastra/auth-firebase": "latest",
13
+ "@mastra/auth-auth0": "latest",
14
+ "@mastra/auth-workos": "latest",
15
+ "@mastra/auth-clerk": "latest",
16
+ "hono": "^4.10.4",
17
+ "@hono/node-server": "^1.19.6",
18
+ "express": "^5.1.0",
19
+ "mastra": "latest",
20
+ "zod": "^3.25.76"
21
+ },
22
+ "devDependencies": {
23
+ "@types/express": "^5.0.5",
24
+ "@types/node": "22.13.17",
25
+ "tsx": "^4.19.3",
26
+ "typescript": "^5.8.3"
27
+ }
28
+ }
29
+ ```
30
+
31
+ ### express-server.ts
32
+ ```typescript
33
+ import { MastraServer } from '@mastra/express';
34
+ import express from 'express';
35
+
36
+ import { mastra } from './mastra';
37
+
38
+ const PORT = 3002;
39
+
40
+ // Create Express app
41
+ const app = express();
42
+
43
+ // Add JSON body parser middleware
44
+ // This tests that MCP endpoints work correctly with express.json() middleware
45
+ app.use(express.json());
46
+
47
+ // Add a simple health check endpoint
48
+ app.get('/', (req, res) => {
49
+ res.json({ status: 'ok', server: 'express', message: 'Express MCP Server is running' });
50
+ });
51
+
52
+ // Create Mastra server adapter
53
+ const adapter = new MastraServer({
54
+ app,
55
+ mastra,
56
+ });
57
+
58
+ // Initialize all routes including MCP endpoints
59
+ adapter.init();
60
+
61
+ // Start the server
62
+ app.listen(PORT, () => {
63
+ console.log(`Express MCP Server running on port ${PORT}`);
64
+ });
65
+
66
+ ```
67
+
68
+ ### hono-server.ts
69
+ ```typescript
70
+ import { serve } from '@hono/node-server';
71
+ import { HonoBindings, HonoVariables, MastraServer } from '@mastra/hono';
72
+ import { Hono } from 'hono';
73
+
74
+ import { mastra } from './mastra';
75
+
76
+ const PORT = 3001;
77
+
78
+ // Create Hono app
79
+ const app = new Hono<{ Bindings: HonoBindings; Variables: HonoVariables }>();
80
+
81
+ // Add a simple health check endpoint
82
+ app.get('/', c => c.json({ status: 'ok', server: 'hono', message: 'Hono MCP Server is running' }));
83
+
84
+ // Create Mastra server adapter
85
+ const adapter = new MastraServer({
86
+ app,
87
+ mastra,
88
+ });
89
+
90
+ // Initialize all routes including MCP endpoints
91
+ adapter.init();
92
+
93
+ // Start the server
94
+ console.log(`Hono MCP Server running on port ${PORT}`);
95
+ serve({
96
+ fetch: app.fetch,
97
+ port: PORT,
98
+ });
99
+
100
+ ```
101
+
102
+ ### mastra/auth/index.ts
103
+ ```typescript
104
+ // Import auth providers
105
+ import { MastraAuthFirebase } from '@mastra/auth-firebase';
106
+ import { MastraAuthSupabase } from '@mastra/auth-supabase';
107
+ import { MastraAuthAuth0 } from '@mastra/auth-auth0';
108
+ import { MastraAuthWorkos } from '@mastra/auth-workos';
109
+ import { MastraAuthClerk } from '@mastra/auth-clerk';
110
+ import { MastraJwtAuth } from '@mastra/auth';
111
+
112
+ // Get the configured auth provider based on environment
113
+ export function getAuthProvider() {
114
+ const provider = process.env.AUTH_PROVIDER?.toLowerCase();
115
+
116
+ switch (provider) {
117
+ case 'auth0':
118
+ return new MastraAuthAuth0();
119
+ case 'firebase':
120
+ return new MastraAuthFirebase();
121
+ case 'supabase':
122
+ return new MastraAuthSupabase();
123
+ case 'workos':
124
+ return new MastraAuthWorkos();
125
+ case 'clerk':
126
+ return new MastraAuthClerk();
127
+ case 'jwt':
128
+ default:
129
+ return new MastraJwtAuth();
130
+ }
131
+ }
132
+
133
+ export const authConfig = getAuthProvider();
134
+
135
+ ```
136
+
137
+ ### mastra/index.ts
138
+ ```typescript
139
+ import { Mastra } from '@mastra/core/mastra';
140
+
141
+ import { mainMcpServer, secondaryMcpServer } from './mcp-servers';
142
+ import { authConfig } from './auth';
143
+
144
+ /**
145
+ * Create Mastra instance with MCP servers
146
+ */
147
+ export const mastra = new Mastra({
148
+ mcpServers: {
149
+ 'main-mcp': mainMcpServer,
150
+ 'secondary-mcp': secondaryMcpServer,
151
+ },
152
+ server: {
153
+ auth: authConfig,
154
+ },
155
+ });
156
+
157
+ ```
158
+
159
+ ### mastra/mcp-servers/index.ts
160
+ ```typescript
161
+ import { MCPServer } from '@mastra/mcp';
162
+
163
+ import { calculatorTool, echoTool, weatherTool } from '../tools';
164
+
165
+ /**
166
+ * Main MCP server with all tools
167
+ */
168
+ export const mainMcpServer = new MCPServer({
169
+ name: 'main-server',
170
+ version: '1.0.0',
171
+ description: 'Main MCP server with weather, calculator, and echo tools',
172
+ tools: {
173
+ getWeather: weatherTool,
174
+ calculate: calculatorTool,
175
+ echo: echoTool,
176
+ },
177
+ });
178
+
179
+ /**
180
+ * Secondary MCP server with a subset of tools
181
+ */
182
+ export const secondaryMcpServer = new MCPServer({
183
+ name: 'secondary-server',
184
+ version: '1.0.0',
185
+ description: 'Secondary MCP server with calculator only',
186
+ tools: {
187
+ calculate: calculatorTool,
188
+ },
189
+ });
190
+
191
+ ```
192
+
193
+ ### mastra/tools/index.ts
194
+ ```typescript
195
+ import { createTool } from '@mastra/core/tools';
196
+ import { z } from 'zod';
197
+
198
+ /**
199
+ * Weather tool - simulates getting weather for a location
200
+ */
201
+ export const weatherTool = createTool({
202
+ id: 'getWeather',
203
+ description: 'Gets the current weather for a location',
204
+ inputSchema: z.object({
205
+ location: z.string().describe('The location to get weather for'),
206
+ }),
207
+ execute: async ({ location }) => {
208
+ // Simulated weather data
209
+ return {
210
+ temperature: 72,
211
+ condition: `Sunny in ${location}`,
212
+ humidity: 45,
213
+ windSpeed: 10,
214
+ };
215
+ },
216
+ });
217
+
218
+ /**
219
+ * Calculator tool - performs basic math operations
220
+ */
221
+ export const calculatorTool = createTool({
222
+ id: 'calculate',
223
+ description: 'Performs basic calculations',
224
+ inputSchema: z.object({
225
+ operation: z.enum(['add', 'subtract', 'multiply', 'divide']),
226
+ a: z.number(),
227
+ b: z.number(),
228
+ }),
229
+ execute: async ({ operation, a, b }) => {
230
+ if (operation === 'divide' && b === 0) {
231
+ throw new Error('Cannot divide by zero');
232
+ }
233
+ let result = 0;
234
+ switch (operation) {
235
+ case 'add':
236
+ result = a + b;
237
+ break;
238
+ case 'subtract':
239
+ result = a - b;
240
+ break;
241
+ case 'multiply':
242
+ result = a * b;
243
+ break;
244
+ case 'divide':
245
+ result = a / b;
246
+ break;
247
+ }
248
+ return { result, operation, operands: { a, b } };
249
+ },
250
+ });
251
+
252
+ /**
253
+ * Echo tool - simple tool that echoes back input
254
+ */
255
+ export const echoTool = createTool({
256
+ id: 'echo',
257
+ description: 'Echoes back the provided message',
258
+ inputSchema: z.object({
259
+ message: z.string().describe('The message to echo'),
260
+ }),
261
+ execute: async ({ message }) => {
262
+ return { echo: message, timestamp: new Date().toISOString() };
263
+ },
264
+ });
265
+
266
+ ```
267
+
268
+ ### test-mcp.ts
269
+ ```typescript
270
+ import * as fs from 'node:fs';
271
+ import * as path from 'node:path';
272
+ import { MCPClient } from '@mastra/mcp';
273
+
274
+ // MCP server IDs as registered with Mastra (keys from mcpServers config)
275
+ const mainServerId = 'main-mcp';
276
+ const secondaryServerId = 'secondary-mcp';
277
+
278
+ // Parse command line arguments
279
+ const args = process.argv.slice(2);
280
+ const portIndex = args.indexOf('--port');
281
+ const PORT = portIndex !== -1 && args[portIndex + 1] ? parseInt(args[portIndex + 1]) : 3001;
282
+
283
+ const BASE_URL = `http://localhost:${PORT}`;
284
+
285
+ // Auth token for protected endpoints
286
+ const AUTH_TOKEN = process.env.TEST_AUTH_TOKEN || '';
287
+ const authHeaders: Record<string, string> = AUTH_TOKEN ? { Authorization: `Bearer ${AUTH_TOKEN}` } : {};
288
+
289
+ // Output file setup
290
+ const OUTPUT_DIR = path.join(import.meta.dirname, '..', 'output');
291
+ const serverType = PORT === 3001 ? 'hono' : PORT === 3002 ? 'express' : `port-${PORT}`;
292
+ const OUTPUT_FILE = path.join(OUTPUT_DIR, `test-results-${serverType}.txt`);
293
+
294
+ // Ensure output directory exists
295
+ if (!fs.existsSync(OUTPUT_DIR)) {
296
+ fs.mkdirSync(OUTPUT_DIR, { recursive: true });
297
+ }
298
+
299
+ // Log buffer for writing to file
300
+ const logBuffer: string[] = [];
301
+
302
+ interface TestResult {
303
+ name: string;
304
+ passed: boolean;
305
+ error?: string;
306
+ }
307
+
308
+ const results: TestResult[] = [];
309
+
310
+ function log(message: string) {
311
+ console.log(message);
312
+ logBuffer.push(message);
313
+ }
314
+
315
+ function success(testName: string) {
316
+ results.push({ name: testName, passed: true });
317
+ log(` ✓ ${testName}`);
318
+ }
319
+
320
+ function fail(testName: string, error: unknown) {
321
+ const errorMessage = error instanceof Error ? error.message : String(error);
322
+ results.push({ name: testName, passed: false, error: errorMessage });
323
+ log(` ✗ ${testName}: ${errorMessage}`);
324
+ }
325
+
326
+ function writeOutput() {
327
+ const content = logBuffer.join('\n');
328
+ fs.writeFileSync(OUTPUT_FILE, content, 'utf-8');
329
+ console.log(`\nTest output written to: ${OUTPUT_FILE}`);
330
+ }
331
+
332
+ async function testHealthCheck() {
333
+ log('\n--- Testing Health Check ---');
334
+ try {
335
+ const res = await fetch(BASE_URL);
336
+ const data = (await res.json()) as { status?: string };
337
+ if (data.status === 'ok') {
338
+ success('Health check returns ok');
339
+ } else {
340
+ fail('Health check returns ok', `Expected status 'ok', got '${data.status}'`);
341
+ }
342
+ } catch (error) {
343
+ fail('Health check returns ok', error);
344
+ }
345
+ }
346
+
347
+ async function testHttpTransport() {
348
+ log('\n--- Testing HTTP Transport ---');
349
+
350
+ // Test with MCPClient for HTTP transport
351
+ const httpClient = new MCPClient({
352
+ servers: {
353
+ main: {
354
+ url: new URL(`${BASE_URL}/api/mcp/${mainServerId}/mcp`),
355
+ requestInit: { headers: authHeaders },
356
+ },
357
+ secondary: {
358
+ url: new URL(`${BASE_URL}/api/mcp/${secondaryServerId}/mcp`),
359
+ requestInit: { headers: authHeaders },
360
+ },
361
+ },
362
+ });
363
+
364
+ try {
365
+ // Test listing tools from main server
366
+ const tools = await httpClient.listTools();
367
+ const mainTools = Object.keys(tools).filter(k => k.startsWith('main_'));
368
+ if (mainTools.length === 3) {
369
+ success('HTTP: List tools from main server (3 tools)');
370
+ } else {
371
+ fail('HTTP: List tools from main server (3 tools)', `Expected 3 tools, got ${mainTools.length}`);
372
+ }
373
+
374
+ // Test listing tools from secondary server
375
+ const secondaryTools = Object.keys(tools).filter(k => k.startsWith('secondary_'));
376
+ if (secondaryTools.length === 1) {
377
+ success('HTTP: List tools from secondary server (1 tool)');
378
+ } else {
379
+ fail('HTTP: List tools from secondary server (1 tool)', `Expected 1 tool, got ${secondaryTools.length}`);
380
+ }
381
+ } catch (error) {
382
+ fail('HTTP: List tools', error);
383
+ }
384
+
385
+ try {
386
+ // Test executing calculator tool
387
+ const tools = await httpClient.listTools();
388
+ const calculateTool = tools['main_calculate'];
389
+ if (!calculateTool || !calculateTool.execute) {
390
+ throw new Error('Calculator tool not found');
391
+ }
392
+ const result = await calculateTool.execute({ operation: 'multiply', a: 6, b: 7 });
393
+ const output = JSON.parse(result.content[0].text);
394
+ if (output.result === 42) {
395
+ success('HTTP: Execute calculator tool (6 * 7 = 42)');
396
+ } else {
397
+ fail('HTTP: Execute calculator tool (6 * 7 = 42)', `Expected 42, got ${output.result}`);
398
+ }
399
+ } catch (error) {
400
+ fail('HTTP: Execute calculator tool', error);
401
+ }
402
+
403
+ try {
404
+ // Test executing weather tool
405
+ const tools = await httpClient.listTools();
406
+ const weatherTool = tools['main_getWeather'];
407
+ if (!weatherTool || !weatherTool.execute) {
408
+ throw new Error('Weather tool not found');
409
+ }
410
+ const result = await weatherTool.execute({ location: 'San Francisco' });
411
+ const output = JSON.parse(result.content[0].text);
412
+ if (output.condition === 'Sunny in San Francisco') {
413
+ success('HTTP: Execute weather tool (San Francisco)');
414
+ } else {
415
+ fail('HTTP: Execute weather tool (San Francisco)', `Unexpected condition: ${output.condition}`);
416
+ }
417
+ } catch (error) {
418
+ fail('HTTP: Execute weather tool', error);
419
+ }
420
+
421
+ try {
422
+ // Test executing echo tool
423
+ const tools = await httpClient.listTools();
424
+ const echoTool = tools['main_echo'];
425
+ if (!echoTool || !echoTool.execute) {
426
+ throw new Error('Echo tool not found');
427
+ }
428
+ const result = await echoTool.execute({ message: 'Hello MCP!' });
429
+ const output = JSON.parse(result.content[0].text);
430
+ if (output.echo === 'Hello MCP!') {
431
+ success('HTTP: Execute echo tool');
432
+ } else {
433
+ fail('HTTP: Execute echo tool', `Expected 'Hello MCP!', got '${output.echo}'`);
434
+ }
435
+ } catch (error) {
436
+ fail('HTTP: Execute echo tool', error);
437
+ }
438
+
439
+ // Test secondary server's calculator tool
440
+ try {
441
+ const tools = await httpClient.listTools();
442
+ const secondaryCalculateTool = tools['secondary_calculate'];
443
+ if (!secondaryCalculateTool || !secondaryCalculateTool.execute) {
444
+ throw new Error('Secondary calculator tool not found');
445
+ }
446
+ const result = await secondaryCalculateTool.execute({ operation: 'divide', a: 100, b: 4 });
447
+ const output = JSON.parse(result.content[0].text);
448
+ if (output.result === 25) {
449
+ success('HTTP: Execute secondary server calculator tool (100 / 4 = 25)');
450
+ } else {
451
+ fail('HTTP: Execute secondary server calculator tool (100 / 4 = 25)', `Expected 25, got ${output.result}`);
452
+ }
453
+ } catch (error) {
454
+ fail('HTTP: Execute secondary server calculator tool', error);
455
+ }
456
+
457
+ await httpClient.disconnect();
458
+ }
459
+
460
+ async function testSseTransport() {
461
+ log('\n--- Testing SSE Transport ---');
462
+
463
+ // Test with MCPClient for SSE transport
464
+ const sseClient = new MCPClient({
465
+ servers: {
466
+ main: {
467
+ url: new URL(`${BASE_URL}/api/mcp/${mainServerId}/sse`),
468
+ requestInit: { headers: authHeaders },
469
+ },
470
+ },
471
+ });
472
+
473
+ try {
474
+ // Test listing tools via SSE
475
+ const tools = await sseClient.listTools();
476
+ const mainTools = Object.keys(tools).filter(k => k.startsWith('main_'));
477
+ if (mainTools.length === 3) {
478
+ success('SSE: List tools from main server (3 tools)');
479
+ } else {
480
+ fail('SSE: List tools from main server (3 tools)', `Expected 3 tools, got ${mainTools.length}`);
481
+ }
482
+ } catch (error) {
483
+ fail('SSE: List tools', error);
484
+ }
485
+
486
+ try {
487
+ // Test executing calculator tool via SSE
488
+ const tools = await sseClient.listTools();
489
+ const calculateTool = tools['main_calculate'];
490
+ if (!calculateTool || !calculateTool.execute) {
491
+ throw new Error('Calculator tool not found');
492
+ }
493
+ const result = await calculateTool.execute({ operation: 'add', a: 100, b: 23 });
494
+ const output = JSON.parse(result.content[0].text);
495
+ if (output.result === 123) {
496
+ success('SSE: Execute calculator tool (100 + 23 = 123)');
497
+ } else {
498
+ fail('SSE: Execute calculator tool (100 + 23 = 123)', `Expected 123, got ${output.result}`);
499
+ }
500
+ } catch (error) {
501
+ fail('SSE: Execute calculator tool', error);
502
+ }
503
+
504
+ try {
505
+ // Test executing weather tool via SSE
506
+ const tools = await sseClient.listTools();
507
+ const weatherTool = tools['main_getWeather'];
508
+ if (!weatherTool || !weatherTool.execute) {
509
+ throw new Error('Weather tool not found');
510
+ }
511
+ const result = await weatherTool.execute({ location: 'New York' });
512
+ const output = JSON.parse(result.content[0].text);
513
+ if (output.condition === 'Sunny in New York') {
514
+ success('SSE: Execute weather tool (New York)');
515
+ } else {
516
+ fail('SSE: Execute weather tool (New York)', `Unexpected condition: ${output.condition}`);
517
+ }
518
+ } catch (error) {
519
+ fail('SSE: Execute weather tool', error);
520
+ }
521
+
522
+ await sseClient.disconnect();
523
+ }
524
+
525
+ async function testSseConnectionLifecycle() {
526
+ log('\n--- Testing SSE Connection Lifecycle ---');
527
+
528
+ // Test multiple connect/disconnect cycles
529
+ for (let i = 1; i <= 3; i++) {
530
+ const client = new MCPClient({
531
+ servers: {
532
+ main: {
533
+ url: new URL(`${BASE_URL}/api/mcp/${mainServerId}/sse`),
534
+ requestInit: { headers: authHeaders },
535
+ },
536
+ },
537
+ });
538
+
539
+ try {
540
+ const tools = await client.listTools();
541
+ const toolCount = Object.keys(tools).filter(k => k.startsWith('main_')).length;
542
+ if (toolCount === 3) {
543
+ success(`SSE: Connection cycle ${i} - connect and list tools`);
544
+ } else {
545
+ fail(`SSE: Connection cycle ${i} - connect and list tools`, `Expected 3 tools, got ${toolCount}`);
546
+ }
547
+ await client.disconnect();
548
+ success(`SSE: Connection cycle ${i} - disconnect`);
549
+ } catch (error) {
550
+ fail(`SSE: Connection cycle ${i}`, error);
551
+ try {
552
+ await client.disconnect();
553
+ } catch {
554
+ // Ignore disconnect errors
555
+ }
556
+ }
557
+ }
558
+ }
559
+
560
+ async function testToolResponseFormat() {
561
+ log('\n--- Testing Tool Response Format ---');
562
+
563
+ const httpClient = new MCPClient({
564
+ servers: {
565
+ main: {
566
+ url: new URL(`${BASE_URL}/api/mcp/${mainServerId}/mcp`),
567
+ requestInit: { headers: authHeaders },
568
+ },
569
+ },
570
+ });
571
+
572
+ try {
573
+ // Verify tool response has expected MCP format
574
+ const tools = await httpClient.listTools();
575
+ const calculateTool = tools['main_calculate'];
576
+ if (!calculateTool || !calculateTool.execute) {
577
+ throw new Error('Calculator tool not found');
578
+ }
579
+
580
+ const result = await calculateTool.execute({ operation: 'subtract', a: 50, b: 8 });
581
+
582
+ // Verify response structure
583
+ if (result && result.content && Array.isArray(result.content) && result.content[0]?.text) {
584
+ const output = JSON.parse(result.content[0].text);
585
+ if (output.result === 42 && output.operation === 'subtract' && output.operands) {
586
+ success('HTTP: Tool response has correct MCP format');
587
+ } else {
588
+ fail('HTTP: Tool response has correct MCP format', `Unexpected output: ${JSON.stringify(output)}`);
589
+ }
590
+ } else {
591
+ fail('HTTP: Tool response has correct MCP format', 'Response missing expected structure');
592
+ }
593
+ } catch (error) {
594
+ fail('HTTP: Tool response format test', error);
595
+ }
596
+
597
+ try {
598
+ // Verify echo tool response includes timestamp
599
+ const tools = await httpClient.listTools();
600
+ const echoTool = tools['main_echo'];
601
+ if (!echoTool || !echoTool.execute) {
602
+ throw new Error('Echo tool not found');
603
+ }
604
+
605
+ const result = await echoTool.execute({ message: 'test timestamp' });
606
+ const output = JSON.parse(result.content[0].text);
607
+
608
+ if (output.echo === 'test timestamp' && output.timestamp) {
609
+ // Verify timestamp is a valid ISO date
610
+ const date = new Date(output.timestamp);
611
+ if (!isNaN(date.getTime())) {
612
+ success('HTTP: Echo tool includes valid timestamp');
613
+ } else {
614
+ fail('HTTP: Echo tool includes valid timestamp', `Invalid timestamp: ${output.timestamp}`);
615
+ }
616
+ } else {
617
+ fail('HTTP: Echo tool includes valid timestamp', 'Missing echo or timestamp in response');
618
+ }
619
+ } catch (error) {
620
+ fail('HTTP: Echo tool timestamp test', error);
621
+ }
622
+
623
+ await httpClient.disconnect();
624
+ }
625
+
626
+ async function testErrorHandling() {
627
+ log('\n--- Testing Error Handling ---');
628
+
629
+ try {
630
+ // Test 404 for non-existent server
631
+ const res = await fetch(`${BASE_URL}/api/mcp/non-existent-server/mcp`, {
632
+ method: 'POST',
633
+ headers: {
634
+ 'Content-Type': 'application/json',
635
+ Accept: 'application/json, text/event-stream',
636
+ ...authHeaders,
637
+ },
638
+ body: JSON.stringify({
639
+ jsonrpc: '2.0',
640
+ method: 'initialize',
641
+ params: {
642
+ protocolVersion: '2024-11-05',
643
+ capabilities: {},
644
+ clientInfo: { name: 'test-client', version: '1.0.0' },
645
+ },
646
+ id: 1,
647
+ }),
648
+ });
649
+ if (res.status === 404) {
650
+ success('HTTP: Returns 404 for non-existent server');
651
+ } else {
652
+ fail('HTTP: Returns 404 for non-existent server', `Expected 404, got ${res.status}`);
653
+ }
654
+ } catch (error) {
655
+ fail('HTTP: Returns 404 for non-existent server', error);
656
+ }
657
+
658
+ try {
659
+ // Test 404 for non-existent SSE server
660
+ const res = await fetch(`${BASE_URL}/api/mcp/non-existent-server/sse`, {
661
+ headers: authHeaders,
662
+ });
663
+ if (res.status === 404) {
664
+ success('SSE: Returns 404 for non-existent server');
665
+ } else {
666
+ fail('SSE: Returns 404 for non-existent server', `Expected 404, got ${res.status}`);
667
+ }
668
+ } catch (error) {
669
+ fail('SSE: Returns 404 for non-existent server', error);
670
+ }
671
+ }
672
+
673
+ async function runTests() {
674
+ log(`\n========================================`);
675
+ log(` MCP Server Adapter Tests`);
676
+ log(` Testing against: ${BASE_URL}`);
677
+ log(` Server type: ${serverType}`);
678
+ log(` Timestamp: ${new Date().toISOString()}`);
679
+ log(`========================================`);
680
+
681
+ await testHealthCheck();
682
+ await testHttpTransport();
683
+ await testSseTransport();
684
+ await testSseConnectionLifecycle();
685
+ await testToolResponseFormat();
686
+ await testErrorHandling();
687
+
688
+ // Summary
689
+ const passed = results.filter(r => r.passed).length;
690
+ const failed = results.filter(r => !r.passed).length;
691
+
692
+ log(`\n========================================`);
693
+ log(` Summary: ${passed} passed, ${failed} failed`);
694
+ log(`========================================\n`);
695
+
696
+ if (failed > 0) {
697
+ log('Failed tests:');
698
+ results
699
+ .filter(r => !r.passed)
700
+ .forEach(r => {
701
+ log(` - ${r.name}: ${r.error}`);
702
+ });
703
+ log('');
704
+ }
705
+
706
+ // Write output to file
707
+ writeOutput();
708
+
709
+ process.exit(failed > 0 ? 1 : 0);
710
+ }
711
+
712
+ // Run tests
713
+ runTests().catch(error => {
714
+ console.error('Test runner failed:', error);
715
+ log(`\nTest runner failed: ${error}`);
716
+ writeOutput();
717
+ process.exit(1);
718
+ });
719
+
720
+ ```