Skip to content

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.txtPROBE 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.mdPROBE 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/introductionPoint 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/introductionPoint 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.mdRun thousands of chat completions offline at half price.
  • [claimed-docs] https://docs.morphllm.com/endpoints.mdAnthropic Messages supports the same open source chat models, token billing, and rate limits.
  • [probe] https://docs.morphllm.com/llms.txtPROBE 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.mdInstall the Morph MCP so Claude Code can read it
  • [claimed-docs] https://docs.morphllm.com/guides/mcp.mdConnect your favorite AI tools to Morph's blazing-fast file editing via Model Context Protocol.
  • [probe] https://docs.morphllm.com/guides/mcpofficial 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.mdConnect your favorite AI tools to Morph's blazing-fast file editing via Model Context Protocol.
  • [claimed-docs] https://docs.morphllm.com/quickstart.mdInstall the Morph MCP so Claude Code can read it
  • [claimed-docs] https://docs.morphllm.com/guides/mcp.mdUse Morph's Warp-Grep for fast, local code search alongside your MCP setup.
  • [probe] https://docs.morphllm.com/guides/mcpofficial 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/introductionPoint 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.mdFast Apply merges just the changed lines at 10,500 tok/s, 98% accuracy.
  • [claimed-docs] https://docs.morphllm.com/sdk/components/compact.mdDrop 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.mdRun thousands of chat completions offline at half price.
  • [claimed-docs] https://docs.morphllm.com/endpoints.mdAnthropic Messages supports the same open source chat models, token billing, and rate limits.
  • [probe] https://docs.morphllm.com/llms.txtPROBE 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.jsonPROBE 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-demosUse Morph's API to intelligently modify existing code at 4,500+ tokens/sec
  • [community] https://news.ycombinator.com/item?id=44490863Have 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=44490863This 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/introductionPoint 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/introductionPoint 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.mdClaude Code speaks the Anthropic Messages API, which Morph serves natively at `/v1/messages`.
  • [claimed-docs] https://docs.morphllm.com/endpoints.mdAnthropic Messages supports the same open source chat models, token billing, and rate limits.
  • [community] https://news.ycombinator.com/item?id=44490863This 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.jsonPROBE 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.jsonPROBE 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.txtPROBE 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.mdPROBE 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.jsonPROBE 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.jsonPROBE 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/introductionPoint 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/introductionPoint 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.mdReserve model capacity by choosing a model and plan. Morph provisions and operates it
  • [community] https://news.ycombinator.com/item?id=44490863Seems 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.txtPROBE 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/introductionPoint 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.mdReserve model capacity by choosing a model and plan. Morph provisions and operates it
  • [probe] https://docs.morphllm.com/llms.txtPROBE 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.jsonPROBE 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.mdRun thousands of chat completions offline at half price.
  • [claimed-docs] https://docs.morphllm.com/quickstart.mdMove 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.mdA 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.mdRun thousands of chat completions offline at half price.
  • [claimed-docs] https://docs.morphllm.com/sdk/components/fast-apply.mdFast Apply merges just the changed lines at 10,500 tok/s, 98% accuracy.
  • [github] https://github.com/morphllm/morph-demosUse 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.mdMove 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.mdA 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.mdA 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