How Morph’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 Score16/100
Agent-ready 43.0 × 0.30 = 12.90
API quality 0.0 × 0.20 = 0.00
Openness 4.8 × 0.20 = 0.96
Built-in AI 0.0 × 0.15 = 0.00
Automation 15.0 × 0.15 = 2.25
(12.90 + 0.00 + 0.96 + 0.00 + 2.25) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 16.11 ÷ 1.00 = 16.1
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-ready43.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://docs.morphllm.com/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.morphllm.com/llms.txt # Morph API Documentation > https://docs.morphllm.com > Base URL: https://api.morphllm.com/v1 > OpenAI-compatible. Use a”
- [probe] https://docs.morphllm.com/introduction.md“PROBE docs-md: HTTP 200 at https://docs.morphllm.com/introduction.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.morphllm.com/llms.txt > Use this file”
- [claimed-docs] https://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
Run the product headlessly / in CI for automationweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
- [claimed-docs] https://docs.morphllm.com/sdk/components/batch.md“Run thousands of chat completions offline at half price.”
- [claimed-docs] https://docs.morphllm.com/endpoints.md“Anthropic Messages supports the same open source chat models, token billing, and rate limits.”
- [probe] https://docs.morphllm.com/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.morphllm.com/llms.txt # Morph API Documentation > https://docs.morphllm.com > Base URL: https://api.morphllm.com/v1 > OpenAI-compatible. Use a”
Plug MCP servers into this product so it can use their toolsweight 3
n/a — not applicable to this product: excluded from numerator and denominator
- [claimed-docs] https://docs.morphllm.com/quickstart.md“Install the Morph MCP so Claude Code can read it”
- [claimed-docs] https://docs.morphllm.com/guides/mcp.md“Connect your favorite AI tools to Morph's blazing-fast file editing via Model Context Protocol.”
- [probe] https://docs.morphllm.com/guides/mcp“official MCP server documented at https://docs.morphllm.com/guides/mcp”
Connect an agent via an official MCP serverweight 3
3 (weight) × 7 (quality) × 1.0 (full) = 21.0 of 30 max
- [claimed-docs] https://docs.morphllm.com/guides/mcp.md“Connect your favorite AI tools to Morph's blazing-fast file editing via Model Context Protocol.”
- [claimed-docs] https://docs.morphllm.com/quickstart.md“Install the Morph MCP so Claude Code can read it”
- [claimed-docs] https://docs.morphllm.com/guides/mcp.md“Use Morph's Warp-Grep for fast, local code search alongside your MCP setup.”
- [probe] https://docs.morphllm.com/guides/mcp“official MCP server documented at https://docs.morphllm.com/guides/mcp”
Use an official CLIweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Drive the product through a documented public APIweight 3
3 (weight) × 8 (quality) × 1.0 (full) = 24.0 of 30 max
- [claimed-docs] https://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
- [claimed-docs] https://docs.morphllm.com/sdk/components/fast-apply.md“Fast Apply merges just the changed lines at 10,500 tok/s, 98% accuracy.”
- [claimed-docs] https://docs.morphllm.com/sdk/components/compact.md“Drop filler from chat history and code context at 33,000 tok/s. 50-70% reduction, every surviving line byte-for-byte identical to input.”
- [claimed-docs] https://docs.morphllm.com/sdk/components/batch.md“Run thousands of chat completions offline at half price.”
- [claimed-docs] https://docs.morphllm.com/endpoints.md“Anthropic Messages supports the same open source chat models, token billing, and rate limits.”
- [probe] https://docs.morphllm.com/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.morphllm.com/llms.txt # Morph API Documentation > https://docs.morphllm.com > Base URL: https://api.morphllm.com/v1 > OpenAI-compatible. Use a”
- [probe] https://docs.morphllm.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.morphllm.com/openapi.json, https://docs.morphllm.com/swagger.json, https://docs.morphllm.com/api/openapi.json, https://docs.morphllm.com/.well-known/openapi.json)”
- [github] https://github.com/morphllm/morph-demos“Use Morph's API to intelligently modify existing code at 4,500+ tokens/sec”
- [community] https://news.ycombinator.com/item?id=44490863“Have been using morph for a while (I am one of the authors of goose) and was surprised when introduced at the boost it gave me (much less iteration with the main expensive LLM). Used it with claude 3.5, 3.7, 4 and currently with o3/openai and anthropic/claude4 + morphllm combo today.”
- [community] https://news.ycombinator.com/item?id=44490863“This uses an OpenAI-compatible endpoint, so got this working with my llm.datasette.io CLI tool... One thing that worries me: since it's using XML-style tags <code> and <update>, if my own source code contains those tags I expect it may get confused.”
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://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
Build against official SDKsweight 2
2 (weight) × 6 (quality) × 0.6 (partial) = 7.2 of 20 max
- [claimed-docs] https://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
- [claimed-docs] https://docs.morphllm.com/guides/coding-agents.md“Claude Code speaks the Anthropic Messages API, which Morph serves natively at `/v1/messages`.”
- [claimed-docs] https://docs.morphllm.com/endpoints.md“Anthropic Messages supports the same open source chat models, token billing, and rate limits.”
- [community] https://news.ycombinator.com/item?id=44490863“This uses an OpenAI-compatible endpoint, so got this working with my llm.datasette.io CLI tool... One thing that worries me: since it's using XML-style tags <code> and <update>, if my own source code contains those tags I expect it may get confused.”
- [probe] https://docs.morphllm.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.morphllm.com/openapi.json, https://docs.morphllm.com/swagger.json, https://docs.morphllm.com/api/openapi.json, https://docs.morphllm.com/.well-known/openapi.json)”
Subscribe to events via webhooksweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Agent-ready = 77.4 ÷ 180 × 100 = 43.0
API quality0.0/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://docs.morphllm.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.morphllm.com/openapi.json, https://docs.morphllm.com/swagger.json, https://docs.morphllm.com/api/openapi.json, https://docs.morphllm.com/.well-known/openapi.json)”
- [probe] https://docs.morphllm.com/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.morphllm.com/llms.txt # Morph API Documentation > https://docs.morphllm.com > Base URL: https://api.morphllm.com/v1 > OpenAI-compatible. Use a”
- [probe] https://docs.morphllm.com/introduction.md“PROBE docs-md: HTTP 200 at https://docs.morphllm.com/introduction.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.morphllm.com/llms.txt > Use this file”
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://docs.morphllm.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.morphllm.com/openapi.json, https://docs.morphllm.com/swagger.json, https://docs.morphllm.com/api/openapi.json, https://docs.morphllm.com/.well-known/openapi.json)”
Test against a sandbox environment without touching production dataweight 1
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
Rely on versioned APIs with a documented deprecation policyweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://docs.morphllm.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.morphllm.com/openapi.json, https://docs.morphllm.com/swagger.json, https://docs.morphllm.com/api/openapi.json, https://docs.morphllm.com/.well-known/openapi.json)”
- [claimed-docs] https://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
API quality = 0.0 ÷ 60 × 100 = 0.0
Openness4.8/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://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
- [claimed-docs] https://docs.morphllm.com/dedicated-endpoints.md“Reserve model capacity by choosing a model and plan. Morph provisions and operates it”
- [community] https://news.ycombinator.com/item?id=44490863“Seems completely broken. I used the provided HTML example on morphllm.com playground. Without editing anything, I pressed apply. Your model added a bunch of CSS even though that wasn't in the update instructions, plus a contact section that wasn't requested.”
- [probe] https://docs.morphllm.com/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.morphllm.com/llms.txt # Morph API Documentation > https://docs.morphllm.com > Base URL: https://api.morphllm.com/v1 > OpenAI-compatible. Use a”
Export all of my data in open formats and leaveweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Read the product's source under an open licenseweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Self-host the core productweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
- [claimed-docs] https://docs.morphllm.com/introduction“Point any OpenAI SDK at `https://api.morphllm.com/v1`. One API key covers the open-weight chat models and the specialized tools”
- [claimed-docs] https://docs.morphllm.com/dedicated-endpoints.md“Reserve model capacity by choosing a model and plan. Morph provisions and operates it”
- [probe] https://docs.morphllm.com/llms.txt“PROBE llms.txt: HTTP 200 at https://docs.morphllm.com/llms.txt # Morph API Documentation > https://docs.morphllm.com > Base URL: https://api.morphllm.com/v1 > OpenAI-compatible. Use a”
- [probe] https://docs.morphllm.com/openapi.json“PROBE openapi: all candidate paths 404 (https://docs.morphllm.com/openapi.json, https://docs.morphllm.com/swagger.json, https://docs.morphllm.com/api/openapi.json, https://docs.morphllm.com/.well-known/openapi.json)”
Openness = 4.8 ÷ 100 × 100 = 4.8
Built-in AI0.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) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://docs.morphllm.com/sdk/components/batch.md“Run thousands of chat completions offline at half price.”
- [claimed-docs] https://docs.morphllm.com/quickstart.md“Move a production agent off Anthropic or OpenAI onto Kimi K3 — a 5% traffic trial or a full migration, gated by Reflexes.”
- [claimed-docs] https://docs.morphllm.com/quickstart.md“A canary keeps your current provider, sends a slice of production traffic to Kimi K3, and compares Reflex results before you switch.”
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
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
Built-in AI = 0.0 ÷ 20 × 100 = 0.0
Automation15.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://docs.morphllm.com/sdk/components/batch.md“Run thousands of chat completions offline at half price.”
- [claimed-docs] https://docs.morphllm.com/sdk/components/fast-apply.md“Fast Apply merges just the changed lines at 10,500 tok/s, 98% accuracy.”
- [github] https://github.com/morphllm/morph-demos“Use Morph's API to intelligently modify existing code at 4,500+ tokens/sec”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 4 (quality) × 0.6 (partial) = 7.2 of 30 max
- [claimed-docs] https://docs.morphllm.com/quickstart.md“Move a production agent off Anthropic or OpenAI onto Kimi K3 — a 5% traffic trial or a full migration, gated by Reflexes.”
- [claimed-docs] https://docs.morphllm.com/quickstart.md“A canary keeps your current provider, sends a slice of production traffic to Kimi K3, and compares Reflex results before you switch.”
- [claimed-docs] https://docs.morphllm.com/sdk/components/reflexes/custom.md“A small Reflex trains in about 30 seconds.”
Schedule recurring jobs or workflowsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Version, review, and roll back my automationsweight 1
1 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 10 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Automation = 12.0 ÷ 80 × 100 = 15.0