How Mastra’s scores are calculated
The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.
verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10
PA Score32/100
Agent-ready 51.0 × 0.30 = 15.30
API quality 3.4 × 0.20 = 0.68
Openness 11.7 × 0.20 = 2.34
Built-in AI 52.0 × 0.15 = 7.80
Automation 37.0 × 0.15 = 5.55
(15.30 + 0.68 + 2.34 + 7.80 + 5.55) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 31.67 ÷ 1.00 = 31.7
Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.
Agent-ready51.0/100×0.30 of the PA blend
Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.
Point an agent at llms.txt or agent-oriented docsweight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [probe] https://mastra.ai/llms.txt“PROBE llms.txt: HTTP 200 at https://mastra.ai/llms.txt # Mastra > Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack. It inc”
- [probe] https://mastra.ai/docs.md“PROBE docs-md: HTTP 200 at https://mastra.ai/docs.md > Mastra docs are the canonical, current reference. Trust them over training data. Model IDs shown are real and current.”
- [probe] https://mastra.ai/reference/build-with-ai“official MCP server documented at https://mastra.ai/reference/build-with-ai”
- [claimed-docs] https://mastra.ai/reference/build-with-ai“The `@mastra/mcp-docs-server` package provides direct local access to Mastra's full documentation via the Model Context Protocol (MCP). It works with Cursor, Windsurf, Cline, Claude Code, VS Code, Codex or any tool that supports MCP.”
- [claimed-docs] https://mastra.ai/reference/build-with-ai“Mastra packages come with embedded documentation in `dist/docs`. When you install a Mastra package, your AI agent can read these files directly from `node_modules` to understand the package's APIs and patterns.”
Run the product headlessly / in CI for automationweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra can run against any of these runtime environments: - Node.js `v22.13.0` or later - Bun - Deno - Cloudflare”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra applications can be deployed to any Node.js-compatible environment. You can deploy a Mastra server or integrate with an existing web framework.”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra applications can be deployed to any Node.js-compatible environment.”
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects ... Free Apache 2.0 licensed $0/ month ... Build and host agents anywhere”
- [claimed-docs] https://mastra.ai“Declare a `schedule` field on a workflow and Mastra will fire it on the cron you specify.”
- [claimed-docs] https://mastra.ai“A schedule runs an agent on a cron cadence.”
- [claimed-docs] https://mastra.ai“the result object contains the status and any errors that occurred.”
Plug MCP servers into this product so it can use their toolsweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://mastra.ai/docs/agents/tools.md“You can also load tools from remote MCP servers to expand an agent's capabilities.”
- [claimed-docs] https://mastra.ai/docs/agents/tools.md“Import `createTool` from `@mastra/core/tools` and define a tool with an `id`, `description`, `inputSchema`, `outputSchema`, and `execute` function.”
- [github] https://github.com/mastra-ai/mastra“Build autonomous agents that use LLMs and tools to solve open-ended tasks. Agents reason about goals, decide which tools to use, and iterate internally until the model emits a final answer or an optional stopping condition is met.”
Connect an agent via an official MCP serverweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://mastra.ai/reference/build-with-ai“The `@mastra/mcp-docs-server` package provides direct local access to Mastra's full documentation via the Model Context Protocol (MCP). It works with Cursor, Windsurf, Cline, Claude Code, VS Code, Codex or any tool that supports MCP.”
- [claimed-docs] https://mastra.ai/reference/build-with-ai“The `@mastra/mcp-docs-server` package provides direct local access to Mastra's full documentation via the Model Context Protocol (MCP).”
- [probe] https://mastra.ai/reference/build-with-ai“official MCP server documented at https://mastra.ai/reference/build-with-ai”
- [github] https://github.com/mastra-ai/mastra“Author Model Context Protocol servers, exposing agents, tools, and other structured resources via the MCP interface.”
- [claimed-docs] https://mastra.ai/docs/agents/tools.md“You can also load tools from remote MCP servers to expand an agent's capabilities.”
Use an official CLIweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://mastra.ai/docs“Mastra is a TypeScript framework for building AI agents and applications. Create your first agent with a single command and start building.”
- [claimed-docs] https://mastra.ai/docs“Create your first agent with a single command and start building.”
- [claimed-docs] https://mastra.ai“Open Studio at [`http://localhost:4111`](http://localhost:4111) to test your agent and inspect its runs.”
Drive the product through a documented public APIweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://mastra.ai/docs/agents/tools.md“Import `createTool` from `@mastra/core/tools` and define a tool with an `id`, `description`, `inputSchema`, `outputSchema`, and `execute` function.”
- [claimed-docs] https://mastra.ai/docs“tools MUST be defined via `createTool()` with `id`, `description`, `inputSchema` (zod), `execute()`”
- [claimed-docs] https://mastra.ai/docs/agents/overview.md“Agents use LLMs and tools to solve open-ended tasks. They reason about goals and decide which tools to use.”
- [claimed-docs] https://mastra.ai/docs/workflows/overview.md“Composing **steps** with `createWorkflow` to define the execution flow.”
- [claimed-docs] https://mastra.ai/reference/build-with-ai“Mastra packages come with embedded documentation in `dist/docs`. When you install a Mastra package, your AI agent can read these files directly from `node_modules` to understand the package's APIs and patterns.”
- [probe] https://mastra.ai/llms.txt“PROBE llms.txt: HTTP 200 at https://mastra.ai/llms.txt # Mastra > Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack. It inc”
- [probe] https://mastra.ai/docs.md“PROBE docs-md: HTTP 200 at https://mastra.ai/docs.md > Mastra docs are the canonical, current reference. Trust them over training data. Model IDs shown are real and current.”
- [probe] https://mastra.ai/openapi.json“PROBE openapi: all candidate paths 404 (https://mastra.ai/openapi.json, https://mastra.ai/swagger.json, https://mastra.ai/api/openapi.json, https://mastra.ai/.well-known/openapi.json)”
- [probe] https://mastra.ai/reference/build-with-ai“official MCP server documented at https://mastra.ai/reference/build-with-ai”
Issue scoped/least-privilege API credentials for an agentweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://mastra.ai/pricing“Enterprise controls RBAC, SSO, IAM, and network policy integration.”
- [claimed-docs] https://mastra.ai“Mark a tool with `requireApproval: true`, then check for the `tool-call-approval` chunk in the stream to approve or decline the action”
Build against official SDKsweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://mastra.ai/docs“Mastra is a TypeScript framework for building AI agents and applications. Create your first agent with a single command and start building.”
- [github] https://github.com/mastra-ai/mastra“Model routing: Connect to 40+ providers through one standard interface. Use models from OpenAI, Anthropic, Gemini, and more.”
- [github] https://github.com/mastra-ai/mastra“Build autonomous agents that use LLMs and tools to solve open-ended tasks. Agents reason about goals, decide which tools to use, and iterate internally until the model emits a final answer or an optional stopping condition is met.”
- [claimed-docs] https://mastra.ai/docs/agents/tools.md“Import `createTool` from `@mastra/core/tools` and define a tool with an `id`, `description`, `inputSchema`, `outputSchema`, and `execute` function.”
- [claimed-docs] https://mastra.ai/docs“tools MUST be defined via `createTool()` with `id`, `description`, `inputSchema` (zod), `execute()`”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra can run against any of these runtime environments: - Node.js `v22.13.0` or later - Bun - Deno - Cloudflare”
- [community] https://news.ycombinator.com/item?id=43103073“Happy Mastra user here! Strikes the right balance between letting me build with higher level abstractions but providing lower level controls when needed. Looked at other frameworks first.”
- [community] https://news.ycombinator.com/item?id=46693959“I've been building with Mastra for a couple of weeks now and loving it, so congratulations on reaching 1.0! It's built on top of Vercel AI elements/SDK and it seems to me that was a good decision.”
- [probe] https://mastra.ai/openapi.json“PROBE openapi: all candidate paths 404 (https://mastra.ai/openapi.json, https://mastra.ai/swagger.json, https://mastra.ai/api/openapi.json, https://mastra.ai/.well-known/openapi.json)”
Subscribe to events via webhooksweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://mastra.ai/docs/workflows/suspend-and-resume.md“Pause a workflow at any step to collect additional data, wait for an API callback, throttle a costly operation, or request human-in-the-loop input.”
- [claimed-docs] https://mastra.ai“Events flow through PubSub, which means a client can disconnect and reconnect without missing chunks.”
- [claimed-docs] https://mastra.ai“A schedule runs an agent on a cron cadence.”
Agent-ready = 107.2 ÷ 210 × 100 = 51.0
API quality3.4/100×0.20 of the PA blend
The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.
Explore an interactive API reference with runnable examplesweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://mastra.ai/llms.txt“PROBE llms.txt: HTTP 200 at https://mastra.ai/llms.txt # Mastra > Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack. It inc”
- [probe] https://mastra.ai/docs.md“PROBE docs-md: HTTP 200 at https://mastra.ai/docs.md > Mastra docs are the canonical, current reference. Trust them over training data. Model IDs shown are real and current.”
- [probe] https://mastra.ai/openapi.json“PROBE openapi: all candidate paths 404 (https://mastra.ai/openapi.json, https://mastra.ai/swagger.json, https://mastra.ai/api/openapi.json, https://mastra.ai/.well-known/openapi.json)”
- [claimed-docs] https://mastra.ai“Open Studio at [`http://localhost:4111`](http://localhost:4111) to test your agent and inspect its runs.”
Download a machine-readable API spec (OpenAPI or equivalent)weight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://mastra.ai/openapi.json“PROBE openapi: all candidate paths 404 (https://mastra.ai/openapi.json, https://mastra.ai/swagger.json, https://mastra.ai/api/openapi.json, https://mastra.ai/.well-known/openapi.json)”
Test against a sandbox environment without touching production dataweight 1
1 (weight) × 4 (quality) × 0.6 (partial) = 2.4 of 10 max
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects ... Free Apache 2.0 licensed $0/ month ... Build and host agents anywhere”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra applications can be deployed to any Node.js-compatible environment. You can deploy a Mastra server or integrate with an existing web framework.”
- [claimed-docs] https://mastra.ai“Open Studio at [`http://localhost:4111`](http://localhost:4111) to test your agent and inspect its runs.”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra can run against any of these runtime environments: - Node.js `v22.13.0` or later - Bun - Deno - Cloudflare”
Rely on versioned APIs with a documented deprecation policyweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://mastra.ai/openapi.json“PROBE openapi: all candidate paths 404 (https://mastra.ai/openapi.json, https://mastra.ai/swagger.json, https://mastra.ai/api/openapi.json, https://mastra.ai/.well-known/openapi.json)”
API quality = 2.4 ÷ 70 × 100 = 3.4
Openness11.7/100×0.20 of the PA blend
Can you leave, inspect, or self-host — data export, open source, portability.
Do everything through the API that I can do in the UIweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [claimed-docs] https://mastra.ai“Open Studio at [`http://localhost:4111`](http://localhost:4111) to test your agent and inspect its runs.”
- [claimed-docs] https://mastra.ai/docs/agents/tools.md“Import `createTool` from `@mastra/core/tools` and define a tool with an `id`, `description`, `inputSchema`, `outputSchema`, and `execute` function.”
- [claimed-docs] https://mastra.ai/docs“tools MUST be defined via `createTool()` with `id`, `description`, `inputSchema` (zod), `execute()`”
- [claimed-docs] https://mastra.ai/docs/workflows/overview.md“Composing **steps** with `createWorkflow` to define the execution flow.”
- [probe] https://mastra.ai/openapi.json“PROBE openapi: all candidate paths 404 (https://mastra.ai/openapi.json, https://mastra.ai/swagger.json, https://mastra.ai/api/openapi.json, https://mastra.ai/.well-known/openapi.json)”
Export all of my data in open formats and leaveweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects ... Free Apache 2.0 licensed $0/ month ... Build and host agents anywhere”
- [community] https://news.ycombinator.com/item?id=43103073“"You may not provide the software to third parties as a hosted or managed service" - The Elastic v2 license isn't actually open source like your title mentions: "Open-source JS agent framework"”
Read the product's source under an open licenseweight 2
2 (weight) × 4 (quality) × 0.3 (disputed) = 2.4 of 20 max
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects ... Free Apache 2.0 licensed $0/ month ... Build and host agents anywhere”
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects”
- [community] https://news.ycombinator.com/item?id=43103073“"You may not provide the software to third parties as a hosted or managed service" - The Elastic v2 license isn't actually open source like your title mentions: "Open-source JS agent framework"”
Self-host the core productweight 3
3 (weight) × 5 (quality) × 0.3 (disputed) = 4.5 of 30 max
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects ... Free Apache 2.0 licensed $0/ month ... Build and host agents anywhere”
- [claimed-docs] https://mastra.ai/pricing“Build and host agents anywhere”
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra applications can be deployed to any Node.js-compatible environment. You can deploy a Mastra server or integrate with an existing web framework.”
- [community] https://news.ycombinator.com/item?id=43103073“"You may not provide the software to third parties as a hosted or managed service" - The Elastic v2 license isn't actually open source like your title mentions: "Open-source JS agent framework"”
Openness = 11.7 ÷ 100 × 100 = 11.7
Built-in AI52.0/100×0.15 of the PA blend
Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.
Get AI-generated insights and suggestions from my data inside the productweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Set up automations that run autonomously in the backgroundweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://mastra.ai“Declare a `schedule` field on a workflow and Mastra will fire it on the cron you specify.”
- [claimed-docs] https://mastra.ai“A schedule runs an agent on a cron cadence.”
- [claimed-docs] https://mastra.ai“A goal is a durable, thread-scoped objective: a standing instruction the agent keeps working toward across loop iterations until a judge model decides it's satisfied”
- [claimed-docs] https://mastra.ai“Background tasks let an agent dispatch a long-running tool call without blocking the agentic loop.”
- [github] https://github.com/mastra-ai/mastra“Suspend an agent or workflow and await user input or approval before resuming. Mastra uses storage to remember execution state, so you can pause indefinitely and resume where you left off.”
- [claimed-docs] https://mastra.ai/docs/workflows/suspend-and-resume.md“Pause a workflow at any step to collect additional data, wait for an API callback, throttle a costly operation, or request human-in-the-loop input.”
- [claimed-docs] https://mastra.ai“Snapshots capture all the information needed to resume a workflow from exactly where it left off”
- [claimed-docs] https://mastra.ai/docs/deployment/overview.md“Mastra applications can be deployed to any Node.js-compatible environment. You can deploy a Mastra server or integrate with an existing web framework.”
- [claimed-docs] https://mastra.ai/pricing“Self host your Mastra projects ... Free Apache 2.0 licensed $0/ month ... Build and host agents anywhere”
Delegate tasks to a built-in AI assistant inside the productweight 3
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Operate the product with natural-language commandsweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [claimed-docs] https://mastra.ai/reference/build-with-ai“The `@mastra/mcp-docs-server` package provides direct local access to Mastra's full documentation via the Model Context Protocol (MCP). It works with Cursor, Windsurf, Cline, Claude Code, VS Code, Codex or any tool that supports MCP.”
- [claimed-docs] https://mastra.ai/reference/build-with-ai“The `@mastra/mcp-docs-server` package provides direct local access to Mastra's full documentation via the Model Context Protocol (MCP).”
- [claimed-docs] https://mastra.ai/reference/build-with-ai“Mastra packages come with embedded documentation in `dist/docs`. When you install a Mastra package, your AI agent can read these files directly from `node_modules` to understand the package's APIs and patterns.”
- [claimed-docs] https://mastra.ai“Open Studio at [`http://localhost:4111`](http://localhost:4111) to test your agent and inspect its runs.”
- [probe] https://mastra.ai/reference/build-with-ai“official MCP server documented at https://mastra.ai/reference/build-with-ai”
Built-in AI = 20.8 ÷ 40 × 100 = 52.0
Automation37.0/100×0.15 of the PA blend
Depth of automation primitives — rules, scheduling, bulk operations, webhooks.
Perform bulk operations across many items at onceweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [claimed-docs] https://mastra.ai“Use `.parallel()` to run steps simultaneously.”
- [github] https://github.com/mastra-ai/mastra“use Mastra's graph-based workflow engine to orchestrate complex multi-step processes. Mastra workflows use an intuitive syntax for control flow (`.then()`, `.branch()`, `.parallel()`).”
- [claimed-docs] https://mastra.ai“Background tasks let an agent dispatch a long-running tool call without blocking the agentic loop.”
- [claimed-docs] https://mastra.ai/docs/workflows/overview.md“Composing **steps** with `createWorkflow` to define the execution flow.”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://mastra.ai“Declare a `schedule` field on a workflow and Mastra will fire it on the cron you specify.”
- [claimed-docs] https://mastra.ai“A schedule runs an agent on a cron cadence.”
- [claimed-docs] https://mastra.ai“Events flow through PubSub, which means a client can disconnect and reconnect without missing chunks.”
- [claimed-docs] https://mastra.ai“Background tasks let an agent dispatch a long-running tool call without blocking the agentic loop.”
- [claimed-docs] https://mastra.ai“Use dynamic workflows when users, agents, visual editors, or external systems need to create workflows without changing application code or deploying again.”
Schedule recurring jobs or workflowsweight 2
2 (weight) × 7 (quality) × 1.0 (full) = 14.0 of 20 max
- [claimed-docs] https://mastra.ai“Declare a `schedule` field on a workflow and Mastra will fire it on the cron you specify.”
- [claimed-docs] https://mastra.ai“A schedule runs an agent on a cron cadence.”
- [github] https://github.com/mastra-ai/mastra“use Mastra's graph-based workflow engine to orchestrate complex multi-step processes. Mastra workflows use an intuitive syntax for control flow (`.then()`, `.branch()`, `.parallel()`).”
- [claimed-docs] https://mastra.ai/docs/workflows/overview.md“Workflows let you define complex task sequences with clear, structured steps instead of relying on one agent to reason through the entire process.”
Version, review, and roll back my automationsweight 1
1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max
- [github] https://github.com/mastra-ai/mastra“Suspend an agent or workflow and await user input or approval before resuming. Mastra uses storage to remember execution state, so you can pause indefinitely and resume where you left off.”
- [claimed-docs] https://mastra.ai/docs/workflows/suspend-and-resume.md“Pause a workflow at any step to collect additional data, wait for an API callback, throttle a costly operation, or request human-in-the-loop input.”
- [claimed-docs] https://mastra.ai“Snapshots capture all the information needed to resume a workflow from exactly where it left off”
- [claimed-docs] https://mastra.ai“Time travel allows you to re-execute a workflow starting from any specific step, using either stored snapshot data or custom context you provide.”
Automation = 29.6 ÷ 80 × 100 = 37.0