@mastra/mcp-docs-server 1.1.5 → 1.1.6-alpha.0

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 (556) hide show
  1. package/.docs/docs/agents/adding-voice.md +349 -0
  2. package/.docs/docs/agents/agent-approval.md +558 -0
  3. package/.docs/docs/agents/agent-memory.md +209 -0
  4. package/.docs/docs/agents/guardrails.md +374 -0
  5. package/.docs/docs/agents/network-approval.md +275 -0
  6. package/.docs/docs/agents/networks.md +299 -0
  7. package/.docs/docs/agents/overview.md +304 -0
  8. package/.docs/docs/agents/processors.md +622 -0
  9. package/.docs/docs/agents/structured-output.md +273 -0
  10. package/.docs/docs/agents/supervisor-agents.md +304 -0
  11. package/.docs/docs/agents/using-tools.md +214 -0
  12. package/.docs/docs/build-with-ai/mcp-docs-server.md +238 -0
  13. package/.docs/docs/build-with-ai/skills.md +35 -0
  14. package/.docs/docs/community/contributing-templates.md +3 -0
  15. package/.docs/docs/community/discord.md +9 -0
  16. package/.docs/docs/community/licensing.md +66 -0
  17. package/.docs/docs/deployment/cloud-providers.md +15 -0
  18. package/.docs/docs/deployment/mastra-server.md +122 -0
  19. package/.docs/docs/deployment/monorepo.md +142 -0
  20. package/.docs/docs/deployment/overview.md +62 -0
  21. package/.docs/docs/deployment/studio.md +239 -0
  22. package/.docs/docs/deployment/web-framework.md +52 -0
  23. package/.docs/docs/deployment/workflow-runners.md +9 -0
  24. package/.docs/docs/evals/built-in-scorers.md +47 -0
  25. package/.docs/docs/evals/custom-scorers.md +519 -0
  26. package/.docs/docs/evals/overview.md +141 -0
  27. package/.docs/docs/evals/running-in-ci.md +124 -0
  28. package/.docs/docs/getting-started/build-with-ai.md +68 -0
  29. package/.docs/docs/getting-started/manual-install.md +226 -0
  30. package/.docs/docs/getting-started/project-structure.md +60 -0
  31. package/.docs/docs/getting-started/start.md +28 -0
  32. package/.docs/docs/getting-started/studio.md +101 -0
  33. package/.docs/docs/index.md +43 -0
  34. package/.docs/docs/mastra-cloud/deployment.md +77 -0
  35. package/.docs/docs/mastra-cloud/observability.md +38 -0
  36. package/.docs/docs/mastra-cloud/overview.md +23 -0
  37. package/.docs/docs/mastra-cloud/setup.md +42 -0
  38. package/.docs/docs/mastra-cloud/studio.md +24 -0
  39. package/.docs/docs/mastra-code/configuration.md +299 -0
  40. package/.docs/docs/mastra-code/customization.md +228 -0
  41. package/.docs/docs/mastra-code/modes.md +104 -0
  42. package/.docs/docs/mastra-code/overview.md +135 -0
  43. package/.docs/docs/mastra-code/tools.md +229 -0
  44. package/.docs/docs/mcp/overview.md +373 -0
  45. package/.docs/docs/mcp/publishing-mcp-server.md +95 -0
  46. package/.docs/docs/memory/memory-processors.md +314 -0
  47. package/.docs/docs/memory/message-history.md +260 -0
  48. package/.docs/docs/memory/observational-memory.md +248 -0
  49. package/.docs/docs/memory/overview.md +45 -0
  50. package/.docs/docs/memory/semantic-recall.md +272 -0
  51. package/.docs/docs/memory/storage.md +261 -0
  52. package/.docs/docs/memory/working-memory.md +400 -0
  53. package/.docs/docs/observability/datasets/overview.md +198 -0
  54. package/.docs/docs/observability/datasets/running-experiments.md +274 -0
  55. package/.docs/docs/observability/logging.md +99 -0
  56. package/.docs/docs/observability/overview.md +70 -0
  57. package/.docs/docs/observability/tracing/bridges/otel.md +209 -0
  58. package/.docs/docs/observability/tracing/exporters/arize.md +272 -0
  59. package/.docs/docs/observability/tracing/exporters/braintrust.md +111 -0
  60. package/.docs/docs/observability/tracing/exporters/cloud.md +127 -0
  61. package/.docs/docs/observability/tracing/exporters/datadog.md +187 -0
  62. package/.docs/docs/observability/tracing/exporters/default.md +209 -0
  63. package/.docs/docs/observability/tracing/exporters/laminar.md +100 -0
  64. package/.docs/docs/observability/tracing/exporters/langfuse.md +213 -0
  65. package/.docs/docs/observability/tracing/exporters/langsmith.md +198 -0
  66. package/.docs/docs/observability/tracing/exporters/otel.md +476 -0
  67. package/.docs/docs/observability/tracing/exporters/posthog.md +148 -0
  68. package/.docs/docs/observability/tracing/exporters/sentry.md +208 -0
  69. package/.docs/docs/observability/tracing/overview.md +1112 -0
  70. package/.docs/docs/observability/tracing/processors/sensitive-data-filter.md +300 -0
  71. package/.docs/docs/rag/chunking-and-embedding.md +183 -0
  72. package/.docs/docs/rag/graph-rag.md +215 -0
  73. package/.docs/docs/rag/overview.md +72 -0
  74. package/.docs/docs/rag/retrieval.md +515 -0
  75. package/.docs/docs/rag/vector-databases.md +645 -0
  76. package/.docs/docs/server/auth/auth0.md +220 -0
  77. package/.docs/docs/server/auth/better-auth.md +203 -0
  78. package/.docs/docs/server/auth/clerk.md +132 -0
  79. package/.docs/docs/server/auth/composite-auth.md +234 -0
  80. package/.docs/docs/server/auth/custom-auth-provider.md +513 -0
  81. package/.docs/docs/server/auth/firebase.md +272 -0
  82. package/.docs/docs/server/auth/jwt.md +110 -0
  83. package/.docs/docs/server/auth/simple-auth.md +180 -0
  84. package/.docs/docs/server/auth/supabase.md +117 -0
  85. package/.docs/docs/server/auth/workos.md +186 -0
  86. package/.docs/docs/server/auth.md +38 -0
  87. package/.docs/docs/server/custom-adapters.md +378 -0
  88. package/.docs/docs/server/custom-api-routes.md +267 -0
  89. package/.docs/docs/server/mastra-client.md +243 -0
  90. package/.docs/docs/server/mastra-server.md +71 -0
  91. package/.docs/docs/server/middleware.md +225 -0
  92. package/.docs/docs/server/request-context.md +471 -0
  93. package/.docs/docs/server/server-adapters.md +547 -0
  94. package/.docs/docs/streaming/events.md +237 -0
  95. package/.docs/docs/streaming/overview.md +175 -0
  96. package/.docs/docs/streaming/tool-streaming.md +175 -0
  97. package/.docs/docs/streaming/workflow-streaming.md +109 -0
  98. package/.docs/docs/voice/overview.md +959 -0
  99. package/.docs/docs/voice/speech-to-speech.md +102 -0
  100. package/.docs/docs/voice/speech-to-text.md +79 -0
  101. package/.docs/docs/voice/text-to-speech.md +83 -0
  102. package/.docs/docs/workflows/agents-and-tools.md +166 -0
  103. package/.docs/docs/workflows/control-flow.md +822 -0
  104. package/.docs/docs/workflows/error-handling.md +360 -0
  105. package/.docs/docs/workflows/human-in-the-loop.md +215 -0
  106. package/.docs/docs/workflows/overview.md +370 -0
  107. package/.docs/docs/workflows/snapshots.md +238 -0
  108. package/.docs/docs/workflows/suspend-and-resume.md +205 -0
  109. package/.docs/docs/workflows/time-travel.md +309 -0
  110. package/.docs/docs/workflows/workflow-state.md +181 -0
  111. package/.docs/docs/workspace/filesystem.md +164 -0
  112. package/.docs/docs/workspace/overview.md +239 -0
  113. package/.docs/docs/workspace/sandbox.md +63 -0
  114. package/.docs/docs/workspace/search.md +243 -0
  115. package/.docs/docs/workspace/skills.md +169 -0
  116. package/.docs/guides/agent-frameworks/ai-sdk.md +140 -0
  117. package/.docs/guides/build-your-ui/ai-sdk-ui.md +1499 -0
  118. package/.docs/guides/build-your-ui/assistant-ui.md +156 -0
  119. package/.docs/guides/build-your-ui/copilotkit.md +289 -0
  120. package/.docs/guides/deployment/amazon-ec2.md +130 -0
  121. package/.docs/guides/deployment/aws-lambda.md +248 -0
  122. package/.docs/guides/deployment/azure-app-services.md +114 -0
  123. package/.docs/guides/deployment/cloudflare.md +99 -0
  124. package/.docs/guides/deployment/digital-ocean.md +168 -0
  125. package/.docs/guides/deployment/inngest.md +682 -0
  126. package/.docs/guides/deployment/netlify.md +77 -0
  127. package/.docs/guides/deployment/vercel.md +101 -0
  128. package/.docs/guides/getting-started/astro.md +398 -0
  129. package/.docs/guides/getting-started/electron.md +504 -0
  130. package/.docs/guides/getting-started/express.md +251 -0
  131. package/.docs/guides/getting-started/hono.md +190 -0
  132. package/.docs/guides/getting-started/next-js.md +347 -0
  133. package/.docs/guides/getting-started/nuxt.md +497 -0
  134. package/.docs/guides/getting-started/quickstart.md +67 -0
  135. package/.docs/guides/getting-started/sveltekit.md +296 -0
  136. package/.docs/guides/getting-started/vite-react.md +425 -0
  137. package/.docs/guides/guide/ai-recruiter.md +226 -0
  138. package/.docs/guides/guide/chef-michel.md +211 -0
  139. package/.docs/guides/guide/code-review-bot.md +226 -0
  140. package/.docs/guides/guide/dev-assistant.md +307 -0
  141. package/.docs/guides/guide/docs-manager.md +238 -0
  142. package/.docs/guides/guide/github-actions-pr-description.md +236 -0
  143. package/.docs/guides/guide/notes-mcp-server.md +416 -0
  144. package/.docs/guides/guide/research-assistant.md +348 -0
  145. package/.docs/guides/guide/research-coordinator.md +416 -0
  146. package/.docs/guides/guide/stock-agent.md +132 -0
  147. package/.docs/guides/guide/web-search.md +320 -0
  148. package/.docs/guides/guide/whatsapp-chat-bot.md +405 -0
  149. package/.docs/guides/index.md +3 -0
  150. package/.docs/guides/migrations/agentnetwork.md +97 -0
  151. package/.docs/guides/migrations/ai-sdk-v4-to-v5.md +112 -0
  152. package/.docs/guides/migrations/network-to-supervisor.md +261 -0
  153. package/.docs/guides/migrations/upgrade-to-v1/agent.md +404 -0
  154. package/.docs/guides/migrations/upgrade-to-v1/cli.md +57 -0
  155. package/.docs/guides/migrations/upgrade-to-v1/client.md +337 -0
  156. package/.docs/guides/migrations/upgrade-to-v1/deployment.md +37 -0
  157. package/.docs/guides/migrations/upgrade-to-v1/evals.md +239 -0
  158. package/.docs/guides/migrations/upgrade-to-v1/mastra.md +143 -0
  159. package/.docs/guides/migrations/upgrade-to-v1/mcp.md +97 -0
  160. package/.docs/guides/migrations/upgrade-to-v1/memory.md +285 -0
  161. package/.docs/guides/migrations/upgrade-to-v1/overview.md +119 -0
  162. package/.docs/guides/migrations/upgrade-to-v1/processors.md +68 -0
  163. package/.docs/guides/migrations/upgrade-to-v1/rag.md +42 -0
  164. package/.docs/guides/migrations/upgrade-to-v1/storage.md +553 -0
  165. package/.docs/guides/migrations/upgrade-to-v1/tools.md +180 -0
  166. package/.docs/guides/migrations/upgrade-to-v1/tracing.md +412 -0
  167. package/.docs/guides/migrations/upgrade-to-v1/vectors.md +87 -0
  168. package/.docs/guides/migrations/upgrade-to-v1/voice.md +30 -0
  169. package/.docs/guides/migrations/upgrade-to-v1/workflows.md +341 -0
  170. package/.docs/guides/migrations/vnext-to-standard-apis.md +362 -0
  171. package/.docs/models/embeddings.md +161 -0
  172. package/.docs/models/gateways/azure-openai.md +128 -0
  173. package/.docs/models/gateways/custom-gateways.md +545 -0
  174. package/.docs/models/gateways/netlify.md +88 -0
  175. package/.docs/models/gateways/openrouter.md +219 -0
  176. package/.docs/models/gateways/vercel.md +225 -0
  177. package/.docs/models/gateways.md +14 -0
  178. package/.docs/models/index.md +286 -0
  179. package/.docs/models/providers/302ai.md +134 -0
  180. package/.docs/models/providers/abacus.md +125 -0
  181. package/.docs/models/providers/agentrouter.md +90 -0
  182. package/.docs/models/providers/aihubmix.md +107 -0
  183. package/.docs/models/providers/alibaba-cn.md +135 -0
  184. package/.docs/models/providers/alibaba.md +111 -0
  185. package/.docs/models/providers/amazon-bedrock.md +33 -0
  186. package/.docs/models/providers/anthropic.md +153 -0
  187. package/.docs/models/providers/azure.md +33 -0
  188. package/.docs/models/providers/bailing.md +72 -0
  189. package/.docs/models/providers/baseten.md +77 -0
  190. package/.docs/models/providers/berget.md +78 -0
  191. package/.docs/models/providers/cerebras.md +101 -0
  192. package/.docs/models/providers/chutes.md +136 -0
  193. package/.docs/models/providers/cloudflare-ai-gateway.md +33 -0
  194. package/.docs/models/providers/cloudflare-workers-ai.md +109 -0
  195. package/.docs/models/providers/cohere.md +33 -0
  196. package/.docs/models/providers/cortecs.md +91 -0
  197. package/.docs/models/providers/deepinfra.md +112 -0
  198. package/.docs/models/providers/deepseek.md +88 -0
  199. package/.docs/models/providers/fastrouter.md +84 -0
  200. package/.docs/models/providers/fireworks-ai.md +89 -0
  201. package/.docs/models/providers/firmware.md +85 -0
  202. package/.docs/models/providers/friendli.md +78 -0
  203. package/.docs/models/providers/github-models.md +125 -0
  204. package/.docs/models/providers/google-vertex.md +33 -0
  205. package/.docs/models/providers/google.md +159 -0
  206. package/.docs/models/providers/groq.md +107 -0
  207. package/.docs/models/providers/helicone.md +161 -0
  208. package/.docs/models/providers/huggingface.md +90 -0
  209. package/.docs/models/providers/iflowcn.md +84 -0
  210. package/.docs/models/providers/inception.md +72 -0
  211. package/.docs/models/providers/inference.md +79 -0
  212. package/.docs/models/providers/io-intelligence.md +87 -0
  213. package/.docs/models/providers/io-net.md +87 -0
  214. package/.docs/models/providers/jiekou.md +131 -0
  215. package/.docs/models/providers/kilo.md +333 -0
  216. package/.docs/models/providers/kimi-for-coding.md +100 -0
  217. package/.docs/models/providers/kuae-cloud-coding-plan.md +71 -0
  218. package/.docs/models/providers/llama.md +77 -0
  219. package/.docs/models/providers/lmstudio.md +73 -0
  220. package/.docs/models/providers/lucidquery.md +72 -0
  221. package/.docs/models/providers/minimax-cn-coding-plan.md +102 -0
  222. package/.docs/models/providers/minimax-cn.md +102 -0
  223. package/.docs/models/providers/minimax-coding-plan.md +102 -0
  224. package/.docs/models/providers/minimax.md +104 -0
  225. package/.docs/models/providers/mistral.md +124 -0
  226. package/.docs/models/providers/moark.md +72 -0
  227. package/.docs/models/providers/modelscope.md +77 -0
  228. package/.docs/models/providers/moonshotai-cn.md +76 -0
  229. package/.docs/models/providers/moonshotai.md +76 -0
  230. package/.docs/models/providers/morph.md +73 -0
  231. package/.docs/models/providers/nano-gpt.md +103 -0
  232. package/.docs/models/providers/nebius.md +116 -0
  233. package/.docs/models/providers/nova.md +72 -0
  234. package/.docs/models/providers/novita-ai.md +154 -0
  235. package/.docs/models/providers/nvidia.md +141 -0
  236. package/.docs/models/providers/ollama-cloud.md +103 -0
  237. package/.docs/models/providers/ollama.md +33 -0
  238. package/.docs/models/providers/openai.md +193 -0
  239. package/.docs/models/providers/opencode.md +100 -0
  240. package/.docs/models/providers/ovhcloud.md +83 -0
  241. package/.docs/models/providers/perplexity.md +100 -0
  242. package/.docs/models/providers/poe.md +183 -0
  243. package/.docs/models/providers/privatemode-ai.md +75 -0
  244. package/.docs/models/providers/requesty.md +90 -0
  245. package/.docs/models/providers/scaleway.md +84 -0
  246. package/.docs/models/providers/siliconflow-cn.md +138 -0
  247. package/.docs/models/providers/siliconflow.md +140 -0
  248. package/.docs/models/providers/stackit.md +78 -0
  249. package/.docs/models/providers/stepfun.md +73 -0
  250. package/.docs/models/providers/submodel.md +79 -0
  251. package/.docs/models/providers/synthetic.md +96 -0
  252. package/.docs/models/providers/togetherai.md +115 -0
  253. package/.docs/models/providers/upstage.md +73 -0
  254. package/.docs/models/providers/venice.md +95 -0
  255. package/.docs/models/providers/vivgrid.md +106 -0
  256. package/.docs/models/providers/vultr.md +75 -0
  257. package/.docs/models/providers/wandb.md +80 -0
  258. package/.docs/models/providers/xai.md +141 -0
  259. package/.docs/models/providers/xiaomi.md +71 -0
  260. package/.docs/models/providers/zai-coding-plan.md +80 -0
  261. package/.docs/models/providers/zai.md +79 -0
  262. package/.docs/models/providers/zenmux.md +161 -0
  263. package/.docs/models/providers/zhipuai-coding-plan.md +79 -0
  264. package/.docs/models/providers/zhipuai.md +79 -0
  265. package/.docs/models/providers.md +81 -0
  266. package/.docs/reference/agents/agent.md +141 -0
  267. package/.docs/reference/agents/generate.md +186 -0
  268. package/.docs/reference/agents/generateLegacy.md +173 -0
  269. package/.docs/reference/agents/getDefaultGenerateOptions.md +36 -0
  270. package/.docs/reference/agents/getDefaultOptions.md +34 -0
  271. package/.docs/reference/agents/getDefaultStreamOptions.md +36 -0
  272. package/.docs/reference/agents/getDescription.md +21 -0
  273. package/.docs/reference/agents/getInstructions.md +34 -0
  274. package/.docs/reference/agents/getLLM.md +37 -0
  275. package/.docs/reference/agents/getMemory.md +34 -0
  276. package/.docs/reference/agents/getModel.md +34 -0
  277. package/.docs/reference/agents/getTools.md +29 -0
  278. package/.docs/reference/agents/getVoice.md +34 -0
  279. package/.docs/reference/agents/listAgents.md +35 -0
  280. package/.docs/reference/agents/listScorers.md +34 -0
  281. package/.docs/reference/agents/listTools.md +34 -0
  282. package/.docs/reference/agents/listWorkflows.md +34 -0
  283. package/.docs/reference/agents/network.md +133 -0
  284. package/.docs/reference/ai-sdk/chat-route.md +82 -0
  285. package/.docs/reference/ai-sdk/handle-chat-stream.md +53 -0
  286. package/.docs/reference/ai-sdk/handle-network-stream.md +37 -0
  287. package/.docs/reference/ai-sdk/handle-workflow-stream.md +55 -0
  288. package/.docs/reference/ai-sdk/network-route.md +74 -0
  289. package/.docs/reference/ai-sdk/to-ai-sdk-stream.md +231 -0
  290. package/.docs/reference/ai-sdk/to-ai-sdk-v4-messages.md +79 -0
  291. package/.docs/reference/ai-sdk/to-ai-sdk-v5-messages.md +76 -0
  292. package/.docs/reference/ai-sdk/with-mastra.md +59 -0
  293. package/.docs/reference/ai-sdk/workflow-route.md +79 -0
  294. package/.docs/reference/auth/auth0.md +73 -0
  295. package/.docs/reference/auth/better-auth.md +71 -0
  296. package/.docs/reference/auth/clerk.md +36 -0
  297. package/.docs/reference/auth/firebase.md +80 -0
  298. package/.docs/reference/auth/jwt.md +26 -0
  299. package/.docs/reference/auth/supabase.md +33 -0
  300. package/.docs/reference/auth/workos.md +84 -0
  301. package/.docs/reference/cli/create-mastra.md +137 -0
  302. package/.docs/reference/cli/mastra.md +336 -0
  303. package/.docs/reference/client-js/agents.md +437 -0
  304. package/.docs/reference/client-js/error-handling.md +16 -0
  305. package/.docs/reference/client-js/logs.md +24 -0
  306. package/.docs/reference/client-js/mastra-client.md +63 -0
  307. package/.docs/reference/client-js/memory.md +221 -0
  308. package/.docs/reference/client-js/observability.md +72 -0
  309. package/.docs/reference/client-js/telemetry.md +20 -0
  310. package/.docs/reference/client-js/tools.md +44 -0
  311. package/.docs/reference/client-js/vectors.md +79 -0
  312. package/.docs/reference/client-js/workflows.md +199 -0
  313. package/.docs/reference/configuration.md +752 -0
  314. package/.docs/reference/core/addGateway.md +42 -0
  315. package/.docs/reference/core/getAgent.md +21 -0
  316. package/.docs/reference/core/getAgentById.md +21 -0
  317. package/.docs/reference/core/getDeployer.md +22 -0
  318. package/.docs/reference/core/getGateway.md +38 -0
  319. package/.docs/reference/core/getGatewayById.md +41 -0
  320. package/.docs/reference/core/getLogger.md +22 -0
  321. package/.docs/reference/core/getMCPServer.md +47 -0
  322. package/.docs/reference/core/getMCPServerById.md +55 -0
  323. package/.docs/reference/core/getMemory.md +50 -0
  324. package/.docs/reference/core/getScorer.md +54 -0
  325. package/.docs/reference/core/getScorerById.md +54 -0
  326. package/.docs/reference/core/getServer.md +22 -0
  327. package/.docs/reference/core/getStorage.md +22 -0
  328. package/.docs/reference/core/getStoredAgentById.md +89 -0
  329. package/.docs/reference/core/getTelemetry.md +22 -0
  330. package/.docs/reference/core/getVector.md +22 -0
  331. package/.docs/reference/core/getWorkflow.md +42 -0
  332. package/.docs/reference/core/listAgents.md +21 -0
  333. package/.docs/reference/core/listGateways.md +40 -0
  334. package/.docs/reference/core/listLogs.md +38 -0
  335. package/.docs/reference/core/listLogsByRunId.md +36 -0
  336. package/.docs/reference/core/listMCPServers.md +55 -0
  337. package/.docs/reference/core/listMemory.md +56 -0
  338. package/.docs/reference/core/listScorers.md +29 -0
  339. package/.docs/reference/core/listStoredAgents.md +93 -0
  340. package/.docs/reference/core/listVectors.md +22 -0
  341. package/.docs/reference/core/listWorkflows.md +21 -0
  342. package/.docs/reference/core/mastra-class.md +66 -0
  343. package/.docs/reference/core/mastra-model-gateway.md +153 -0
  344. package/.docs/reference/core/setLogger.md +26 -0
  345. package/.docs/reference/core/setStorage.md +27 -0
  346. package/.docs/reference/datasets/addItem.md +37 -0
  347. package/.docs/reference/datasets/addItems.md +35 -0
  348. package/.docs/reference/datasets/compareExperiments.md +52 -0
  349. package/.docs/reference/datasets/create.md +51 -0
  350. package/.docs/reference/datasets/dataset.md +82 -0
  351. package/.docs/reference/datasets/datasets-manager.md +94 -0
  352. package/.docs/reference/datasets/delete.md +25 -0
  353. package/.docs/reference/datasets/deleteExperiment.md +27 -0
  354. package/.docs/reference/datasets/deleteItem.md +27 -0
  355. package/.docs/reference/datasets/deleteItems.md +29 -0
  356. package/.docs/reference/datasets/get.md +31 -0
  357. package/.docs/reference/datasets/getDetails.md +47 -0
  358. package/.docs/reference/datasets/getExperiment.md +30 -0
  359. package/.docs/reference/datasets/getItem.md +33 -0
  360. package/.docs/reference/datasets/getItemHistory.md +31 -0
  361. package/.docs/reference/datasets/list.md +31 -0
  362. package/.docs/reference/datasets/listExperimentResults.md +39 -0
  363. package/.docs/reference/datasets/listExperiments.md +33 -0
  364. package/.docs/reference/datasets/listItems.md +46 -0
  365. package/.docs/reference/datasets/listVersions.md +33 -0
  366. package/.docs/reference/datasets/startExperiment.md +62 -0
  367. package/.docs/reference/datasets/startExperimentAsync.md +43 -0
  368. package/.docs/reference/datasets/update.md +48 -0
  369. package/.docs/reference/datasets/updateItem.md +38 -0
  370. package/.docs/reference/deployer/cloudflare.md +79 -0
  371. package/.docs/reference/deployer/netlify.md +80 -0
  372. package/.docs/reference/deployer/vercel.md +91 -0
  373. package/.docs/reference/deployer.md +100 -0
  374. package/.docs/reference/evals/answer-relevancy.md +105 -0
  375. package/.docs/reference/evals/answer-similarity.md +99 -0
  376. package/.docs/reference/evals/bias.md +120 -0
  377. package/.docs/reference/evals/completeness.md +136 -0
  378. package/.docs/reference/evals/content-similarity.md +101 -0
  379. package/.docs/reference/evals/context-precision.md +196 -0
  380. package/.docs/reference/evals/context-relevance.md +531 -0
  381. package/.docs/reference/evals/create-scorer.md +270 -0
  382. package/.docs/reference/evals/faithfulness.md +114 -0
  383. package/.docs/reference/evals/hallucination.md +213 -0
  384. package/.docs/reference/evals/keyword-coverage.md +128 -0
  385. package/.docs/reference/evals/mastra-scorer.md +123 -0
  386. package/.docs/reference/evals/noise-sensitivity.md +675 -0
  387. package/.docs/reference/evals/prompt-alignment.md +614 -0
  388. package/.docs/reference/evals/run-evals.md +179 -0
  389. package/.docs/reference/evals/scorer-utils.md +326 -0
  390. package/.docs/reference/evals/textual-difference.md +113 -0
  391. package/.docs/reference/evals/tone-consistency.md +119 -0
  392. package/.docs/reference/evals/tool-call-accuracy.md +533 -0
  393. package/.docs/reference/evals/toxicity.md +123 -0
  394. package/.docs/reference/harness/harness-class.md +708 -0
  395. package/.docs/reference/index.md +277 -0
  396. package/.docs/reference/logging/pino-logger.md +117 -0
  397. package/.docs/reference/mastra-code/createMastraCode.md +108 -0
  398. package/.docs/reference/memory/clone-utilities.md +199 -0
  399. package/.docs/reference/memory/cloneThread.md +130 -0
  400. package/.docs/reference/memory/createThread.md +68 -0
  401. package/.docs/reference/memory/deleteMessages.md +38 -0
  402. package/.docs/reference/memory/getThreadById.md +24 -0
  403. package/.docs/reference/memory/listThreads.md +145 -0
  404. package/.docs/reference/memory/memory-class.md +147 -0
  405. package/.docs/reference/memory/observational-memory.md +565 -0
  406. package/.docs/reference/memory/recall.md +91 -0
  407. package/.docs/reference/observability/tracing/bridges/otel.md +131 -0
  408. package/.docs/reference/observability/tracing/configuration.md +178 -0
  409. package/.docs/reference/observability/tracing/exporters/arize.md +141 -0
  410. package/.docs/reference/observability/tracing/exporters/braintrust.md +93 -0
  411. package/.docs/reference/observability/tracing/exporters/cloud-exporter.md +163 -0
  412. package/.docs/reference/observability/tracing/exporters/console-exporter.md +138 -0
  413. package/.docs/reference/observability/tracing/exporters/datadog.md +116 -0
  414. package/.docs/reference/observability/tracing/exporters/default-exporter.md +174 -0
  415. package/.docs/reference/observability/tracing/exporters/laminar.md +78 -0
  416. package/.docs/reference/observability/tracing/exporters/langfuse.md +134 -0
  417. package/.docs/reference/observability/tracing/exporters/langsmith.md +108 -0
  418. package/.docs/reference/observability/tracing/exporters/otel.md +199 -0
  419. package/.docs/reference/observability/tracing/exporters/posthog.md +92 -0
  420. package/.docs/reference/observability/tracing/exporters/sentry.md +184 -0
  421. package/.docs/reference/observability/tracing/instances.md +107 -0
  422. package/.docs/reference/observability/tracing/interfaces.md +743 -0
  423. package/.docs/reference/observability/tracing/processors/sensitive-data-filter.md +144 -0
  424. package/.docs/reference/observability/tracing/spans.md +224 -0
  425. package/.docs/reference/processors/batch-parts-processor.md +61 -0
  426. package/.docs/reference/processors/language-detector.md +82 -0
  427. package/.docs/reference/processors/message-history-processor.md +85 -0
  428. package/.docs/reference/processors/moderation-processor.md +104 -0
  429. package/.docs/reference/processors/pii-detector.md +108 -0
  430. package/.docs/reference/processors/processor-interface.md +521 -0
  431. package/.docs/reference/processors/prompt-injection-detector.md +72 -0
  432. package/.docs/reference/processors/semantic-recall-processor.md +117 -0
  433. package/.docs/reference/processors/system-prompt-scrubber.md +80 -0
  434. package/.docs/reference/processors/token-limiter-processor.md +115 -0
  435. package/.docs/reference/processors/tool-call-filter.md +85 -0
  436. package/.docs/reference/processors/tool-search-processor.md +111 -0
  437. package/.docs/reference/processors/unicode-normalizer.md +62 -0
  438. package/.docs/reference/processors/working-memory-processor.md +152 -0
  439. package/.docs/reference/rag/chunk.md +221 -0
  440. package/.docs/reference/rag/database-config.md +261 -0
  441. package/.docs/reference/rag/document.md +114 -0
  442. package/.docs/reference/rag/embeddings.md +92 -0
  443. package/.docs/reference/rag/extract-params.md +168 -0
  444. package/.docs/reference/rag/graph-rag.md +111 -0
  445. package/.docs/reference/rag/metadata-filters.md +216 -0
  446. package/.docs/reference/rag/rerank.md +75 -0
  447. package/.docs/reference/rag/rerankWithScorer.md +80 -0
  448. package/.docs/reference/server/create-route.md +262 -0
  449. package/.docs/reference/server/express-adapter.md +176 -0
  450. package/.docs/reference/server/fastify-adapter.md +90 -0
  451. package/.docs/reference/server/hono-adapter.md +162 -0
  452. package/.docs/reference/server/koa-adapter.md +127 -0
  453. package/.docs/reference/server/mastra-server.md +298 -0
  454. package/.docs/reference/server/register-api-route.md +249 -0
  455. package/.docs/reference/server/routes.md +306 -0
  456. package/.docs/reference/storage/cloudflare-d1.md +218 -0
  457. package/.docs/reference/storage/cloudflare.md +88 -0
  458. package/.docs/reference/storage/composite.md +235 -0
  459. package/.docs/reference/storage/convex.md +161 -0
  460. package/.docs/reference/storage/dynamodb.md +282 -0
  461. package/.docs/reference/storage/lance.md +131 -0
  462. package/.docs/reference/storage/libsql.md +135 -0
  463. package/.docs/reference/storage/mongodb.md +262 -0
  464. package/.docs/reference/storage/mssql.md +157 -0
  465. package/.docs/reference/storage/overview.md +121 -0
  466. package/.docs/reference/storage/postgresql.md +526 -0
  467. package/.docs/reference/storage/upstash.md +160 -0
  468. package/.docs/reference/streaming/ChunkType.md +292 -0
  469. package/.docs/reference/streaming/agents/MastraModelOutput.md +182 -0
  470. package/.docs/reference/streaming/agents/stream.md +221 -0
  471. package/.docs/reference/streaming/agents/streamLegacy.md +142 -0
  472. package/.docs/reference/streaming/workflows/observeStream.md +42 -0
  473. package/.docs/reference/streaming/workflows/resumeStream.md +61 -0
  474. package/.docs/reference/streaming/workflows/stream.md +88 -0
  475. package/.docs/reference/streaming/workflows/timeTravelStream.md +142 -0
  476. package/.docs/reference/templates/overview.md +194 -0
  477. package/.docs/reference/tools/create-tool.md +237 -0
  478. package/.docs/reference/tools/document-chunker-tool.md +89 -0
  479. package/.docs/reference/tools/graph-rag-tool.md +182 -0
  480. package/.docs/reference/tools/mcp-client.md +954 -0
  481. package/.docs/reference/tools/mcp-server.md +1271 -0
  482. package/.docs/reference/tools/vector-query-tool.md +459 -0
  483. package/.docs/reference/vectors/astra.md +121 -0
  484. package/.docs/reference/vectors/chroma.md +264 -0
  485. package/.docs/reference/vectors/convex.md +300 -0
  486. package/.docs/reference/vectors/couchbase.md +226 -0
  487. package/.docs/reference/vectors/duckdb.md +318 -0
  488. package/.docs/reference/vectors/elasticsearch.md +189 -0
  489. package/.docs/reference/vectors/lance.md +220 -0
  490. package/.docs/reference/vectors/libsql.md +305 -0
  491. package/.docs/reference/vectors/mongodb.md +295 -0
  492. package/.docs/reference/vectors/opensearch.md +99 -0
  493. package/.docs/reference/vectors/pg.md +408 -0
  494. package/.docs/reference/vectors/pinecone.md +168 -0
  495. package/.docs/reference/vectors/qdrant.md +222 -0
  496. package/.docs/reference/vectors/s3vectors.md +277 -0
  497. package/.docs/reference/vectors/turbopuffer.md +157 -0
  498. package/.docs/reference/vectors/upstash.md +294 -0
  499. package/.docs/reference/vectors/vectorize.md +147 -0
  500. package/.docs/reference/voice/azure.md +148 -0
  501. package/.docs/reference/voice/cloudflare.md +83 -0
  502. package/.docs/reference/voice/composite-voice.md +121 -0
  503. package/.docs/reference/voice/deepgram.md +79 -0
  504. package/.docs/reference/voice/elevenlabs.md +98 -0
  505. package/.docs/reference/voice/google-gemini-live.md +378 -0
  506. package/.docs/reference/voice/google.md +228 -0
  507. package/.docs/reference/voice/mastra-voice.md +311 -0
  508. package/.docs/reference/voice/murf.md +122 -0
  509. package/.docs/reference/voice/openai-realtime.md +203 -0
  510. package/.docs/reference/voice/openai.md +88 -0
  511. package/.docs/reference/voice/playai.md +80 -0
  512. package/.docs/reference/voice/sarvam.md +126 -0
  513. package/.docs/reference/voice/speechify.md +75 -0
  514. package/.docs/reference/voice/voice.addInstructions.md +55 -0
  515. package/.docs/reference/voice/voice.addTools.md +67 -0
  516. package/.docs/reference/voice/voice.answer.md +54 -0
  517. package/.docs/reference/voice/voice.close.md +51 -0
  518. package/.docs/reference/voice/voice.connect.md +94 -0
  519. package/.docs/reference/voice/voice.events.md +37 -0
  520. package/.docs/reference/voice/voice.getSpeakers.md +129 -0
  521. package/.docs/reference/voice/voice.listen.md +164 -0
  522. package/.docs/reference/voice/voice.off.md +54 -0
  523. package/.docs/reference/voice/voice.on.md +111 -0
  524. package/.docs/reference/voice/voice.send.md +65 -0
  525. package/.docs/reference/voice/voice.speak.md +157 -0
  526. package/.docs/reference/voice/voice.updateConfig.md +60 -0
  527. package/.docs/reference/workflows/run-methods/cancel.md +86 -0
  528. package/.docs/reference/workflows/run-methods/restart.md +33 -0
  529. package/.docs/reference/workflows/run-methods/resume.md +59 -0
  530. package/.docs/reference/workflows/run-methods/start.md +58 -0
  531. package/.docs/reference/workflows/run-methods/startAsync.md +67 -0
  532. package/.docs/reference/workflows/run-methods/timeTravel.md +142 -0
  533. package/.docs/reference/workflows/run.md +59 -0
  534. package/.docs/reference/workflows/step.md +119 -0
  535. package/.docs/reference/workflows/workflow-methods/branch.md +25 -0
  536. package/.docs/reference/workflows/workflow-methods/commit.md +17 -0
  537. package/.docs/reference/workflows/workflow-methods/create-run.md +63 -0
  538. package/.docs/reference/workflows/workflow-methods/dountil.md +25 -0
  539. package/.docs/reference/workflows/workflow-methods/dowhile.md +25 -0
  540. package/.docs/reference/workflows/workflow-methods/foreach.md +118 -0
  541. package/.docs/reference/workflows/workflow-methods/map.md +93 -0
  542. package/.docs/reference/workflows/workflow-methods/parallel.md +21 -0
  543. package/.docs/reference/workflows/workflow-methods/sleep.md +35 -0
  544. package/.docs/reference/workflows/workflow-methods/sleepUntil.md +35 -0
  545. package/.docs/reference/workflows/workflow-methods/then.md +21 -0
  546. package/.docs/reference/workflows/workflow.md +157 -0
  547. package/.docs/reference/workspace/e2b-sandbox.md +289 -0
  548. package/.docs/reference/workspace/filesystem.md +255 -0
  549. package/.docs/reference/workspace/gcs-filesystem.md +174 -0
  550. package/.docs/reference/workspace/local-filesystem.md +343 -0
  551. package/.docs/reference/workspace/local-sandbox.md +301 -0
  552. package/.docs/reference/workspace/s3-filesystem.md +175 -0
  553. package/.docs/reference/workspace/sandbox.md +87 -0
  554. package/.docs/reference/workspace/workspace-class.md +244 -0
  555. package/CHANGELOG.md +8 -0
  556. package/package.json +5 -5
@@ -0,0 +1,236 @@
1
+ # Building a PR Description Agent for GitHub Actions
2
+
3
+ In this guide, you'll build a [GitHub Action](https://docs.github.com/en/actions) that uses a Mastra agent to read pull request diffs, generate multi-language summaries, and write them directly to the PR description in the GitHub UI. The action runs whenever a pull request is created or updated and regenerates the description as the diff changes.
4
+
5
+ This approach is similar to AI-powered PR tools like [CodeRabbit](https://coderabbit.ai/) and [Greptile](https://www.greptile.com/), but built using native GitHub Actions workflows and Mastra agents.
6
+
7
+ The setup consists of three parts:
8
+
9
+ - A Mastra agent that generates the description
10
+ - A GitHub Actions workflow that triggers on pull requests
11
+ - A Node.js script that connects the workflow to the agent
12
+
13
+ The finished action writes a description with summaries in English, Spanish, and Japanese, each marked with a flag emoji for easy scanning. For example:
14
+
15
+ ```text
16
+ 🇬🇧 English
17
+ This PR integrates Astro into the project, adding configuration files and updating scripts to support Astro development.
18
+
19
+ 🇪🇸 Español
20
+ Este PR integra Astro en el proyecto, añadiendo archivos de configuración y actualizando scripts para soportar el desarrollo con Astro.
21
+
22
+ 🇯🇵 日本語
23
+ このPRは、Astroをプロジェクトに統合し、Astro開発をサポートするための設定ファイルを追加し、スクリプトを更新します。
24
+ ```
25
+
26
+ ## Before you begin
27
+
28
+ - A Mastra project (see [Quickstart](https://mastra.ai/guides/getting-started/quickstart))
29
+ - An API key from a supported [model provider](https://mastra.ai/models). If you don't have a preference, use [OpenAI](https://mastra.ai/models/providers/openai)
30
+ - Node.js `v22.13.0` or later
31
+
32
+ ### Set up repository secrets
33
+
34
+ The workflow needs access to your model provider API key. Add it as a repository secret in GitHub:
35
+
36
+ 1. Go to your repository on GitHub
37
+
38
+ 2. Navigate to **Settings** > **Secrets and variables** > **Actions**
39
+
40
+ 3. Click **New repository secret**
41
+
42
+ 4. Add your API key with the name `OPENAI_API_KEY` (or the appropriate key for your provider)
43
+
44
+ ![Screenshot of repository secrets in GitHub UI](/assets/images/github-action-repository-secrets-4e97642b3aa65178a3459a5deebe6f79.jpg)
45
+
46
+ The workflow references this secret as `${{ secrets.OPENAI_API_KEY }}` and makes it available to the Mastra agent at runtime.
47
+
48
+ ## Create the description agent
49
+
50
+ The PR description agent is responsible for turning a git diff into a clear, reviewer-friendly pull request description.
51
+
52
+ This agent receives the raw diff from a pull request. It generates descriptions in the configured languages and formats the output using emoji flags so each language section is easy to scan in the PR.
53
+
54
+ ```ts
55
+ import { Agent } from '@mastra/core/agent'
56
+
57
+ export const descriptionAgent = new Agent({
58
+ id: 'description-agent',
59
+ name: 'PR Description Agent',
60
+ instructions: `You are a helpful assistant that creates clear, concise PR descriptions.
61
+
62
+ When given a git diff of changed files, you will:
63
+ 1. Analyze the changes to understand what was modified
64
+ 2. Write a brief summary and list of changes
65
+ 3. Output the same content in English, Spanish, and Japanese
66
+
67
+ Guidelines:
68
+ - Be concise but informative
69
+ - Focus on the "what" and "why" of changes
70
+ - Use technical terms appropriately
71
+ - Keep bullet points short and scannable
72
+ - Each language section should contain the same information, naturally translated
73
+
74
+ Output format:
75
+
76
+ ### 🇬🇧 English
77
+
78
+ [1-2 sentence summary]
79
+
80
+ - [Change 1]
81
+ - [Change 2]
82
+ - [Change 3]
83
+
84
+ ---
85
+
86
+ ### 🇪🇸 Español
87
+
88
+ [Same summary in Spanish]
89
+
90
+ - [Same changes in Spanish]
91
+
92
+ ---
93
+
94
+ ### 🇯🇵 日本語
95
+
96
+ [Same summary in Japanese]
97
+
98
+ - [Same changes in Japanese]
99
+ `,
100
+ model: 'openai/gpt-4o',
101
+ })
102
+ ```
103
+
104
+ ### Test the agent locally
105
+
106
+ Before deploying the workflow, you can test the agent in [Mastra Studio](https://mastra.ai/docs/getting-started/studio) to verify it generates descriptions correctly.
107
+
108
+ 1. Get a diff from any public GitHub PR by appending `.diff` to the PR URL:
109
+
110
+ ```text
111
+ https://github.com/owner/repo/pull/123.diff
112
+ ```
113
+
114
+ 2. Open the PR Description Agent in Studio and paste the diff content with this prompt:
115
+
116
+ "Please create a PR description for the following changes. `<paste the diff content here>`"
117
+
118
+ The agent will return a formatted description with sections in English, Spanish, and Japanese.
119
+
120
+ ## GitHub Actions
121
+
122
+ GitHub Actions run your workflows in short-lived environments on GitHub's infrastructure. Each run starts with a clean virtual machine, checks out your code, installs dependencies, runs your workflow steps, and then shuts down. Nothing persists between runs unless you explicitly save it as an artifact or cache.
123
+
124
+ ### Create the workflow
125
+
126
+ GitHub Actions workflows live in the `.github/workflows` directory. Create a `.github` directory at the root of your project, then create a `workflows` directory inside it. Add a file named `pr-description.yml`.
127
+
128
+ This workflow runs whenever a pull request is opened or updated. It generates a diff for the PR, calls the Mastra agent to describe the changes, and writes the description directly into the PR in the GitHub UI.
129
+
130
+ ```yaml
131
+ name: PR Description Generator
132
+
133
+ on:
134
+ pull_request:
135
+ types: [opened, synchronize]
136
+
137
+ permissions:
138
+ contents: read
139
+ pull-requests: write
140
+
141
+ env:
142
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
143
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
144
+ PR_DIFF_FILE: /tmp/pr_diff.txt
145
+ PR_DESCRIPTION_FILE: /tmp/pr_description.md
146
+
147
+ jobs:
148
+ generate-description:
149
+ runs-on: ubuntu-latest
150
+ steps:
151
+ - uses: actions/checkout@v4
152
+ with:
153
+ fetch-depth: 0
154
+
155
+ - uses: actions/setup-node@v4
156
+ with:
157
+ node-version: '22'
158
+ cache: 'npm'
159
+
160
+ - run: npm ci
161
+
162
+ - id: pr
163
+ run: |
164
+ BASE_REF=$(gh pr view ${{ github.event.pull_request.number }} --json baseRefName -q '.baseRefName')
165
+ git fetch origin $BASE_REF
166
+ git diff origin/$BASE_REF...HEAD -- . ':!package-lock.json' > $PR_DIFF_FILE
167
+
168
+ - run: npx tsx .github/scripts/generate-description.ts
169
+
170
+ - run: gh pr edit ${{ github.event.pull_request.number }} --body-file $PR_DESCRIPTION_FILE
171
+ ```
172
+
173
+ #### The workflow explained
174
+
175
+ - **`on: pull_request`**: Runs when a pull request is opened or updated.
176
+ - **`permissions: pull-requests: write`**: Allows the workflow to update the PR description.
177
+ - **`env`**: Defines shared file paths used across steps and reads required values from repository secrets, including the model API key used by the Mastra agent.
178
+ - **`actions/checkout@v4` + git commands**: Checks out the full repository history, fetches the PR base branch, and writes the PR diff to `/tmp/pr_diff.txt`.
179
+ - **`actions/setup-node@v4`**: Sets up the Node.js runtime used by the workflow.
180
+ - **`npm ci`**: Installs the repository's Node.js dependencies from the lockfile.
181
+ - **`generate-description.ts`**: Reads `/tmp/pr_diff.txt`, calls the Mastra agent, and writes the generated description to `/tmp/pr_description.md`.
182
+ - **`gh pr edit`**: Updates the pull request description using the contents of `/tmp/pr_description.md`.
183
+
184
+ > **Note:** The workflow excludes `package-lock.json` when generating the diff. Lockfiles are often large and noisy, and including them can overwhelm the agent's context window and make the resulting description harder to reason about.
185
+
186
+ ### Create the workflow script
187
+
188
+ Create a `scripts` directory inside `.github` and add a file named `generate-description.ts`.
189
+
190
+ This script reads the PR diff from `PR_DIFF_FILE`, generates a description using the Mastra agent, and writes the result to `PR_DESCRIPTION_FILE` for the workflow to publish to the pull request.
191
+
192
+ ```typescript
193
+ import { readFileSync, writeFileSync } from 'fs'
194
+ import { mastra } from '../../src/mastra'
195
+
196
+ const agent = mastra.getAgent('descriptionAgent')
197
+
198
+ await agent.generate(
199
+ `Please create a PR description for the following changes.
200
+
201
+ Git diff:
202
+ \`\`\`diff
203
+ ${readFileSync(process.env.PR_DIFF_FILE!, 'utf-8')}
204
+ \`\`\``,
205
+ {
206
+ onError: () => {
207
+ writeFileSync(
208
+ process.env.PR_DESCRIPTION_FILE!,
209
+ 'This PR diff is too large to generate a description automatically.',
210
+ )
211
+ },
212
+ onFinish: result => {
213
+ writeFileSync(process.env.PR_DESCRIPTION_FILE!, result.text)
214
+ },
215
+ },
216
+ )
217
+ ```
218
+
219
+ #### The workflow script explained
220
+
221
+ - **`mastra.getAgent("descriptionAgent")`**: Gets the Mastra agent that generates the PR description.
222
+ - **`agent.generate(...)`**: Reads the pull request diff from `PR_DIFF_FILE` and asks the agent to write a PR description.
223
+ - **`onError` callback**: Writes a fallback message to `PR_DESCRIPTION_FILE` when the diff is too large to process.
224
+ - **`onFinish` callback**: Writes the generated PR description to `PR_DESCRIPTION_FILE`.
225
+
226
+ ## Next steps
227
+
228
+ You now have a GitHub Action that generates multi-language PR descriptions using a Mastra agent. Once the workflow and supporting files are merged into your main branch, the agent will run automatically the next time a pull request is created or updated. You can monitor the run in the **Actions** tab of your repository.
229
+
230
+ From here, you can customize the agent instructions, change the output languages, or extend the workflow to handle other events.
231
+
232
+ To learn more:
233
+
234
+ - Read the [agents](https://mastra.ai/docs/agents/overview) documentation
235
+ - Give your agent [tools](https://mastra.ai/docs/agents/using-tools) to fetch additional context
236
+ - Explore other [GitHub Actions triggers](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows) like issue comments or releases
@@ -0,0 +1,416 @@
1
+ # Building a Notes MCP Server
2
+
3
+ In this guide, you'll learn how to build a complete MCP (Model Context Protocol) server from scratch. This server will manage a collection of markdown notes and has these features:
4
+
5
+ 1. **List and Read Notes**: Allow clients to browse and view markdown files stored on the server
6
+ 2. **Write Notes**: Provide a tool for creating or updating notes
7
+ 3. **Offer Smart Prompts**: Generate contextual prompts, like creating a daily note template or summarizing existing content
8
+
9
+ ## Prerequisites
10
+
11
+ - Node.js `v22.13.0` or later installed
12
+ - An API key from a supported [Model Provider](https://mastra.ai/models)
13
+ - An existing Mastra project (Follow the [installation guide](https://mastra.ai/guides/getting-started/quickstart) to set up a new project)
14
+
15
+ ## Adding necessary dependencies & files
16
+
17
+ Before you can create an MCP server you first need to install additional dependencies and set up a boilerplate folder structure.
18
+
19
+ 1. Add `@mastra/mcp` to your project:
20
+
21
+ **npm**:
22
+
23
+ ```bash
24
+ npm install @mastra/mcp@latest
25
+ ```
26
+
27
+ **pnpm**:
28
+
29
+ ```bash
30
+ pnpm add @mastra/mcp@latest
31
+ ```
32
+
33
+ **Yarn**:
34
+
35
+ ```bash
36
+ yarn add @mastra/mcp@latest
37
+ ```
38
+
39
+ **Bun**:
40
+
41
+ ```bash
42
+ bun add @mastra/mcp@latest
43
+ ```
44
+
45
+ 2. After following the default [installation guide](https://mastra.ai/guides/getting-started/quickstart) your project will include files that are not relevant for this guide. You can safely remove them:
46
+
47
+ ```bash
48
+ rm -rf src/mastra/agents src/mastra/workflows src/mastra/tools/weather-tool.ts
49
+ ```
50
+
51
+ You should also change the `src/mastra/index.ts` file like so:
52
+
53
+ ```ts
54
+ import { Mastra } from '@mastra/core'
55
+ import { PinoLogger } from '@mastra/loggers'
56
+ import { LibSQLStore } from '@mastra/libsql'
57
+
58
+ export const mastra = new Mastra({
59
+ storage: new LibSQLStore({
60
+ id: 'mastra-storage',
61
+ // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
62
+ url: ':memory:',
63
+ }),
64
+ logger: new PinoLogger({
65
+ name: 'Mastra',
66
+ level: 'info',
67
+ }),
68
+ })
69
+ ```
70
+
71
+ 3. Create a dedicated directory for your MCP server's logic and a `notes` directory for your notes:
72
+
73
+ ```bash
74
+ mkdir notes src/mastra/mcp
75
+ ```
76
+
77
+ Create the following files:
78
+
79
+ ```bash
80
+ touch src/mastra/mcp/{server,resources,prompts}.ts
81
+ ```
82
+
83
+ - `server.ts`: Will contain the main MCP server configuration
84
+ - `resources.ts`: Will handle listing and reading note files
85
+ - `prompts.ts`: Will contain the logic for the smart prompts
86
+
87
+ The resulting directory structure should look like this:
88
+
89
+ ```text
90
+ <your-project-name>/
91
+ ├── notes/
92
+ └── src/
93
+ └── mastra/
94
+ ├── index.ts
95
+ ├── mcp/
96
+ │ ├── server.ts
97
+ │ ├── resources.ts
98
+ │ └── prompts.ts
99
+ └── tools/
100
+ ```
101
+
102
+ ## Creating the MCP Server
103
+
104
+ Let's add the MCP server!
105
+
106
+ 1. In `src/mastra/mcp/server.ts`, define the MCP server instance:
107
+
108
+ ```typescript
109
+ import { MCPServer } from '@mastra/mcp'
110
+
111
+ export const notes = new MCPServer({
112
+ id: 'notes',
113
+ name: 'Notes Server',
114
+ version: '0.1.0',
115
+ tools: {},
116
+ })
117
+ ```
118
+
119
+ Register this MCP server in your Mastra instance at `src/mastra/index.ts`. The key `notes` is the public identifier for your MCP server:
120
+
121
+ ```typescript
122
+ import { Mastra } from '@mastra/core'
123
+ import { PinoLogger } from '@mastra/loggers'
124
+ import { LibSQLStore } from '@mastra/libsql'
125
+ import { notes } from './mcp/server'
126
+
127
+ export const mastra = new Mastra({
128
+ storage: new LibSQLStore({
129
+ id: 'mastra-storage',
130
+ // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
131
+ url: ':memory:',
132
+ }),
133
+ logger: new PinoLogger({
134
+ name: 'Mastra',
135
+ level: 'info',
136
+ }),
137
+ mcpServers: {
138
+ notes,
139
+ },
140
+ })
141
+ ```
142
+
143
+ 2. Resource handlers allow clients to discover and read the content your server manages. Implement handlers to work with markdown files in the `notes` directory. Add to the `src/mastra/mcp/resources.ts` file:
144
+
145
+ ```typescript
146
+ import fs from 'fs/promises'
147
+ import path from 'path'
148
+ import { fileURLToPath } from 'url'
149
+ import type { MCPServerResources, Resource } from '@mastra/mcp'
150
+
151
+ const __filename = fileURLToPath(import.meta.url)
152
+ const __dirname = path.dirname(__filename)
153
+ const NOTES_DIR = path.resolve(__dirname, '../../notes') // relative to the default output directory
154
+
155
+ const listNoteFiles = async (): Promise<Resource[]> => {
156
+ try {
157
+ await fs.mkdir(NOTES_DIR, { recursive: true })
158
+ const files = await fs.readdir(NOTES_DIR)
159
+ return files
160
+ .filter(file => file.endsWith('.md'))
161
+ .map(file => {
162
+ const title = file.replace('.md', '')
163
+ return {
164
+ uri: `notes://${title}`,
165
+ name: title,
166
+ description: `A note about ${title}`,
167
+ mime_type: 'text/markdown',
168
+ }
169
+ })
170
+ } catch (error) {
171
+ console.error('Error listing note resources:', error)
172
+ return []
173
+ }
174
+ }
175
+
176
+ const readNoteFile = async (uri: string): Promise<string | null> => {
177
+ const title = uri.replace('notes://', '')
178
+ const notePath = path.join(NOTES_DIR, `${title}.md`)
179
+ try {
180
+ return await fs.readFile(notePath, 'utf-8')
181
+ } catch (error) {
182
+ if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {
183
+ console.error(`Error reading resource ${uri}:`, error)
184
+ }
185
+ return null
186
+ }
187
+ }
188
+
189
+ export const resourceHandlers: MCPServerResources = {
190
+ listResources: listNoteFiles,
191
+ getResourceContent: async ({ uri }: { uri: string }) => {
192
+ const content = await readNoteFile(uri)
193
+ if (content === null) return { text: '' }
194
+ return { text: content }
195
+ },
196
+ }
197
+ ```
198
+
199
+ Register these resource handlers in `src/mastra/mcp/server.ts`:
200
+
201
+ ```typescript
202
+ import { MCPServer } from '@mastra/mcp'
203
+ import { resourceHandlers } from './resources'
204
+
205
+ export const notes = new MCPServer({
206
+ id: 'notes',
207
+ name: 'Notes Server',
208
+ version: '0.1.0',
209
+ tools: {},
210
+ resources: resourceHandlers,
211
+ })
212
+ ```
213
+
214
+ 3. Tools are the actions your server can perform. Let's create a `write` tool. First, define the tool in `src/mastra/tools/write-note.ts`:
215
+
216
+ ```typescript
217
+ import { createTool } from '@mastra/core/tools'
218
+ import { z } from 'zod'
219
+ import { fileURLToPath } from 'url'
220
+ import path from 'node:path'
221
+ import fs from 'fs/promises'
222
+
223
+ const __filename = fileURLToPath(import.meta.url)
224
+ const __dirname = path.dirname(__filename)
225
+ const NOTES_DIR = path.resolve(__dirname, '../../../notes')
226
+
227
+ export const writeNoteTool = createTool({
228
+ id: 'write',
229
+ description: 'Write a new note or overwrite an existing one.',
230
+ inputSchema: z.object({
231
+ title: z.string().nonempty().describe('The title of the note. This will be the filename.'),
232
+ content: z.string().nonempty().describe('The markdown content of the note.'),
233
+ }),
234
+ outputSchema: z.string().nonempty(),
235
+ execute: async inputData => {
236
+ try {
237
+ const { title, content } = inputData
238
+ const filePath = path.join(NOTES_DIR, `${title}.md`)
239
+ await fs.mkdir(NOTES_DIR, { recursive: true })
240
+ await fs.writeFile(filePath, content, 'utf-8')
241
+ return `Successfully wrote to note \"${title}\".`
242
+ } catch (error: any) {
243
+ return `Error writing note: ${error.message}`
244
+ }
245
+ },
246
+ })
247
+ ```
248
+
249
+ Register this tool in `src/mastra/mcp/server.ts`:
250
+
251
+ ```typescript
252
+ import { MCPServer } from '@mastra/mcp'
253
+ import { resourceHandlers } from './resources'
254
+ import { writeNoteTool } from '../tools/write-note'
255
+
256
+ export const notes = new MCPServer({
257
+ id: 'notes',
258
+ name: 'Notes Server',
259
+ version: '0.1.0',
260
+ resources: resourceHandlers,
261
+ tools: {
262
+ write: writeNoteTool,
263
+ },
264
+ })
265
+ ```
266
+
267
+ 4. Prompt handlers provide ready-to-use prompts for clients. You'll add these three:
268
+
269
+ - Daily note
270
+ - Summarize a note
271
+ - Brainstorm ideas
272
+
273
+ This requires a few markdown-parsing libraries you need to install:
274
+
275
+ ```bash
276
+ npm install unified remark-parse gray-matter @types/unist
277
+ ```
278
+
279
+ Implement the prompts in `src/mastra/mcp/prompts.ts`:
280
+
281
+ ```typescript
282
+ import type { MCPServerPrompts } from '@mastra/mcp'
283
+ import { unified } from 'unified'
284
+ import remarkParse from 'remark-parse'
285
+ import matter from 'gray-matter'
286
+ import type { Node } from 'unist'
287
+
288
+ const prompts = [
289
+ {
290
+ name: 'new_daily_note',
291
+ description: 'Create a new daily note.',
292
+ version: '1.0.0',
293
+ },
294
+ {
295
+ name: 'summarize_note',
296
+ description: 'Give me a TL;DR of the note.',
297
+ version: '1.0.0',
298
+ },
299
+ {
300
+ name: 'brainstorm_ideas',
301
+ description: 'Brainstorm new ideas based on a note.',
302
+ version: '1.0.0',
303
+ },
304
+ ]
305
+
306
+ function stringifyNode(node: Node): string {
307
+ if ('value' in node && typeof node.value === 'string') return node.value
308
+ if ('children' in node && Array.isArray(node.children))
309
+ return node.children.map(stringifyNode).join('')
310
+ return ''
311
+ }
312
+
313
+ export async function analyzeMarkdown(md: string) {
314
+ const { content } = matter(md)
315
+ const tree = unified().use(remarkParse).parse(content)
316
+ const headings: string[] = []
317
+ const wordCounts: Record<string, number> = {}
318
+ let currentHeading = 'untitled'
319
+ wordCounts[currentHeading] = 0
320
+ tree.children.forEach(node => {
321
+ if (node.type === 'heading' && node.depth === 2) {
322
+ currentHeading = stringifyNode(node)
323
+ headings.push(currentHeading)
324
+ wordCounts[currentHeading] = 0
325
+ } else {
326
+ const textContent = stringifyNode(node)
327
+ if (textContent.trim()) {
328
+ wordCounts[currentHeading] =
329
+ (wordCounts[currentHeading] || 0) + textContent.split(/\\s+/).length
330
+ }
331
+ }
332
+ })
333
+ return { headings, wordCounts }
334
+ }
335
+
336
+ const getPromptMessages: MCPServerPrompts['getPromptMessages'] = async ({ name, args }) => {
337
+ switch (name) {
338
+ case 'new_daily_note':
339
+ const today = new Date().toISOString().split('T')[0]
340
+ return [
341
+ {
342
+ role: 'user',
343
+ content: {
344
+ type: 'text',
345
+ text: `Create a new note titled \"${today}\" with sections: \"## Tasks\", \"## Meetings\", \"## Notes\".`,
346
+ },
347
+ },
348
+ ]
349
+ case 'summarize_note':
350
+ if (!args?.noteContent) throw new Error('No content provided')
351
+ const metaSum = await analyzeMarkdown(args.noteContent as string)
352
+ return [
353
+ {
354
+ role: 'user',
355
+ content: {
356
+ type: 'text',
357
+ text: `Summarize each section in ≤ 3 bullets.\\n\\n### Outline\\n${metaSum.headings.map(h => `- ${h} (${metaSum.wordCounts[h] || 0} words)`).join('\\n')}`.trim(),
358
+ },
359
+ },
360
+ ]
361
+ case 'brainstorm_ideas':
362
+ if (!args?.noteContent) throw new Error('No content provided')
363
+ const metaBrain = await analyzeMarkdown(args.noteContent as string)
364
+ return [
365
+ {
366
+ role: 'user',
367
+ content: {
368
+ type: 'text',
369
+ text: `Brainstorm 3 ideas for underdeveloped sections below ${args?.topic ? `on ${args.topic}` : '.'}\\n\\nUnderdeveloped sections:\\n${metaBrain.headings.length ? metaBrain.headings.map(h => `- ${h}`).join('\\n') : '- (none, pick any)'}`,
370
+ },
371
+ },
372
+ ]
373
+ default:
374
+ throw new Error(`Prompt \"${name}\" not found`)
375
+ }
376
+ }
377
+
378
+ export const promptHandlers: MCPServerPrompts = {
379
+ listPrompts: async () => prompts,
380
+ getPromptMessages,
381
+ }
382
+ ```
383
+
384
+ Register these prompt handlers in `src/mastra/mcp/server.ts`:
385
+
386
+ ```typescript
387
+ import { MCPServer } from '@mastra/mcp'
388
+ import { resourceHandlers } from './resources'
389
+ import { writeNoteTool } from '../tools/write-note'
390
+ import { promptHandlers } from './prompts'
391
+
392
+ export const notes = new MCPServer({
393
+ id: 'notes',
394
+ name: 'Notes Server',
395
+ version: '0.1.0',
396
+ resources: resourceHandlers,
397
+ prompts: promptHandlers,
398
+ tools: {
399
+ write: writeNoteTool,
400
+ },
401
+ })
402
+ ```
403
+
404
+ ## Run the Server
405
+
406
+ Great, you've authored your first MCP server! Now you can try it out by starting the Mastra dev server and opening [Studio](https://mastra.ai/docs/getting-started/studio):
407
+
408
+ ```bash
409
+ npm run dev
410
+ ```
411
+
412
+ Open [`http://localhost:4111`](http://localhost:4111) in your browser. In the left sidebar, select **MCP Servers**. Select the **notes** MCP server.
413
+
414
+ You'll now be presented with instructions on how to add the MCP server to your IDE. You're able to use this MCP server with any MCP Client. On the right side under **Available Tools** you can also select the **write** tool.
415
+
416
+ Inside the **write** tool, try it out by providing `test` as a name and `this is a test` for the markdown content. After clicking on **Submit** you'll have a new `test.md` file inside `notes`.