Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 03:41 UTC

RedberryProducts / mcp-client-laravel

Laravel-native client for Model Context Protocol (MCP) servers. Built by Redberry (Diamond-tier Laravel partner). Used by LarAgent and other frameworks to enable AI agent functionality.

PHPMIT★ 13 Sterne⑂ 3 Forksseit Juni 2025Auf GitHub ansehen ↗

RedberryProducts/mcp-client-laravel erreicht einen Gesundheitsindex von 60 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (75/100) ab, am schwächsten bei Community & Adoption (47/100). Zuletzt vor 30 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

60
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

60
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

RedberryOrganisation
38 Follower37 öffentliche Reposseit März 2020

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
Packagistredberry/mcp-client-laravelv2.0.0-rc.116.0844vor 77 Tagenlaravelredberrymcp-client-laravel

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

75Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 30 Tagen
7.6/36Commit-Rhythmus — 11/52 Wochen mit Commits
18/18Commit-Volumen — 131 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year131
human_commit_share0,96
days_since_last_push30
active_weeks_last_year11
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 3 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 74 Tagen
19.8/27Release-Rhythmus — ein Release etwa alle 110,4 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count3
latest_release_tagv1.1.1
releases_from_tagsnein
days_since_latest_release74
mean_days_between_releases110,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

47Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
17.5/60Stars — 13 Stars
2.5/25Forks — 3 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks3
stars13
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
56.1/80Downloads pro Monat — 16.084 Downloads/Monat über packagist
2/20Abhängige in der Registry — 1 Pakete hängen davon ab
Verwendete Eingangsdaten
packagesredberry/mcp-client-laravel
dependents1
ecosystemspackagist
total_downloads99.674
monthly_downloads16.084

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

57Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
1.8/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 92 % der Commits
2.7/13.5Breite der Beitragenden — 2 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled2
top_contributor_share0,918
Wie die Bewertung erfolgt
38.2/46.8Issue-Lösungsquote — 82 % der Issues geschlossen
33/38.3PR-Annahme — 38/44 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/8 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs38
open_issues2
closed_issues9
issue_closed_ratio0,818
closed_unmerged_prs6
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
11.4/25Reichweite des Inhabers — 38 Follower von RedberryProducts
23.5/25Kontohistorie — 37 öffentliche Repos, Kontoalter ca. 6 Jahre
Verwendete Eingangsdaten
followers38
owner_typeOrganization
is_verified
owner_loginRedberryProducts
public_repos37
account_age_days2.316

Paketpflege

92Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf packagist
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 77 Tagen
12/20Versionshistorie — 4 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesredberry/mcp-client-laravel
ecosystemspackagist
any_deprecatednein
min_days_since_publish77

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

66Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 5 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 7 out of 8 merged PRs checked by a CI test -- score normalized to 8
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 17 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsagent-integration, ai-agents, ai-framework, chatbot, context, laravel, laravel-ai, laravel-package, llm, mcp, mcp-client, memory, openai, php, prompt-engineering, redberry, tools
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

52Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2/2.5CI-Tests — 7 out of 8 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/8 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — keine Daten
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate5,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

59Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
37.2/40Lesbare Commit-Historie — 67 von 96 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,698
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes8.601
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 31 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 4 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,31
toolchain_manifests
dependency_bot_commit_share0,04
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — PHP ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/27 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePHP
largest_source_bytes39.957
source_files_sampled27
oversized_source_files0

Eckdaten

13GitHub-Sterne
2Mitwirkende
131Commits, letzte 12 Monate
30Tage seit letztem Push
3Releases
1Bus-Faktor
2offene Issues
PackagistPaket-Ökosysteme

Warnungen zur Datenerhebung

  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 13 ★ / 3 ⇿
13Sterne
3Forks
2Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0358101315133102025-072025-122026-04
Major 1Minor 1Patch 0
OpenSSF Scorecard 5.1 / 10
5.1Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-22 03:41 UTC

10Binary-Artifactsno binaries found in the repo
1Branch-Protectionbranch protection is not maximal on development and all release branches
8CI-Tests7 out of 8 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/8 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
k. A.Dangerous-Workflowno workflows found
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 4
RegistryPaketVersionsvorgabeManifest
Packagistguzzlehttp/guzzle^7.5composer.json
Packagistilluminate/contracts^10.0||^11.0||^12.0||^13.0composer.json
Packagistpsr/http-message^1.1||^2.0composer.json
Packagistspatie/laravel-package-tools^1.16composer.json
Alle Abhängigkeiten 15

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 4 direkte und 11 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Packagistguzzlehttp/guzzledirekt
Packagistilluminate/contractsdirekt
Packagistpsr/http-messagedirekt
Packagistspatie/laravel-package-toolsdirekt
Packagistlarastan/larastanindirekt
Packagistlaravel/pintindirekt
Packagistnunomaduro/collisionindirekt
Packagistorchestra/testbenchindirekt
Packagistpestphp/pestindirekt
Packagistpestphp/pest-plugin-archindirekt
Packagistpestphp/pest-plugin-laravelindirekt
Packagistphpindirekt
Packagistphpstan/extension-installerindirekt
Packagistphpstan/phpstan-deprecation-rulesindirekt
Packagistphpstan/phpstan-phpunitindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "agent-integration",
        "ai-agents",
        "ai-framework",
        "chatbot",
        "context",
        "laravel",
        "laravel-ai",
        "laravel-package",
        "llm",
        "mcp",
        "mcp-client",
        "memory",
        "openai",
        "php",
        "prompt-engineering",
        "redberry",
        "tools"
      ],
      "is_fork": false,
      "size_kb": 277,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "PHP": 137878,
        "Shell": 192
      },
      "pushed_at": "2026-06-22T03:33:25Z",
      "created_at": "2025-06-27T07:01:20Z",
      "owner_type": "Organization",
      "updated_at": "2026-05-05T17:26:09Z",
      "description": "Laravel-native client for Model Context Protocol (MCP) servers. Built by Redberry (Diamond-tier Laravel partner). Used by LarAgent and other frameworks to enable AI agent functionality.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "PHP",
      "significant_languages": [
        "PHP"
      ]
    },
    "owner": {
      "blog": "https://redberry.international",
      "name": "Redberry",
      "type": "Organization",
      "login": "RedberryProducts",
      "company": null,
      "location": "Georgia",
      "followers": 38,
      "avatar_url": "https://avatars.githubusercontent.com/u/62336935?v=4",
      "created_at": "2020-03-18T11:55:17Z",
      "is_verified": null,
      "public_repos": 37,
      "account_age_days": 2316
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-05-08T10:57:33Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2025-11-07T11:07:36Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2025-09-29T13:26:17Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b0db4abafa26c1a16d515e397fbb9b6075fdfca5",
          "body": "docs: prepare v2.0.0 release",
          "is_bot": false,
          "headline": "Merge pull request #54 from RedberryProducts/docs/upgrade-guide-1x-to-2x",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T17:26:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ad950ee90004081876b55b89fa08f073e2b8122",
          "body": "Promote the Unreleased section to v2.0.0 with today's date.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: cut v2.0.0 in CHANGELOG",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T17:22:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19b6b56e1cefe5b3e99b2032a32b7efd55f9593e",
          "body": "ARCHITECTURE.md:\n- Drop the \"Known gaps\" sections that all describe shipped work (P0–P5).\n- Replace with \"Session loss recovery\" and \"SSE read timeout\" subsections\n  that describe the current behavior on the HTTP transport.\n- Fix STDIO lifecycle diagram defaults (50ms→100ms, 10ms→20ms, 3s→30s)\n  and\n[…]\n Collection match key) to Completed with their PR links.\n- Update lead sentence to \"All P0–P10 items have shipped, cut as v2.0.0.\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: refresh ARCHITECTURE and ROADMAP for v2.0.0",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T17:22:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e72a9ee3fb64504458bb1b5681eaaec5a2c327ae",
          "body": null,
          "is_bot": false,
          "headline": "Docs: Enhance readme",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T17:12:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fbb7e4a4a80a4192b5fa119c7742a153c35e048",
          "body": "Captures the breaking changes since v1.1.0 (immutable connect, singleton\nbinding, STDIO timeout split, env inheritance, SSE read timeout) as\ncopy-pasteable before/after recipes, and links it from README + CHANGELOG.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add 1.x → 2.x upgrade guide",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T17:03:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9aa2aaa75702daee1fc0aa20fbfbb2708d401077",
          "body": "…-support\n\nchore: support Laravel 13 and PHP 8.5",
          "is_bot": false,
          "headline": "Merge pull request #53 from RedberryProducts/chore/laravel-13-php-8.5…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T14:26:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f38dec6d0753b0e09dced78dc2f9eb755879670",
          "body": "Was an unused dev convenience inherited from the Spatie skeleton — the\npackage itself never calls ray() (the arch test in tests/ArchTest.php\nforbids it). Newer spatie/laravel-ray (1.43.x) was triggering a\nBindingResolutionException (\"Unresolvable dependency resolving\n[Parameter #0 [ <required> array\n[…]\ner-stable jobs. Removing the\ndependency removes that whole class of failure with no functional\nimpact on the package or its tests.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: drop spatie/laravel-ray from dev deps",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T14:21:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19b86c7a66b433e7f70890531ed96a5671ceb772",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T14:11:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bde764ec52d77d43119bd58ae910c1693635d79f",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into chore/laravel-13-php-8.5-support",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T14:08:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07d408b63f4d6c249692cd71733d609730ce97be",
          "body": "* `composer.json`:\n  * `php` widened to `^8.3 || ^8.4 || ^8.5`.\n  * `illuminate/contracts` widened to `^10.0 || ^11.0 || ^12.0 || ^13.0`\n    (L10 kept in constraints for user transitions; not in CI).\n  * `orchestra/testbench` widened to\n    `^8.22.0 || ^9.0.0 || ^10.0.0 || ^11.0.0`.\n  * `larastan/la\n[…]\nanges — `bin/check` (Pint + PHPStan + 123 Pest\ntests) is green on Laravel 13.7.0, Pest 4.7.0, Larastan 3.9.6, and\nPHP 8.4 locally.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: support Laravel 13 and PHP 8.5",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T14:05:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5b982dce61156af07e59dbe21aa403f6e4f02229",
          "body": "refactor(client): MCPClient surface — singleton DI, immutable connect, missing guards (P7, fixes #48)",
          "is_bot": false,
          "headline": "Merge pull request #52 from RedberryProducts/refactor/mcp-client-surface",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:58:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9558362a5120eb7143810ab7f5a99881691849ea",
          "body": "Addresses Copilot review feedback on PR #52:\n\n* The transporterCache was a plain array property. Plain arrays are\n  value-typed in PHP, so `clone $this` gave each clone its own copy.\n  Chaining connect() on a clone (`$root->connect('a')->connect('b')`)\n  cached the second transporter only on the clo\n[…]\negression test: a chained connect() from a clone is observed on a\nlater root.connect(); make() is invoked exactly once per server.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(client): share transporter cache across clones via ArrayObject",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:53:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8f89411b4145a97d1189abe68cd274b849fa3d4c",
          "body": "…ssing guards (P7)\n\nFixes the four interrelated MCPClient surface issues tracked in #48:\n\n* Bind MCPClient as a singleton (was bind()) so the facade and\n  constructor-injected callers resolve to the same instance.\n* Alias Contracts\\MCPClient to the concrete singleton — DI typing on\n  the interface n\n[…]\n\n$root->connect('x'); $root->tools();`) must now capture the clone:\n`$client = $root->connect('x'); $client->tools();` — or chain.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(client): singleton DI, contract alias, immutable connect, mi…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:36:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "75557277734de094f08bad783ad0b3bacd6d9c96",
          "body": "fix(stdio): decouple request/process timeouts, inherit parent env (P8, fixes #47)",
          "is_bot": false,
          "headline": "Merge pull request #51 from RedberryProducts/fix/stdio-robustness",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:17:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b42d5ce52c26713f2e1487729de4e7acdb4ff320",
          "body": "Address Copilot review on PR #51.\n\n1. resolveEnv: getenv() with no args is documented to return false on\n   error (e.g. on platforms where retrieving the full env isn't\n   supported). array_merge(false, ...) would TypeError and crash the\n   process before it ever started. Coerce with `?: []`.\n\n2. re\n[…]\nimeout error\n   message uses %s so 1.0 still prints \"1\" but 1.5 prints \"1.5\".\n\nAdds two regression tests covering both behaviours.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(stdio): defensive getenv() and preserve float request_timeout",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:15:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8bbc50342e9f29370af37b6a7361378862f3cc67",
          "body": "Windows env var names are case-insensitive: getenv() returns\nkeys like 'Path' while getenv('PATH') still resolves it,\nso the previous assertion `$env['PATH'] === getenv('PATH')`\nhit a null lookup on Windows even though the parent env was\ncorrectly inherited.\n\nSet our own parent env key with putenv() and assert that\nspecific key flows through, side-stepping system-key casing.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(stdio): make resolveEnv merge test portable across Windows",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:08:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7ce6e277d39c04e9cb4a491d6c7e304457d036f0",
          "body": "`StdioTransporter` previously used a single 3-second `timeout` as both the\nper-call wait inside `waitForResponse()` and Symfony Process's 5th\nconstructor argument (the total-runtime kill timer). The first behaviour\nmade the README's own `npx -y @modelcontextprotocol/server-memory` example\nfail on co\n[…]\n now surface stderr, stdout, and the exit code\nin the message instead of routing them to `error_log()`.\n\nTracks GH issue #47 (P8).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(stdio): decouple request/process timeouts and inherit parent env",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T13:04:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3abe342aec8741de28d35212262d2cc76bede277",
          "body": "…-key\n\nfix(collection): match only/except on configurable key (P10)",
          "is_bot": false,
          "headline": "Merge pull request #50 from RedberryProducts/fix/p10-collection-match…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T12:53:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4977a99bbb726cf1927a3ce2a0d4940cd9a4b2e3",
          "body": "…tch-key\n\n# Conflicts:\n#\tCHANGELOG.md",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main' into fix/p10-collection-ma…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T12:51:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b0bec02fb876da638251848e665bae436fbb6da",
          "body": "Collection::only() and except() previously hardcoded $item['name'] for\nmatching. MCP resources are keyed by uri, not name, so\n$client->resources()->only('file:///foo') silently returned an empty\ncollection — same Collection class behaving differently depending on\nwhich list it wrapped.\n\nThe construc\n[…]\nCPClient::resources() with 'uri'.\n\nDefault match key stays 'name', so existing tools-shaped call sites\nare unchanged.\n\nCloses #46.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Collection only/except match on configurable key (name vs uri)",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T12:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1ae0ebf71d5eb17f287f6ba1435632ae8c8deccd",
          "body": "…e-defensive\n\nfix(http): defensive null-coalesce on JSON-RPC error.message (P9)",
          "is_bot": false,
          "headline": "Merge pull request #49 from RedberryProducts/fix/p9-http-error-messag…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T12:41:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3186f724105d7cb9b41a8e1ad85431629d07703b",
          "body": "…rter\n\nHttpTransporter::parseResponse() interpolated $data['error']['message']\nwithout a null-coalesce. Per JSON-RPC 2.0 the message field is SHOULD,\nnot MUST — spec-compliant servers may omit it, in which case PHP raised\na warning and the resulting TransporterRequestException carried an empty\nmessage.\n\nMirrors the pattern already applied in SseStreamParser (P1, #37). The\nJSON branch was missed in the same change.\n\nCloses #45.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: defensive null-coalesce on JSON-RPC error.message in HttpTranspo…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T12:40:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da2f6280207b30c0883d307f4852b34f91c6823c",
          "body": "docs: shrink ROADMAP.md now that P0–P6 have shipped",
          "is_bot": false,
          "headline": "Merge pull request #44 from RedberryProducts/docs/shrink-roadmap",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:50:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ee9db682242ced21249fbbf3ef65d052e5a2b13",
          "body": "All seven roadmap items have merged. Replaces the verbose Problem/Task/\nAcceptance bodies (which referenced file:line locations that have drifted\nor in some cases no longer exist after refactors) with a one-line\nCompleted entry per item linking to the merged PR. Original problem\nstatements remain ac\n[…]\nection anchors (#out-of-scope).\n- Removed CLAUDE.md's \"don't widen P0's changelog scope\" rule — P0\n  shipped, so the rule is dead.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: shrink ROADMAP.md to a completed list now that P0–P6 have shipped",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:49:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d903604d727250f6919c8bed544f1623c41b416d",
          "body": "…st-id-and-stdio-onevent-doc\n\nchore: incrementing HTTP request ids + document $onEvent on STDIO",
          "is_bot": false,
          "headline": "Merge pull request #43 from RedberryProducts/chore/incrementing-reque…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:43:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f60ac27f21192befc9af910a1f64e15ca576a8a",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:42:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "27c2ba98b3b735e41f4178b7075dc59c93fb093d",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:42:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1776c570774242fa0ca14e032da5d829422c2f8d",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:42:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "92b96cddefb1f18b21625a9511089d2b1dceceb5",
          "body": "The README's streaming-callback section previously only noted that the\ncallback fires zero times when the HTTP server returns a single JSON\nresponse. Streaming events are an HTTP-only concept (Streamable HTTP\ntext/event-stream); under STDIO the callback never fires at all today.\nMake that explicit so readers don't expect STDIO to surface progress\nevents.\n\nCloses ROADMAP P6.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: clarify \\$onEvent is a no-op under STDIO transport",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:32:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37870b86f133fa7b9a95db1426a818b48dfc9a5f",
          "body": "Replaces random_int(1, 1_000_000) in HttpTransporter::generateId() with\n++$this->requestId, matching STDIO. Removes the ~1-in-1000 birthday-paradox\ncollision risk that the random source had over a long-lived session.\nThe id_type config (int vs string) still controls the output cast.\n\nThe initialize \n[…]\nslot of the user-request counter — user\nrequests on a fresh instance still produce ids 1, 2, 3, … as expected.\n\nCloses ROADMAP P5.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: switch HTTP request ids to a per-instance incrementing counter",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:31:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e41979ea5593839870446ad96532e7f5dade57eb",
          "body": "…r-test-no-reflection\n\ntest: migrate HttpTransporter tests off reflection-based state setup",
          "is_bot": false,
          "headline": "Merge pull request #42 from RedberryProducts/refactor/http-transporte…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:23:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0911e661d0f8397882c995e4615168c5fb31cd22",
          "body": "…roadmap item\n\nROADMAP P4's Problem/Task body still cites the (now-deleted)\ncreateTransporterWithMockedSession() helper at file:line locations\nthat no longer exist after this refactor. Add a Resolved-in pointer at\nthe top of the section so readers land on PR #42 and know the rest of\nthe body describes pre-refactor state.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: address Copilot review on P4 PR — flag stale refs in completed …",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:22:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b59ba71eb51aacf509ea83c4612a0df14102a78",
          "body": "Replaces the createTransporterWithMockedSession() helper, which used\nReflectionClass to poke private $client / $sessionId / $initialized,\nwith setUpInitializedTransporter() — built on the existing constructor\ninjection seam plus method-specific Mockery expectations that prime the\ninitialize + notifications/initialized handshake.\n\nTests now exercise the real handshake path. No production code changes.\n\nCloses ROADMAP P4.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: migrate HttpTransporter tests off reflection-based state setup",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T11:17:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a77fbd40a87a375fd78e352bbe66641875a8219d",
          "body": "…ecovery\n\nfeat: HTTP transporter recovers from server-side session loss (P3)",
          "is_bot": false,
          "headline": "Merge pull request #41 from RedberryProducts/feat/http-session-loss-r…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T09:54:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "566098cdd53eba425015e5224f2bc0b977de29f0",
          "body": "…robust\n\nGuzzle defaults http_errors to true, but a caller can inject a client with\nit disabled (for custom logging/middleware). That client would return a\n404 as a normal ResponseInterface, slipping past the BadResponseException\ncatch and surfacing as a parse error in parseResponse() — bypassing th\n[…]\nirely.\n\nSetting http_errors=true in the per-request options makes the behavior\nindependent of the injected client's configuration.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: force http_errors=true per request so session-loss detection is …",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T09:50:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "da6278f975d1c4e233bbeb61a4030e4eb00863c9",
          "body": "- request() docblock no longer claims @throws GuzzleException — both\n  BadResponseException and other GuzzleExceptions are now caught and\n  wrapped in TransporterRequestException, so neither escapes. Kept the\n  @throws JsonException line since the SSE parsing path can still raise\n  one (SseStreamPar\n[…]\nce — so the dereference is safe\n  by static type, not by accident. Documents the reasoning that PHPStan\n  already proves silently.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: address Copilot review on session-loss recovery PR",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T09:33:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e61ee6665d9d66c583fa72ae6281a9419569d568",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/http-session-loss-recovery",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T09:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e67430354c02ba3efa41c65ef0824525186a78c",
          "body": "Per MCP 2025-03-26 Streamable HTTP, a server signals an expired or unknown\nsession by returning HTTP 404 to a request carrying `mcp-session-id`. The\ntransporter now detects this, clears the session, re-runs the initialize\nhandshake, and retries the original request once. Capped by a new\n`max_session\n[…]\nis\nHTTP-only — recorded in an inline doc comment so a future maintainer\ndoesn't invent a code-based heuristic.\n\nCloses ROADMAP P3.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: HTTP transporter recovers from server-side session loss",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T09:13:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "22014f843c7b1b9e7792d7aa0339bfb69bf45dac",
          "body": "…e-test-windows\n\ntest: fix stdio startup-failure test on Windows CI",
          "is_bot": false,
          "headline": "Merge pull request #40 from RedberryProducts/fix/stdio-startup-failur…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T08:42:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05fa988dcc029cb03b4c30c4f0ce0f4c6e9df9e9",
          "body": "…test\n\nWindows has no `false` binary, so the spawned process did not exit before\nthe 50 ms startup_delay and the test fell through to a timeout instead of\nthe asserted \"Process failed to start\" path. Use `cmd /c exit 1` on\nWindows so handleStartupFailure() is exercised on every platform.\n\nCloses #39\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: select OS-specific fail-fast command for stdio startup-failure …",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T08:39:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "99a65ff43ad13cf6f09ad4dab609762eb7ad5dee",
          "body": "feat: SSE inter-chunk read timeout protects against wedged streams",
          "is_bot": false,
          "headline": "Merge pull request #38 from RedberryProducts/feat/sse-read-timeout",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T06:54:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2124a9ad77644b444cdf3c3ee1b6d201d544b3c3",
          "body": "The parser already supports a null timeout for callers willing to wait\nindefinitely, but the HttpTransporter was unconditionally casting the\nconfig value to float — which both swallowed an explicit null (?? fell\nthrough to the default 60) and prevented any way to opt out.\n\nResolve via array_key_exis\n[…]\nault 60s\nwhile an explicit null is passed through to the parser. Adds a parser\ntest that asserts null disables timeout enforcement (stream ends with\nthe no-result error rather than the timeout error).",
          "is_bot": false,
          "headline": "fix: allow read_timeout=null in HttpTransporter config to disable",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T06:52:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3b469602e19cec12cecff9a3ffc2b0a7f34c341",
          "body": "Extract the timeout/backoff logic into awaitNextChunk() so the main\nloop reads top-to-bottom: read, if empty await, else record-time and\ndrain. Drops the 0.0 sentinel on $lastChunkAt and the per-iteration\nnull-check on $readTimeout in exchange for one unconditional\nmicrotime() per chunk.",
          "is_bot": false,
          "headline": "refactor: flatten SseStreamParser::parse() empty-read handling",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T06:40:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5705184c9ef8516b978eee0ae5d3deeca30ee9a6",
          "body": "- Replace WedgedStream fixture with a Mockery StreamInterface mock to\n  avoid an LSP signature mismatch under psr/http-message ^1.1, which the\n  package's prefer-lowest CI matrix exercises.\n- Add a 1ms backoff on empty reads when read_timeout is set so the parse\n  loop doesn't spin a CPU under non-blocking streams while waiting for\n  the timeout to elapse.\n- Add an HttpTransporter test that wires a wedged SSE response body and\n  asserts the configured read_timeout aborts the request end-to-end.",
          "is_bot": false,
          "headline": "fix: address Copilot review on SSE read-timeout PR",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-05T06:32:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "995c571fb8f0ccfc7043c24823799b3f6010fb33",
          "body": "Guzzle's timeout bounds connection setup, not body reads on a streamed\nresponse. A misbehaving server that holds the socket open without\nsending data would park a worker indefinitely on stream read.\n\nAdds an optional read_timeout config key on HttpTransporter (default\n60s), threaded through to SseSt\n[…]\nst received chunk and\nthrows TransporterRequestException once the gap exceeds the timeout.\nThe clock resets on every non-empty chunk, so long-running operations\nthat stream progress events stay alive.",
          "is_bot": false,
          "headline": "feat: SSE inter-chunk read timeout protects against wedged streams",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T14:33:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b21a5ea23ed848fa30d3738eb2b598a765b38e7f",
          "body": "…-error-message\n\nfix: defensive error-message handling in SseStreamParser",
          "is_bot": false,
          "headline": "Merge pull request #37 from RedberryProducts/fix/sse-parser-defensive…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T14:27:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c99798d5c610b5fe671cda2c54f9a425fdab7929",
          "body": "Mirror the StdioTransporter fallback so a JSON-RPC error event without a\nmessage field no longer raises a PHP warning. The error code is still\npreserved on the thrown TransporterRequestException.",
          "is_bot": false,
          "headline": "fix: defensive error-message handling in SseStreamParser",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T14:23:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b161cfe82156e1d30ab2beece4b86325dffbef7a",
          "body": "…ize-handshake\n\nfix: spec-correct initialize handshake on Streamable HTTP transport",
          "is_bot": false,
          "headline": "Merge pull request #35 from RedberryProducts/fix/spec-correct-initial…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T14:04:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b775ab28b04a4c371731a42b9a958c2f2e55f7f",
          "body": "The previous assertion would have failed if the package ever shipped a\nreal 0.1.0 release. The meaningful check — that the version was\nresolved to something — is already covered by `toBeString()`; the\nnon-empty assertion just makes that bound explicit.\n\nAddresses Copilot review feedback on PR #35.",
          "is_bot": false,
          "headline": "test: assert clientInfo.version is non-empty rather than not '0.1.0'",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:51:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bb819fa0b81c71f1d8e6d26b88987782fbd6fc2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/spec-correct-initialize-handshake",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:48:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69c4d6db74a4da5bf9ab1c81f2c51c097e0d9d67",
          "body": "chore: pin Pint config and align lint CI to PHP 8.4",
          "is_bot": false,
          "headline": "Merge pull request #36 from RedberryProducts/chore/pin-pint-config",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:47:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ef5f2ca666c1749462695800806a39125480484",
          "body": "The package had no `pint.json`, which meant Pint's `laravel` preset\nwas used with whatever implicit defaults the installed Pint version\nshipped with — so rules that vary by Pint patch version (and by PHP\nversion) drifted between local runs and CI. The P0 PR tripped on\nthis when CI rejected an inline\n[…]\n is still covered by\n  the test matrix in `run-tests.yml`.\n- Remove the now-resolved Pint drift entry from ROADMAP \"Out of scope\".\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: pin Pint config and align lint CI to PHP 8.4",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:46:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "43e13b6067ae180eae4c8d9e0a1f6e62b441942c",
          "body": "CI's Pint runs `fully_qualified_strict_types` and rejects inline\n`\\Redberry\\MCPClient\\Core\\Mcp::PROTOCOL_VERSION` references in the\nnew tests. Local Pint didn't flag these (the rule drift is a known\nissue per ROADMAP \"out of scope\"). Switch to a regular `use` import.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style: import Mcp class in tests instead of inline FQN",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:41:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "62bc92aaee18d67163c716940b3a4c09a6c93744",
          "body": "The HTTP transporter's `initialize` payload was missing `protocolVersion`,\n`capabilities`, and `clientInfo`, and we never sent the follow-up\n`notifications/initialized` message. Strict-spec MCP servers (the official\nTS reference, Anthropic's reference servers) reject this and refuse to\nserve `tools/\n[…]\nersion` comes from the installed composer package version\ninstead of the hardcoded `0.1.0` STDIO used to send.\n\nCloses ROADMAP P0.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: spec-correct initialize handshake on Streamable HTTP transport",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:36:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "913763e1d9dfc2a7f053c43cdb2d3335f9bca662",
          "body": "docs: add AI/contributor context (CLAUDE.md, ARCHITECTURE.md, etc.)",
          "is_bot": false,
          "headline": "Merge pull request #34 from RedberryProducts/fix/ai-development",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:10:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d1f9c58123e0d23d788003bb2479b81bd735de5",
          "body": "ARCHITECTURE goes deep on the layers, request flow, and lifecycles for\nboth transports — the bits that aren't obvious from reading the source.\nCONTRIBUTING covers local setup, the bin/check gate, ROADMAP-per-PR\nscoping, and the Conventional Commits style we already use.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add ARCHITECTURE.md and CONTRIBUTING.md",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T13:08:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "96ecbe15c2e2b4e7aa7d1ef3599e82b3d63e2e61",
          "body": null,
          "is_bot": false,
          "headline": "feat: add files to enhance AI development capabilities",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T12:57:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3aeccbd1d436c5989dd5aa157235e1e7c4c7a99b",
          "body": "Add MCP Streamable HTTP transport support",
          "is_bot": false,
          "headline": "Merge pull request #33 from RedberryProducts/feat/add-streamable-http",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T12:39:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae411279d9d2d2be1e94cd09722269e0fb2ed7b6",
          "body": "- `parseResponse()` now returns the full JSON envelope when `result` is\n  scalar/null, mirroring the SSE parser. Keeps the typed `: array`\n  return contract intact for any JSON-RPC payload.\n- `initializeSession()` wraps Guzzle exceptions as\n  `TransporterRequestException` so handshake failures surfa\n[…]\n\n  message — including the final result-bearing one — rather than only\n  intermediate ones.\n- Added tests covering the new initialize-failure wrapping and a JSON\n  response whose `result` is a scalar.",
          "is_bot": false,
          "headline": "Address second round of Copilot review feedback",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T12:25:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a4aa7d7e529e34c4040c490db022aa51fd677ef8",
          "body": "Address Copilot review feedback:\n\n- `HttpTransporter::request()` and `preparePayload()` now take\n  `array $params = []` instead of `?array $params = null`, matching the\n  `Transporter` contract and removing a contravariant divergence that\n  StdioTransporter doesn't share.\n- `preparePayload()` casts \n[…]\n params encode as `{}` (what spec-strict servers expect),\n  consistent with `StdioTransporter`.\n- Updated the SSE callback test to pass `[]` instead of `null` for\n  params, in line with the interface.",
          "is_bot": false,
          "headline": "Align HttpTransporter::request signature with Transporter interface",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T12:15:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7a0ce5bfed27b46d2809d326acf4ffad3147321",
          "body": "CI's `pint --test` flags `fully_qualified_strict_types` violations in\nthree files unrelated to the streamable HTTP work, blocking the PR.\nApply the rule (use imported short names instead of inline FQCNs).\n\nNo behavior change.",
          "is_bot": false,
          "headline": "chore: fix pre-existing Pint style issues",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T12:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39efb88ea35710d07d5f71503e8e117c918759c5",
          "body": "The HTTP transporter now implements the 2025-03-26 MCP Streamable HTTP\nspec: every request advertises `Accept: application/json, text/event-stream`\nand the server picks — per call — between a single JSON response and an\nSSE stream of JSON-RPC messages. The client handles both transparently.\n\n- New `\n[…]\nCHANGELOG updated; new tests cover the SSE parser\n  (events, comments, multi-line data, [DONE], errors, trailing line)\n  and the transporter's content-negotiation, callback forwarding, and\n  DI paths.",
          "is_bot": false,
          "headline": "Add MCP Streamable HTTP transport support",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T11:41:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "003495ffe1e1c6f5379cac55d124962334d54f06",
          "body": "…s/dependabot/fetch-metadata-3.1.0\n\nBuild(deps): Bump dependabot/fetch-metadata from 2.4.0 to 3.1.0",
          "is_bot": false,
          "headline": "Merge pull request #32 from RedberryProducts/dependabot/github_action…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T10:36:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf50d0f9a541380cfc150166eb559de4f2ee8f7c",
          "body": "…etadata-3.1.0",
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/github_actions/dependabot/fetch-m…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T10:36:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d3fa09af10f939b7576979f433788b7d0be0669",
          "body": "…s/ramsey/composer-install-4\n\nBuild(deps): Bump ramsey/composer-install from 3 to 4",
          "is_bot": false,
          "headline": "Merge pull request #31 from RedberryProducts/dependabot/github_action…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T10:36:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51d895a56ef3f859d2a52213f4529c4a9fc3d705",
          "body": "Bumps [ramsey/composer-install](https://github.com/ramsey/composer-install) from 3 to 4.\n- [Release notes](https://github.com/ramsey/composer-install/releases)\n- [Commits](https://github.com/ramsey/composer-install/compare/v3...v4)\n\n---\nupdated-dependencies:\n- dependency-name: ramsey/composer-install\n  dependency-version: '4'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Build(deps): Bump ramsey/composer-install from 3 to 4",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-04T10:11:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bb72d9f416eddbd4834928034bcbb828eaf9e9c",
          "body": "Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.4.0 to 3.1.0.\n- [Release notes](https://github.com/dependabot/fetch-metadata/releases)\n- [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.4.0...v3.1.0)\n\n---\nupdated-dependencies:\n- dependency-name: dependabot/fetch-metadata\n  dependency-version: 3.1.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Build(deps): Bump dependabot/fetch-metadata from 2.4.0 to 3.1.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-04T10:11:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c498a6ac6629b5b3c374f095a855fc7c31c5bcd",
          "body": "…s/actions/checkout-6\n\nBuild(deps): Bump actions/checkout from 5 to 6",
          "is_bot": false,
          "headline": "Merge pull request #28 from RedberryProducts/dependabot/github_action…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2026-05-04T10:10:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e30db9450cb74d9631537634f8d4bc449073e95",
          "body": null,
          "is_bot": false,
          "headline": "Update links in README for tracking parameters",
          "author_name": "Revaz Gh.",
          "author_login": "MaestroError",
          "committed_at": "2025-12-19T10:51:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed391b69ec1be6ebdfcce73076311ab06d932abf",
          "body": "Updated README to enhance clarity and provide additional details about the MCP Client for Laravel.",
          "is_bot": false,
          "headline": "Revise README for MCP Client clarity and details",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-12-02T12:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e14a700cc1a2f793417bfa711ca6cc169944b4a4",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v5...v6)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Build(deps): Bump actions/checkout from 5 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-24T03:37:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a582f02194d80626fcb2ed7264b5095d110a488b",
          "body": "…s/stefanzweifel/git-auto-commit-action-7\n\nBuild(deps): Bump stefanzweifel/git-auto-commit-action from 6 to 7",
          "is_bot": false,
          "headline": "Merge pull request #21 from RedberryProducts/dependabot/github_action…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-11-07T07:29:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a65d1c295ae25a899bdb4a11e01a2729324b1b65",
          "body": "…auto-commit-action-7",
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/github_actions/stefanzweifel/git-…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-11-07T07:09:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "859f4d7a9c689ed832c08698f7b9c0d2bdb4277c",
          "body": "…s/actions/checkout-5",
          "is_bot": false,
          "headline": "Merge pull request #17 from RedberryProducts/dependabot/github_action…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-11-06T17:48:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9df1d4ddd241fe814f9102151e05b7fdecb65b7d",
          "body": "…auto-commit-action-7",
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/github_actions/stefanzweifel/git-…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-11-06T16:06:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a255b072f22a732ae8e65f047d26502c259f047d",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/github_actions/actions/checkout-5",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-11-06T16:05:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84366e1cb83113b0d702b6ac2d30e7a7501567f1",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #26 from RedberryProducts/headers-url-and-fixes",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-11-06T16:04:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "967c594c5b75db4bdd4ba96656dc49c47ef09ca2",
          "body": null,
          "is_bot": false,
          "headline": "Fixed test for trailing slash",
          "author_name": "maestroerror",
          "author_login": "MaestroError",
          "committed_at": "2025-11-06T15:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e8579e0ee81e47279f84d218c7dbc2e28457094",
          "body": null,
          "is_bot": false,
          "headline": "Using base_uri as is",
          "author_name": "maestroerror",
          "author_login": "MaestroError",
          "committed_at": "2025-11-06T15:04:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d84f33cde1c74ed28339815954212f1426b7b171",
          "body": "Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Apply suggestions from code review",
          "author_name": "Revaz Gh.",
          "author_login": "MaestroError",
          "committed_at": "2025-11-06T14:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "01f1003e8b0ae4e6aed8dd1af30133f183034ff1",
          "body": null,
          "is_bot": false,
          "headline": "Pint & interval defaults updated",
          "author_name": "maestroerror",
          "author_login": "MaestroError",
          "committed_at": "2025-11-06T14:48:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f2f88f8c6f89012a865260dd00127ffc5a4c6f5",
          "body": null,
          "is_bot": false,
          "headline": "intervals configuration",
          "author_name": "maestroerror",
          "author_login": "MaestroError",
          "committed_at": "2025-11-06T14:42:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8b4eee38635d97ce9a28a7faaf02ac044800eb7",
          "body": null,
          "is_bot": false,
          "headline": "Fixes & Arbitrary headers",
          "author_name": "maestroerror",
          "author_login": "MaestroError",
          "committed_at": "2025-11-06T14:06:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "091f3413aa026cbdcf6d698100892f309ea4f9b7",
          "body": "Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 6 to 7.\n- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)\n- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)\n- [Co\n[…]\n stefanzweifel/git-auto-commit-action\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Build(deps): Bump stefanzweifel/git-auto-commit-action from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-13T03:32:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a702ca52d59488d9e51eed705af01be0c818e05",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/github_actions/actions/checkout-5",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T13:36:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af6db8f7e4ecb5af06df9ffb9505709b4e8fe1e9",
          "body": null,
          "is_bot": false,
          "headline": "Update Packagist links in README.md",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T13:34:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1fd4ed393a1220742ed1b571a9a738aa9c2fa60",
          "body": "Chore: Change package name to follow new convention",
          "is_bot": false,
          "headline": "Merge pull request #20 from RedberryProducts/chore/rename-package",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T13:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5473ef7531d14e7372b4dce3009db4bff3d3a7a4",
          "body": null,
          "is_bot": false,
          "headline": "Feat: Add executable check file that will run linters and tests",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T13:09:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "263eccd53ebd65e45a9c64d55499580095e6e74f",
          "body": null,
          "is_bot": false,
          "headline": "Refactor: Remove extra database path from phpstan config file",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T13:00:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77ca33846e40d91f0ca4df01b3a4d44bc4b460a1",
          "body": null,
          "is_bot": false,
          "headline": "Refactor: Remove unused folders and add custom name for config file",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:59:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c6b13c9bccae21ba04eb1ffa35a9bd7942566f6",
          "body": null,
          "is_bot": false,
          "headline": "Chore: Change package name to follow new convention",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:55:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b19c41ea04f936b5c7b998d6710caec14c988df4",
          "body": "…docs\n\nAdded ReadResource action and action methods in usage docs",
          "is_bot": false,
          "headline": "Merge pull request #19 from RedberryProducts/resources-execution-and-…",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:52:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e8ba99fe531331cf5279b8fd0baa2bfec5ce655",
          "body": null,
          "is_bot": false,
          "headline": "Fix: styling issue",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:49:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fdf8dec4c040c246c3ae4f483d318b0984ca571",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into resources-execution-and-docs",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:47:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "362edb765d91cfd8d3da64dc6148bd4e0c2bddd7",
          "body": "Fixed timeout config and added note in docs",
          "is_bot": false,
          "headline": "Merge pull request #18 from RedberryProducts/fix/get-timeout-from-config",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c48ab253eca82a11f5b3fd0f8132bcbc8463707",
          "body": null,
          "is_bot": false,
          "headline": "Fix: Styling issues",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:43:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb239f99a0c646eae84aad5f6cde0898cc1d3e6c",
          "body": null,
          "is_bot": false,
          "headline": "Fix: tests failing due to timeout being passed as env property",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:42:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12b97783a15a9e51646d6b0683d82be45dd8e102",
          "body": "This reverts commit 06fc7891b4784198b76da8f8fe123ad572518326.",
          "is_bot": false,
          "headline": "Revert \"Fix: Test and renamed package following new naming convention\"",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06fc7891b4784198b76da8f8fe123ad572518326",
          "body": null,
          "is_bot": false,
          "headline": "Fix: Test and renamed package following new naming convention",
          "author_name": "Nika Jorjoliani",
          "author_login": "nikajorjika",
          "committed_at": "2025-09-29T12:28:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c2510515aa05df67ef011629d2e48420b78f3c3",
          "body": "Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Revaz Gh.",
          "author_login": "MaestroError",
          "committed_at": "2025-09-25T14:17:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 3,
      "commits_last_year": 131,
      "latest_release_at": "2026-05-08T10:57:33Z",
      "latest_release_tag": "v1.1.1",
      "releases_from_tags": false,
      "days_since_last_push": 30,
      "active_weeks_last_year": 11,
      "days_since_latest_release": 74,
      "mean_days_between_releases": 110.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "redberry/mcp-client-laravel",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "laravel",
            "redberry",
            "mcp-client-laravel"
          ],
          "ecosystem": "packagist",
          "matches_repo": true,
          "registry_url": "https://packagist.org/packages/redberry/mcp-client-laravel",
          "is_deprecated": false,
          "latest_version": "v2.0.0-rc.1",
          "repository_url": "https://github.com/RedberryProducts/mcp-client-laravel",
          "versions_count": 4,
          "total_downloads": 99674,
          "dependents_count": 1,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 16084,
          "first_published_at": null,
          "latest_published_at": "2026-05-05T17:26:01Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 77
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 13,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2025-12-02",
            "count": 1
          },
          {
            "date": "2026-02-07",
            "count": 1
          },
          {
            "date": "2026-04-28",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": {
        "days": [
          {
            "date": "2025-07-16",
            "count": 1
          },
          {
            "date": "2025-09-29",
            "count": 10
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-17",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 13,
        "total_stars": 13
      },
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 39957,
      "source_files_sampled": 27,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 8601
    },
    "dependencies": {
      "manifests": [
        "composer.json"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 15,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "packagist"
      ],
      "dependencies": [
        {
          "name": "guzzlehttp/guzzle",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.5"
        },
        {
          "name": "illuminate/contracts",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^10.0||^11.0||^12.0||^13.0"
        },
        {
          "name": "psr/http-message",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.1||^2.0"
        },
        {
          "name": "spatie/laravel-package-tools",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.16"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "guzzlehttp/guzzle",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "illuminate/contracts",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-message",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "spatie/laravel-package-tools",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "larastan/larastan",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "laravel/pint",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "nunomaduro/collision",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "orchestra/testbench",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "pestphp/pest",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "pestphp/pest-plugin-arch",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "pestphp/pest-plugin-laravel",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/extension-installer",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan-deprecation-rules",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan-phpunit",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 15,
        "direct_count": 4,
        "indirect_count": 11
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 38,
        "open_issues": 2,
        "closed_ratio": 0.818,
        "closed_issues": 9,
        "closed_unmerged_prs": 6
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "nikajorjika",
          "commits": 156,
          "avatar_url": "https://avatars.githubusercontent.com/u/4212052?v=4"
        },
        {
          "type": "User",
          "login": "MaestroError",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/46760939?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.918
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "dependabot-auto-merge.yml",
        "fix-php-code-style-issues.yml",
        "phpstan.yml",
        "run-tests.yml",
        "update-changelog.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 1,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/8 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b0db4abafa26c1a16d515e397fbb9b6075fdfca5",
        "ran_at": "2026-07-22T03:41:39Z",
        "aggregate_score": 5.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T03:54:23Z",
      "oldest_open_prs": [
        {
          "number": 56,
          "created_at": "2026-06-22T03:33:25Z",
          "last_comment_at": "2026-06-22T03:33:26Z",
          "last_comment_author": "dependabot"
        }
      ],
      "last_merged_pr_at": "2026-05-08T10:56:05Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 23,
          "created_at": "2025-11-06T14:34:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 25,
          "created_at": "2025-11-06T14:41:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/RedberryProducts/mcp-client-laravel",
    "host": "github.com",
    "name": "mcp-client-laravel",
    "owner": "RedberryProducts"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 60,
      "inputs": {
        "security": 52,
        "vitality": 75,
        "community": 47,
        "governance": 57,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 75,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "commits_last_year": 131,
              "human_commit_share": 0.96,
              "days_since_last_push": 30,
              "active_weeks_last_year": 11
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 30 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "11/52 weeks with commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "131 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 131
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 92,
            "inputs": {
              "releases_count": 3,
              "latest_release_tag": "v1.1.1",
              "releases_from_tags": false,
              "days_since_latest_release": 74,
              "mean_days_between_releases": 110.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "3 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 74 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 74
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~110.4 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 110.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 77,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 77 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 77
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 47,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "forks": 3,
              "stars": 13,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "13 stars",
                "points": 17.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "packages": [
                "redberry/mcp-client-laravel"
              ],
              "dependents": 1,
              "ecosystems": "packagist",
              "total_downloads": 99674,
              "monthly_downloads": 16084
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "16,084 downloads/month across packagist",
                "points": 56.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 16084,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "1 packages depend on it",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "registry_dependents",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 57,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 16,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.918
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 92% of commits",
                "points": 1.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "merged_prs": 38,
              "open_issues": 2,
              "closed_issues": 9,
              "issue_closed_ratio": 0.818,
              "closed_unmerged_prs": 6
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "82% of issues closed",
                "points": 38.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 82
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "38/44 decided PRs merged",
                "points": 33,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 38,
                      "decided": 44
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/8 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "followers": 38,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "RedberryProducts",
              "public_repos": 37,
              "account_age_days": 2316
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "38 followers of RedberryProducts",
                "points": 11.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 38,
                      "login": "RedberryProducts"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "37 public repos, account ~6 yr old",
                "points": 23.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 37
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "redberry/mcp-client-laravel"
              ],
              "ecosystems": "packagist",
              "any_deprecated": false,
              "min_days_since_publish": 77
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on packagist",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 77 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 77
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "topics": [
                "agent-integration",
                "ai-agents",
                "ai-framework",
                "chatbot",
                "context",
                "laravel",
                "laravel-ai",
                "laravel-package",
                "llm",
                "mcp",
                "mcp-client",
                "memory",
                "openai",
                "php",
                "prompt-engineering",
                "redberry",
                "tools"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "17 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 52,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 52,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 5.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/8 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.698,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 8601
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "67 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 37.2,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 67,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.31,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.04
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "31 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 31,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "4 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 39957,
              "source_files_sampled": 27,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "PHP without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "PHP"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/27 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 27,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T03:41:54.601478Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/RedberryProducts/mcp-client-laravel.svg",
  "full_name": "RedberryProducts/mcp-client-laravel",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPackagist.