diff --git a/README.md b/README.md
index 04965f85..231c4fea 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,10 @@
# MCP PHP SDK
-
-
[](https://packagist.org/packages/mcp/sdk)
[](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/pipeline.yaml)
[](https://packagist.org/packages/mcp/sdk)
[](LICENSE)
-[](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml)
-[](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml)
-[](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml)
-[](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml)
-
-
-
The official PHP SDK for the Model Context Protocol (MCP). It provides a framework-agnostic API for implementing MCP
servers and clients in PHP — tools, resources, prompts, STDIO and HTTP transports, sessions, authorization, and both
protocol eras (the `initialize` handshake and the stateless `2026-07-28` revision).
@@ -25,6 +16,17 @@ development practices and standards from the Symfony project, including [Coding
Until the first major release, this SDK is considered [experimental](https://symfony.com/doc/current/contributing/code/experimental.html), please see the [roadmap](./ROADMAP.md) for
planned next steps and features.
+## Protocol Conformance
+
+Measured weekly against the [MCP Conformance Test Framework](https://github.com/modelcontextprotocol/conformance),
+as passing checks out of total. The `2026-07-28` scores run against the framework's `alpha` releases, so they move as
+upstream publishes new scenarios.
+
+| Revision | Server | Client |
+|:--------:|:------:|:------:|
+| `2026-07-28` | [](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml) | [](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml) |
+| `2025-11-25` | [](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml) | [](https://github.com/modelcontextprotocol/php-sdk/actions/workflows/conformance-weekly.yaml) |
+
## Installation
```bash
diff --git a/tests/Conformance/score.php b/tests/Conformance/score.php
index 06c34094..37ebcab7 100644
--- a/tests/Conformance/score.php
+++ b/tests/Conformance/score.php
@@ -16,11 +16,12 @@
* php score.php [results-dir]
*
* The conformance CLI writes one `checks.json` per scenario into
- * `[results-dir]` (default `results`), relative to this file. A scenario
- * counts as passing when none of its checks has a FAILURE status; the badge
- * message is "/ (%)" and is written to
+ * `[results-dir]` (default `results`), relative to this file. Every check with
+ * a SUCCESS or FAILURE status counts towards the score; the badge message is
+ * "/ (%)" and is written to
* `-conformance-.json`, so each revision gets its own
- * badge.
+ * badge. The badge is labelled "checks" only: the README renders the badges in
+ * a table whose row and column headers already name the revision and suite.
*/
use Symfony\Component\Console\Command\Command;
@@ -92,7 +93,7 @@
$badge = [
'schemaVersion' => 1,
- 'label' => sprintf('%s %s', $suite, $specVersion),
+ 'label' => 'checks',
'message' => $total > 0 ? sprintf('%d/%d (%d%%)', $passed, $total, $pct) : 'no data',
'color' => match (true) {
0 === $total => 'lightgrey',
@@ -116,7 +117,7 @@
$io->listing($failures);
}
- $io->success(sprintf('%s: %s', $badge['label'], $badge['message']));
+ $io->success(sprintf('%s %s: %s', $suite, $specVersion, $badge['message']));
return Command::SUCCESS;
})