Public record
Software health reportschema 0.27.0 · metrics 2.3.1 · 2026-07-29 10:35 UTC

cap-js / mcp

CAP plugin to expose services over MCP for AI agent consumption.

JavaScriptApache-2.0★ 16 stars⑂ 3 forkssince Jun 2026View on GitHub ↗
KindMCP serverLibraryPluginhow this is determined

cap-js/mcp holds a health index of 78 out of 100, placing it in the Good band. It scores highest on Vitality (82/100) and lowest on AI Readiness (44/100). It was last updated today. A single contributor accounts for most of its recent work.

78
overall / 100
Good

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean, calibrated against the distribution of the public record so bands carry percentile meaning; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At Risk ceiling of 34.

78
Exceptional93-100The record's top tier (≈ top 5%); essentially all checked criteria met
Excellent80-92Strong across the board; minor gaps
Good65-79Healthy; gaps are limited and manageable
Moderate50-64Acceptable with notable gaps; review recommended
Weak35-49Material weaknesses across several areas
At Risk20-34Significant weaknesses; adoption warrants caution
Critical1-19Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

The weighted overall 67 is calibrated to 78 on the published index scale (record calibration 2026-08-02).

Ownership

306 followers29 public repossince Nov 2022

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npm@cap-js/mcp1.2.04,71148 days agocapmcpmodel-context-protocolaiagent

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

82Excellent · 21% of overall
How it's scored
36/36Push recency — last push 0 days ago
15.9/36Commit cadence — 23/52 weeks with commits
18/18Commit volume — 208 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year208
human_commit_share0.82
days_since_last_push0
active_weeks_last_year23

Release discipline

100Exceptional
How it's scored
27/27Ships releases — 3 releases published
36/36Release recency — latest release 8 days ago
27/27Release cadence — a release every ~8.9 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count3
latest_release_tagv1.2.0
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases8.9
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

56Moderate · 17% of overall
How it's scored
19.1/60Stars — 16 stars
2.5/25Forks — 3 forks
0/15Watchers — 2 watchers
Inputs used
forks3
stars16
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

92Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
readme_badges
has_contributingyes
has_issue_templateno
has_code_of_conductyes
readme_badge_services
has_pull_request_templateyes
How it's scored
49/80Monthly downloads — 4,711 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packages@cap-js/mcp
dependents
ecosystemsnpm
total_downloads
monthly_downloads4,711
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

62Moderate · 23% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
10.4/22.5Commit distribution — top contributor authored 54% of commits
9.5/13.5Contributor breadth — 7 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled7
top_contributor_share0.537
How it's scored
0/42Issue resolution — no issues or no data
18.2/30PR acceptance — 17/28 decided PRs merged
0/13Newcomer PR acceptance — no first-time contributor's PR decided in 30d
13.5/15OpenSSF Scorecard: Code-Review — Found 15/16 approved changesets -- score normalized to 9
Inputs used
merged_prs17
open_issues0
closed_issues0
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio
closed_unmerged_prs11
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Excluded from scoring (no data or not applicable): Issue resolution, newcomer_pr_acceptance. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
17.9/25Owner reach — 306 followers of cap-js
18.2/25Track record — 29 public repos, account ~3 yr old
Inputs used
followers306
owner_typeOrganization
is_verified
owner_logincap-js
public_repos29
account_age_days1,364
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 8 days ago
12/20Version history — 4 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packages@cap-js/mcp
ecosystemsnpm
any_deprecatedno
min_days_since_publish8

Engineering Quality

Are baseline engineering and documentation practices in place?

74Good · 19% of overall
How it's scored
24/24CI workflows — 6 workflow(s)
24/24Tests present
16/16Linter config — eslint.config.js
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

60Moderate
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 3 topics
10/10Wiki
Inputs used
topicsai, cap, plugin
has_wikiyes
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

66Good · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
6.8/7.5Code-Review — Found 15/16 approved changesets -- score normalized to 9
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
1.5/5SAST — SAST tool is not run on all commits -- score normalized to 3
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5.7
Excluded from scoring (no data or not applicable): packaging, signed_releases. Remaining weights renormalized.

Dependency advisories

100Exceptional
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages96
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@cap-js/mcp@1.2.0 runtime dependency closure — what installing the published package pulls in — 96 packages. Reachability is not analyzed.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight (4%): agent tooling is a real maintenance signal, but a repository with none can still reach 100/100.

44Weak · 4% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 81 of 82 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.988
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — eslint.config.js
0/11Static type checking
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
8/8Automated maintenance — 2 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.02
How it's scored
0/45Type-checkable code — JavaScript without a type-check config
53.6/55Manageable file sizes — 1/39 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes67,478
source_files_sampled39
oversized_source_files1
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalyes
api_schema_files

Key facts

16GitHub stars
7contributors
208commits, last 12 months
0days since last push
3releases
1bus factor
0open issues
npmpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

More detail

Star and fork history 0 ★ / 3 ⇿
0Stars
3Forks
1Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

12233312026-072026-072026-07
Major 0Minor 0Patch 1
OpenSSF Scorecard 5.7 / 10
5.7aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-29 10:35 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests17 out of 17 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
9Code-ReviewFound 15/16 approved changesets -- score normalized to 9
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
0Dangerous-Workflowdangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
3SASTSAST tool is not run on all commits -- score normalized to 3
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 3
RegistryPackageVersion constraintManifest
npm@modelcontextprotocol/sdk^1.29.0package.json
npm@toon-format/toon>=2.3package.json
npmzod^4.3.6package.json
All dependencies 208

Full resolved dependency set from the GitHub dependency graph: 3 direct and 205 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
npm@modelcontextprotocol/sdk^1.29.0direct
npm@toon-format/toon>=2.3direct
npmzod^4.3.6direct
npm@cap-js/cds-test^1.0.1indirect
npm@cap-js/hana>=2indirect
npm@cap-js/sqlite>=2indirect
npm@colors/colors1.6.0indirect
npm@ioredis/commands1.5.0indirect
npm@sap/approuter20.8.8indirect
npm@sap/audit-logging6.8.1indirect
npm@sap/cds>=9indirect
npm@sap/cds-mtxs>=3indirect
npm@sap/e2e-trace5.4.0indirect
npm@sap/hana-client^2.29.23indirect
npm@sap/logging8.4.0indirect
npm@sap/xsenv5.6.1indirect
npm@sap/xssec4.9.0indirect
npm@sap/xssec^4indirect
npm@tootallnate/once1.1.2indirect
npm@types/triple-beam1.3.5indirect
npmagent-base6.0.2indirect
npmagent-base7.1.4indirect
npmagentkeepalive4.6.0indirect
npmajv8.17.1indirect
npmassert-plus1.0.0indirect
npmasynckit0.4.0indirect
npmaxios1.12.2indirect
npmaxios-cookiejar-support5.0.5indirect
npmaxios-retry4.5.0indirect
npmbase64-url2.3.3indirect
npmbasic-auth1.1.0indirect
npmbetter-sqlite3>=12indirect
npmbody-parser1.20.4indirect
npmbuffer-equal-constant-time1.0.1indirect
npmbytes3.1.2indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcall-bound1.0.4indirect
npmcf-nodejs-logging-support7.4.2indirect
npmclone2.1.2indirect
npmcluster-key-slot1.1.2indirect
npmcombined-stream1.0.8indirect
npmcommander2.20.3indirect
npmcompressible2.0.18indirect
npmcompression1.8.1indirect
npmconnect3.7.0indirect
npmcontent-type1.0.5indirect
npmcookie0.7.2indirect
npmcookie1.1.1indirect
npmcookie-parser1.4.7indirect
npmcookie-signature1.0.6indirect
npmcookie-signature1.0.7indirect
npmcookie-signature1.2.2indirect
npmcore-util-is1.0.2indirect
npmdebug2.6.9indirect
npmdebug4.3.5indirect
npmdebug4.4.0indirect
npmdebug4.4.3indirect
npmdecode-uri-component0.2.2indirect
npmdeepmerge2.2.1indirect
npmdelayed-stream1.0.0indirect
npmdenque2.1.0indirect
npmdepd2.0.0indirect
npmdestroy1.2.0indirect
npmdunder-proto1.0.1indirect
npmecdsa-sig-formatter1.0.11indirect
npmee-first1.1.1indirect
npmencodeurl1.0.2indirect
npmencodeurl2.0.0indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-object-atoms1.1.1indirect
npmes-set-tostringtag2.1.0indirect
npmescape-html1.0.3indirect
npmetag1.8.1indirect
npmexpress-session1.18.2indirect
npmextsprintf1.4.1indirect
npmfast-deep-equal3.1.3indirect
npmfast-uri3.1.0indirect
npmfecha4.2.3indirect
npmfetch-retry6.0.0indirect
npmfilter-obj1.1.0indirect
npmfinalhandler1.1.2indirect
npmfollow-redirects1.15.11indirect
npmform-data4.0.5indirect
npmfresh0.5.2indirect
npmfunction-bind1.1.2indirect
npmget-intrinsic1.3.0indirect
npmget-proto1.0.1indirect
npmgopd1.2.0indirect
npmhas-symbols1.1.0indirect
npmhas-tostringtag1.0.2indirect
npmhasown2.0.2indirect
npmhttp-cookie-agent6.0.8indirect
npmhttp-errors2.0.1indirect
npmhttp-headers3.0.2indirect
npmhttp-proxy-agent4.0.1indirect
npmhttps-proxy-agent5.0.1indirect
npmhumanize-ms1.2.1indirect
npmiconv-lite0.4.24indirect
npminherits2.0.4indirect
npmioredis5.6.1indirect
npmis-retry-allowed2.2.0indirect
npmjson-schema-traverse1.0.0indirect
npmjson-stringify-safe5.0.1indirect
npmjsonwebtoken9.0.3indirect
npmjwa2.0.1indirect
npmjws4.0.1indirect
npmjwt-decode2.2.0indirect
npmjwt-decode4.0.0indirect
npmlodash4.17.21indirect
npmlodash.defaults4.2.0indirect
npmlodash.includes4.3.0indirect
npmlodash.isarguments3.1.0indirect
npmlodash.isboolean3.0.3indirect
npmlodash.isinteger4.0.4indirect
npmlodash.isnumber3.0.3indirect
npmlodash.isplainobject4.0.6indirect
npmlodash.isstring4.0.1indirect
npmlodash.once4.1.1indirect
npmlogform2.7.0indirect
npmlru-cache4.1.5indirect
npmmath-intrinsics1.1.0indirect
npmmedia-typer0.3.0indirect
npmmime1.6.0indirect
npmmime4.1.0indirect
npmmime-db1.52.0indirect
npmmime-db1.54.0indirect
npmmime-types2.1.35indirect
npmmoment2.30.1indirect
npmms2.0.0indirect
npmms2.1.2indirect
npmms2.1.3indirect
npmmustache4.2.0indirect
npmnegotiator0.6.4indirect
npmnext-line1.1.0indirect
npmnode-cache5.1.2indirect
npmnode-fetch2.7.0indirect
npmnode-forge1.3.3indirect
npmobject-inspect1.13.4indirect
npmon-finished2.3.0indirect
npmon-finished2.4.1indirect
npmon-headers1.1.0indirect
npmonce1.4.0indirect
npmparseurl1.3.3indirect
npmpassport0.7.0indirect
npmpassport-strategy1.0.0indirect
npmpause0.0.1indirect
npmproxy-from-env1.1.0indirect
npmpseudomap1.0.2indirect
npmpsl1.15.0indirect
npmpunycode2.3.1indirect
npmqs6.14.1indirect
npmquery-string7.1.3indirect
npmquerystringify2.2.0indirect
npmrandom-bytes1.0.0indirect
npmrange-parser1.2.1indirect
npmraw-body2.5.3indirect
npmreadable-stream3.6.2indirect
npmredis-errors1.2.0indirect
npmredis-parser3.0.0indirect
npmrequest-stats2.0.1indirect
npmrequest-stats3.0.0indirect
npmrequire-from-string2.0.2indirect
npmrequires-port1.0.0indirect
npmret0.1.15indirect
npmsafe-buffer5.2.1indirect
npmsafe-regex1.1.0indirect
npmsafe-stable-stringify2.5.0indirect
npmsafer-buffer2.1.2indirect
npmsemver7.7.3indirect
npmsend0.19.2indirect
npmserve-static1.16.3indirect
npmsetprototypeof1.2.0indirect
npmside-channel1.1.0indirect
npmside-channel-list1.0.0indirect
npmside-channel-map1.0.1indirect
npmside-channel-weakmap1.0.2indirect
npmsplit-on-first1.1.0indirect
npmstandard-as-callback2.1.0indirect
npmstatuses1.5.0indirect
npmstatuses2.0.2indirect
npmstrict-uri-encode2.0.0indirect
npmstring_decoder1.3.0indirect
npmtoidentifier1.0.1indirect
npmtough-cookie4.1.4indirect
npmtr460.0.3indirect
npmtriple-beam1.4.1indirect
npmtv41.3.0indirect
npmtype-is1.6.18indirect
npmuid-safe2.1.5indirect
npmuniversalify0.2.0indirect
npmunpipe1.0.0indirect
npmurijs1.19.11indirect
npmurl-parse1.5.10indirect
npmutil-deprecate1.0.2indirect
npmutils-merge1.0.1indirect
npmuuid8.3.2indirect
npmuuid9.0.1indirect
npmvalidator13.15.26indirect
npmvary1.1.2indirect
npmverror1.10.1indirect
npmwebidl-conversions3.0.1indirect
npmwhatwg-url5.0.0indirect
npmwinston-transport4.9.0indirect
npmwrappy1.0.2indirect
npmws7.5.10indirect
npmwtfnode0.10.1indirect
npmyallist2.1.2indirect
Dependency advisories 0

Installing npm:@cap-js/mcp@1.2.0 pulls in 96 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "ai",
        "cap",
        "plugin"
      ],
      "is_fork": false,
      "size_kb": 989,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CAP CDS": 19880,
        "JavaScript": 265231
      },
      "pushed_at": "2026-07-29T00:24:05Z",
      "created_at": "2026-06-17T09:43:53Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T11:19:23Z",
      "description": "CAP plugin to expose services over MCP for AI agent consumption.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://cap.cloud.sap",
      "name": "SAP Cloud Application Programming Model",
      "type": "Organization",
      "login": "cap-js",
      "company": null,
      "location": null,
      "followers": 306,
      "avatar_url": "https://avatars.githubusercontent.com/u/117299792?v=4",
      "created_at": "2022-11-02T16:02:46Z",
      "is_verified": null,
      "public_repos": 29,
      "account_age_days": 1364
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-21T09:01:09Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-07-08T09:05:46Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-03T13:35:12Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "abe1483d3c0871ebc105b5452471d4021f4e7e26",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump dependency to toon v4 (#31)",
          "author_name": "Daniel Hutzel",
          "author_login": "danjoa",
          "committed_at": "2026-07-27T11:17:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa4a9a00d92b811ff4c61513a99b4575736e1700",
          "body": "* add api policy note\n\n* fix link",
          "is_bot": false,
          "headline": "chore: add api policy note (#29)",
          "author_name": "Maximilian Eckert",
          "author_login": "maxieckert-sap",
          "committed_at": "2026-07-23T14:53:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba6fe63c720f4720040340c1d7e0ee180148fdbf",
          "body": "* update tool description\n\n* changelog, readme\n\n* adjust tool\n\n* readme\n\n* schöner\n\n* cql -> cqn",
          "is_bot": false,
          "headline": "chore: prep v1.2.0 (#27)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-07-21T08:47:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07353cb0686beec06aac4d376338f2736f3393b2",
          "body": "* Support SQL syntax\n\n* Avoid includes\n\n* Update sql-format.test.js\n\n* Add missing test\n\n* Fix\n\n* Format handling\n\n* Fix\n\n* Fix\n\n* Update sql-format.test.js\n\n* Update tools.js\n\n* fix: 15 use cqn as default format\n\n* ci: 15 fix the tests\n\n* prettier\n\n* Update README.md\n\n* cleanup and func validation\n\n* formatting\n\n* Update CHANGELOG.md\n\n---------\n\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "feat: sql format (#15)",
          "author_name": "Marten Schiwek",
          "author_login": "schiwekM",
          "committed_at": "2026-07-09T10:38:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f7e135bbf22f043ca22dced7fba2aab92a8b642",
          "body": "* Fix package dependencies\n\n* fix test scripts\n\n---------\n\nCo-authored-by: I569192 <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "chore: package dependencies (#24)",
          "author_name": "Daniel Hutzel",
          "author_login": "danjoa",
          "committed_at": "2026-07-08T10:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd8409b90f26a3796e21111389c2c0775916913a",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump node versoin in rel workflow (#23)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-07-08T09:02:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5fcf5195d1e9c06d818c9034f02c202c1228717",
          "body": null,
          "is_bot": false,
          "headline": "chore: v1.1.1 (#22)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-07-08T08:49:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6db2bcdcc927960c4eb524b77acab1e2728af982",
          "body": "* move protocols to package.json\n\n* add clients to package.json\n\n---------\n\nCo-authored-by: I569192 <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "chore: move protocol registration to package.json (#21)",
          "author_name": "Henry Brink",
          "author_login": "henrybrink",
          "committed_at": "2026-07-08T08:36:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e37ec7e114a69bc6ea5625a97e2b1bc3a9ab46e",
          "body": "* ci: run tests with CDS 9 and 10\n\n* .\n\n* ci: add cds v -i for test job\n\n* ci: add matrix with db packages and mtx\n\n* .\n\n* ci: use overrides for CDS version pinning (a2a pattern)\n\n- Switch to conditional 'if: matrix.cds-version == 9' blocks with\n  hardcoded overrides (matching a2a approach)\n- Simple\n[…]\n more\n\n* another try\n\n* Update jest.config.js\n\n* Update mcp-test-client.js\n\n* Update prefix.test.js\n\n* Fix\n\n* Fix\n\n* Update test.yml\n\n---------\n\nCo-authored-by: Marten Schiwek <marten.schiwek@sap.com>",
          "is_bot": false,
          "headline": "ci: run tests with CDS 9 and 10 (#16)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-07-08T08:28:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8602b89ff845a70e52c656da13a43110d8a639c6",
          "body": "* Fix err.details\n\n* feat: 13 add formatError to read tool\n\n---------\n\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "fix: Properly handling err.details (#13)",
          "author_name": "Marten Schiwek",
          "author_login": "schiwekM",
          "committed_at": "2026-07-06T08:10:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26c298a52a8edffa61cf2bc05370bd1fc3b9f122",
          "body": null,
          "is_bot": false,
          "headline": "chore: add package.json url (#12)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-07-03T13:31:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60c60047c94e114814619d4d78541f655369026f",
          "body": null,
          "is_bot": false,
          "headline": "chore: update release workflow(#11)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-07-03T13:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48e8170aa4687622b55d83f9d35afa765ef9f37c",
          "body": "…(#9)\n\n* chore: remove placeholder in release.yml and bump version of mcp sdk\n\n* rm sqlite dep\n\n* rm sqlite dep for mtx\n\n* dev dep: bump cap-js/sqlite for cds 10\n\n* also bump hana adapter in samples\n\n* deps in samples for cds 9\n\n* REVERT BEFORE MERGE: pr_target to pr\n\n* ALSO REVERT\n\n* fix: adjust sample\n\n* fix cds 9\n\n* .\n\n* revert changes\n\n---------\n\nCo-authored-by: I569192 <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "chore: remove placeholder in release.yml and bump version of mcp sdk …",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-07-03T11:54:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d946f748c834e12f984db8f184f3efb08e7f7d11",
          "body": "Bumps [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) from 12.9.0 to 12.10.0.\n- [Release notes](https://github.com/WiseLibs/better-sqlite3/releases)\n- [Commits](https://github.com/WiseLibs/better-sqlite3/compare/v12.9.0...v12.10.0)\n\n---\nupdated-dependencies:\n- dependency-name: better-sq\n[…]\nemver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: I569192 <simon.engel01@sap.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump better-sqlite3 from 12.9.0 to 12.10.0 (#3)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-17T14:02:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8131ef310e44ba966b8cf1e55e6caacb974081bf",
          "body": "…updates (#2)\n\nBumps the github-actions group with 5 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/github-script](https://github.com/actions/github-script) | `8` | `9` |\n| [actions/setup-node](https://github.com/actions/setup-node) | `4` | `6` |\n| [actions/check\n[…]\nsion-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group across 1 directory with 5 …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-17T13:59:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f726716c6f734168d0554d022578fe22a99c638c",
          "body": "* rm emoji reference\n\n* prettier\n\n* rm emoji srvs\n\n* fix lint\n\n* prettier\n\n* right repo\n\n* REVERT BEFORE MERGE\n\n* Revert \"REVERT BEFORE MERGE\"\n\nThis reverts commit d1c2ea95c968dfd35cdf5f9135fb701621530324.",
          "is_bot": false,
          "headline": "chore: fixes (#4)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T13:48:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0edca5bf0ff3184aff05fed629bf77722ceefe89",
          "body": "chore: move code",
          "is_bot": false,
          "headline": "Merge pull request #1 from cap-js/seed-history",
          "author_name": "Maximilian Eckert",
          "author_login": "maxieckert-sap",
          "committed_at": "2026-06-17T12:11:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77319ac2d5cc204239cfe7c4c0f177cf7f736f77",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-17T12:10:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb638bc739d8b4e132bcf2de076304249583d1a2",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove workflow",
          "author_name": "I569192",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T11:54:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c17b7ae298f5de781b8cb0a276927719f04d071f",
          "body": null,
          "is_bot": false,
          "headline": "chore: rm workflow",
          "author_name": "I569192",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T11:24:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72ac3a4fc4dc910267634d64350c1515bd6c7d67",
          "body": null,
          "is_bot": false,
          "headline": "ci: bump node-version matrix",
          "author_name": "I569192",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T11:16:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57b46cb180e00289dd8f678f4ffe72b6de9eda22",
          "body": null,
          "is_bot": false,
          "headline": "chore: delete config",
          "author_name": "I569192",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T11:11:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9315c5c59c8a749c41584419cc021a7333f5cb6",
          "body": null,
          "is_bot": false,
          "headline": "chore: delete .npmrc",
          "author_name": "I569192",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T11:08:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a290c6c81fd1b7305d64f804a0d5a3958f79dfb7",
          "body": null,
          "is_bot": false,
          "headline": "chore: merge existing history",
          "author_name": "I569192",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-17T11:05:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42a4b15aed927d6f349bd033bbe1206c5a0d7073",
          "body": null,
          "is_bot": true,
          "headline": "Initial commit",
          "author_name": "ospo-bot[bot]",
          "author_login": "ospo-bot[bot]",
          "committed_at": "2026-06-17T09:43:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9c6ffbaff69d7c54b06c07ae813b3464aa4e9dc",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cpa/api-metadata-validator digest to b03a144 (#183)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-16T15:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55d32136639208eebcd175a153e29e33dbcdae41",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cpa/api-metadata-validator digest to 0b8bb56 (#182)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-16T14:07:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70bf08932cb52fbccb88dfa52512c7c3909d7120",
          "body": "* bump version\r\n\r\n* fixes",
          "is_bot": false,
          "headline": "feat: custom logger (#178)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-16T13:55:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7766f2e82d45685e4a9fb51f430be9330000deaa",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cap/.github digest to 9f7b60f (#180)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-16T13:50:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "093099db7da18194d24a874566df5f21e843c154",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cpa/api-metadata-validator digest to ad02ae3 (#181)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-16T13:50:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31fcee95771fdf7438135513b8507e7a131c1314",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": true,
          "headline": "chore(deps): update cpa/api-metadata-validator digest to 34d1af2 (#158)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-16T12:22:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60a80a3c0bdf1ab5b17c1c4eec18bf3d20f5c900",
          "body": "* test: add custom tool prefix test\r\n\r\n* feat: consider custom prefix for tool names\r\n\r\n* docs: add new flag to README.md\r\n\r\n* chore: add changelog\r\n\r\n* fix: remove @mcp.prefix annotation",
          "is_bot": false,
          "headline": "feat: add custom prefix for tools (#177)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-16T12:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "129027246559354f4f842e153e1b82b1bb2eb884",
          "body": "* fix\r\n\r\n* rename\r\n\r\n* changelog, package version\r\n\r\n* complex types in action params describe output\r\n\r\n* Update lib/tools.js\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>\r\n\r\n* Update lib/tools.js\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>\r\n\r\n---------\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "fix: action parameters (#169)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-15T13:31:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3c69df2d948b666c09cd77085f2788eeaef2bb4",
          "body": "* fix: allow  and  CDS session variable\r\n\r\n* Update package.json",
          "is_bot": false,
          "headline": "fix: allow `$now` and `$user` CDS session variable (#172)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-15T13:27:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e9e7175f0d4e7832280f91530df7fd1c2caf863",
          "body": null,
          "is_bot": false,
          "headline": "ci: remove COM_GITHUB_TOKEN secret (#173)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-15T10:49:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27618abbedc42117d3d8e1e454a321ecaa73e1fd",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cap/.github digest to ffc3346 (#170)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-12T13:13:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f70c1112f078ca2c1057b23ac11dc6c7778d8396",
          "body": "remove log levels",
          "is_bot": false,
          "headline": "fix: remove log levels (#164)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-06-11T13:52:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8f944911c3ea1a787fb445278520d294f070477",
          "body": null,
          "is_bot": false,
          "headline": "chore: Increase version to 1.0.2 (#163)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-10T11:41:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "029197fb8ba1f3767181059a6a24dc935abbb2d5",
          "body": "* chore: Increase version and adjust CHANGELOG.md (#155)\r\n\r\n* Update CHANGELOG.md",
          "is_bot": false,
          "headline": "chore: Increase version and adjust CHANGELOG.md (#155) (#160)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-10T10:16:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c13844d48f84925c07b51cfe52f1a49af741d92a",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cap/.github digest to 2aa3675 (#154)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-10T07:46:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "550b3dff62c4e6c3b9001b85e25430807405c71e",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cpa/api-metadata-validator digest to ce1f317 (#157)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-10T07:45:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ad8501a338d50b8daac33cf4d1fb96f471730b4",
          "body": null,
          "is_bot": false,
          "headline": "chore: Increase version and adjust CHANGELOG.md (#155)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-09T14:23:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bdfb4bfc1ece9ef5fbaf443751ea665433cb178",
          "body": "* feat: Add option to customize server instructions\r\n\r\n* test: Add tests\r\n\r\n* docs: Add new option to README\r\n\r\n* chore: cleanup\r\n\r\n* changelog",
          "is_bot": false,
          "headline": "feat: Add customizable server instruction (#116)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-09T13:42:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9d4a800f43031d62895bd074be5cf47a3cdfb31",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": true,
          "headline": "chore(deps): pin dependencies (#142)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-09T13:33:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6d0a5d0b88359703ade0e081ca250b8772b6214",
          "body": "* feat: support skip as offset next to limit\r\n\r\n* docs: add changelog\r\n\r\n* chore: bump version\r\n\r\n* refactor: rename parameter to offset",
          "is_bot": false,
          "headline": "feat: add `offset` parameter in the query tool (#152)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-06-09T13:26:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0a85d1bddf68675bad8913aed58cf74d7ed071e",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cpa/api-metadata-validator digest to a95b1d4 (#148)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-09T13:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c704d135feef6ca1cd339605399f649e68698f4",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update cap/.github digest to 87c2db5 (#151)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-09T13:24:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3700976959b4fc376eab8a7f8c102511d1163643",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>",
          "is_bot": true,
          "headline": "chore(deps): update actions/checkout digest to df4cb1c (#153)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-06-09T13:24:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13281f0b3cf6d41ec5293e28776d95bb82c98362",
          "body": "* test: use cds.entities\r\n\r\n* Update global-limit.test.js",
          "is_bot": false,
          "headline": "test: use cds.entities (#150)",
          "author_name": "Johannes Vogel",
          "author_login": "johannes-vogel",
          "committed_at": "2026-05-19T09:30:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c5553e1f302161680d3b962d8b6832c9bd7c325",
          "body": "* fix: Remove zod uuid check to allow HANA specific UUIDs\r\n\r\n* Update CHANGELOG.md",
          "is_bot": false,
          "headline": "fix: Remove zod uuid check to allow HANA specific UUIDs (#149)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-05-18T14:05:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02b6f1b1b8cb55bbfdbfce93736cd116d8c6fd2c",
          "body": "* fix: allow for feature toggle definitions\r\n\r\n* add test\r\n\r\n* fix formatting\r\n\r\n* include CHANGELOG.md\r\n\r\n* adjust test matrix\r\n\r\n* bump version\r\n\r\n---------\r\n\r\nCo-authored-by: Simon Engel <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "fix: allow for feature toggle definitions (#143)",
          "author_name": "Nils Hirsekorn",
          "author_login": null,
          "committed_at": "2026-05-13T12:53:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "307bece520302cf1c8f7161aa94825bbf8de01d2",
          "body": null,
          "is_bot": false,
          "headline": "chore: mtx dep for cds 8 for sqlite tests (#147)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-05-13T12:44:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afa4ce891840311eebd49f8127873a3c0123ce91",
          "body": "* add bookshop-mtx example\r\n\r\n* adjust test matrix",
          "is_bot": false,
          "headline": "tests: bookshop mtx (#146)",
          "author_name": "Nils Hirsekorn",
          "author_login": null,
          "committed_at": "2026-05-13T12:32:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68a827651e923929ad1a52a8d39dfc00728ad71b",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): use self hosted runner (#145)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-05-13T11:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59a0d196463505a031342a7672612dd68a2ed9f6",
          "body": null,
          "is_bot": false,
          "headline": "chore: update CI (#144)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-05-13T11:19:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "578fa4eb58789886e10c745377dc51c789443bb2",
          "body": "chore(deps): pin dependencies\r\n\r\nCo-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>\r\nCo-authored-by: Simon Engel <simon.engel01@sap.com>",
          "is_bot": true,
          "headline": "chore(deps): pin actions (#137)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-05-12T13:43:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40af5071cb93f737ae3dcfaa62554f2f84e87236",
          "body": "We have refactored the protocol adapter classes to return real class instances instead of a router with cap/cds#6271.\r\n\r\nTherefore, the mcp adapter needs to return its router in `.router`\r\n\r\nCo-authored-by: Simon Engel <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "chore: adapt for cds10 (#140)",
          "author_name": "Johannes Vogel",
          "author_login": "johannes-vogel",
          "committed_at": "2026-05-12T12:26:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8efe6a46c6a5e4f8fc8232b6d91e4f2aca92c75f",
          "body": "12.10.0 is missing in internal artifactory, so cannot release without this pin :(",
          "is_bot": false,
          "headline": "chore: pin sqlite (#141)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-05-12T12:23:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed1a24b17653c2021ee86e1560534977c91e011f",
          "body": "* Fix actions with many and custom types\r\n\r\n* Update tools.js\r\n\r\n* Fix\r\n\r\n---------\r\n\r\nCo-authored-by: Simon Engel <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "fix: custom types many actions (#138)",
          "author_name": "Marten Schiwek",
          "author_login": "schiwekM",
          "committed_at": "2026-05-12T10:06:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef4e705a4329dfc3c9b2561436745beb9c13ee34",
          "body": "* Update from internal cf setup to os one\r\n\r\n* move cds 8 setup",
          "is_bot": false,
          "headline": "chore: cf setup in CI (#139)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-05-12T10:01:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eab987ee3f72996a6d25a71e8a28de2bd7124baf",
          "body": "…ag to v26 (#132)\n\nCo-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>\r\nCo-authored-by: Simon Engel <simon.engel01@sap.com>",
          "is_bot": true,
          "headline": "chore(deps): update public.int.repositories.cloud.sap/ubuntu docker t…",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-05-05T16:44:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4635e3f499fb205800e63654dfb1c1373128b9e",
          "body": "Co-authored-by: ospo-renovate[bot] <40221+ospo-renovate[bot]@users.noreply.github.tools.sap>\r\nCo-authored-by: Simon Engel <simon.engel01@sap.com>",
          "is_bot": true,
          "headline": "chore(deps): update dependency jest-junit to v17 (#133)",
          "author_name": "ospo-renovate[bot]",
          "author_login": null,
          "committed_at": "2026-05-05T16:43:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a666d1482585a42a7bec88f140ca3cbafb4c8c3",
          "body": "* changelog\r\n\r\n* bump version",
          "is_bot": false,
          "headline": "chore: prepare v0.0.12 (#136)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-05-05T11:54:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2340a40f462358d2577b9a133a9ae13a14725c0",
          "body": "* ci: add test run with cds 8\r\n\r\n* Added npm config set legacy-peer-deps=true\r\n\r\n* set express to v4 for cds 8\r\n\r\n* .\r\n\r\n* Revert \".\"\r\n\r\nThis reverts commit 69da9385b2791deba1ac12cddd9fcad262bf8423.\r\n\r\n* add unzip to the apt-get install\r\n\r\n* Revert \"add unzip to the apt-get install\"\r\n\r\nThis reverts commit c70bac016e713ad20d3547ee01ed459b987abb10.",
          "is_bot": false,
          "headline": "ci: support CDS version 8 (#135)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-05-05T11:04:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76392911a00184bba59eee6ed53970c83e326def",
          "body": "* move doc comments to package.json\r\n\r\n* changelog\r\n\r\n* docComments -> docs",
          "is_bot": false,
          "headline": "fix: production doc comments (#134)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-04-28T16:15:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9026550f1a8d67d3bd1d337aa27bb1f4590f6e88",
          "body": ".",
          "is_bot": false,
          "headline": "chore: prepare 0.0.11 (#131)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-04-22T15:15:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96db39d9ab829abcd9d986146f6c987e99fb4bcd",
          "body": null,
          "is_bot": false,
          "headline": "chore: export executeTools functions (#130)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-04-22T15:11:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e56b3d892c2e6f4b4ba664c89c410cb72d05b6d",
          "body": "* open and closed bounds, infinity, string bounds\r\n\r\n* Update lib/utils/cds-to-schema.js\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>\r\n\r\n* ,\r\n\r\n---------\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "fix: `@assert.range`  (#129)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-04-08T15:52:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac974d908127c2764bf2978a4cdc870f87994fc8",
          "body": "* fix: Remove todo placeholder and allow multiple service compilations\r\n\r\n* docs: Add changelog\r\n\r\n* fix: cleanup limit tests\r\n\r\n* fix(app): fallback\r\n\r\n* fix: describe\r\n\r\n* add changelog",
          "is_bot": false,
          "headline": "fix: adjust @cds.query.limit behaviour (#128)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-31T14:49:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30e21ec496ec1d3773e2a2333782d038ad8b1880",
          "body": "…ations (#117)\n\n* fix: Remove todo placeholder and allow multiple service compilations\r\n\r\n* docs: Add changelog",
          "is_bot": false,
          "headline": "feat: update server card generation and allow multiple service compil…",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-31T12:12:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "456635546e8a366e2041fb7910e8933a6bbd62d3",
          "body": "* .\r\n\r\n* prepare next version, add check changelog action\r\n\r\n* update actions\r\n\r\n* update runner for workflows\r\n\r\n---------\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "chore: prepare 0.0.10 (#127)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-30T15:36:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9ea7d892fd67df17ef142ea096c9d134bcf9690",
          "body": "* feat: add search to cqn\r\n\r\n* update testsd\r\n\r\n* Revert \"update testsd\"\r\n\r\nThis reverts commit 557c945c4793ae5b9f589aca8469d5ba32cac29d.\r\n\r\n* add search annoation only to title\r\n\r\n* set cds.hana.fuzzy: false\r\n\r\n* update groupBy description\r\n\r\n* add keyword is\r\n\r\n* add null as keyword for hana",
          "is_bot": false,
          "headline": "feat: add `search` from CQN (#125)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-30T12:55:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f8d83a272acde89e9bc12a10fda42933b66c1f8",
          "body": null,
          "is_bot": false,
          "headline": "feat: Extend CQN with broader expression support (#126)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-30T12:50:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d65387da4e9497df0fc687833303fc3a54405b17",
          "body": "Co-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "feat: add having to query (#124)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-30T10:34:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5483bb2cce12464465dc2b039bada4e1e1d087f",
          "body": "move resolvei18n and getDescription to schema, to use in tools",
          "is_bot": false,
          "headline": "fix: consistent description (#123)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-30T10:30:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd91d138af79d7092fcb9d3313bf45064fa432b4",
          "body": "* enums in action params and describe output\r\n\r\n* @assert.range in description output and action tool input\r\n\r\n* @assert.format in describe and per-action-tools\r\n\r\n* @mandatory in describe output\r\n\r\n* fix tests\r\n\r\n* .\r\n\r\n* Revert \".\"\r\n\r\nThis reverts commit 6c428a51f56ca1c99a6809e445514d480d66d6b3.",
          "is_bot": false,
          "headline": "feat: add more annotations (#121)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-30T09:18:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73c6920bf5d2f734cc14fcb9e2cf2bacbd8b38d3",
          "body": null,
          "is_bot": false,
          "headline": "fix: set limit to null for distinct queries (#122)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-30T07:16:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a998a0532eb733759961dc338f27e840f252133f",
          "body": "* refactor: Invert the toon format config\r\n\r\n* feat: Add keys array in describe result\r\n\r\n* fix: Plural parameter names for describe tool\r\n\r\n* fix: Support plural entities and actions parameter",
          "is_bot": false,
          "headline": "refactor: Invert the toon format config (#120)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-27T13:24:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c82f9f09f35390dc042da9274bf561a6d94e5e01",
          "body": "* add refines for order by and group by\r\n\r\n* add tests",
          "is_bot": false,
          "headline": "chore: restrict parameter length (#119)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-27T12:48:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba4c0e38f0d1d677669014e226921e17a5842743",
          "body": "* fix: Remove string option from input schema\r\n\r\n* test: Adjust tests to remove string support\r\n\r\n* refactor: Adjust extractFieldsFromWhere\r\n\r\n* refactor: clean up",
          "is_bot": false,
          "headline": "fix: Remove string from columns input schema (#118)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-27T12:44:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1950861bf2a057ec346f7eec7bde6ffee4635cc",
          "body": "* test: Cleanup tests\r\n\r\n* test: Add hana tests\r\n\r\n* test: Reuse exisitng cf-setup action",
          "is_bot": false,
          "headline": "test: Add HANA integration tests (#113)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-23T13:24:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdc958c54c0922dcce8434a0c15a9ece37e88843",
          "body": "* update changelog\r\n\r\n* update date\r\n\r\n* Update package.json\r\n\r\n---------\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "chore: update changelog (#112)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-23T08:22:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f62526014b43b8562eeaea8069718b838c46165b",
          "body": "* support ref in column schema\r\n\r\n* add expand ref in column schema\r\n\r\nremove localized from Books (sqlite error), update localization tests to\r\ngenre",
          "is_bot": false,
          "headline": "feat: select with ref + expand (#111)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-23T08:03:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2ca25f51e732f967077987a25ccf713e240a212",
          "body": "* refactor: Remove per entity tools option\r\n\r\n* refactor: remove per entity tool",
          "is_bot": false,
          "headline": "refactor: remove per entity tools option (#101)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-19T11:43:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a84e008e661896b88cc072ca6c9befff1e36ff6",
          "body": "remove json_response feature flag",
          "is_bot": false,
          "headline": "fix: rm json_response and use from header (#109)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-19T10:54:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd52439d7a2103dcc05547a31d12a1e8f0690991",
          "body": "* chore: Change feature flag to mcp.autowire\r\n\r\n* chore: Remove auto wire for cline\r\n\r\n* feat(app): Allow overwrite of user and password\r\n\r\n* chore: Move feature flags to cds.mcp\r\n\r\n* test: Adjust tests\r\n\r\n* Delete access-control.cds\r\n\r\n* docs: Update readme",
          "is_bot": false,
          "headline": "chore: adjust auto wiring of MCP servers (#108)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-19T09:48:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98216deb2d1878791715307c78d80788db42389d",
          "body": "* udpate format\r\n\r\n* fix: Change log output breakLength\r\n\r\n---------\r\n\r\nCo-authored-by: I569192 <simon.engel01@sap.com>",
          "is_bot": false,
          "headline": "fix: adjust log format (#107)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-19T09:47:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00bb4eb239f37aebec2b28a8d01b4292344ae078",
          "body": "udpate format",
          "is_bot": false,
          "headline": "fix: formatting of query log (#106)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-19T07:25:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cde2c1c00ee2d16af0368062d91ade1453d56099",
          "body": "feat: add service name to tool log",
          "is_bot": false,
          "headline": "feat: add service name to tool log (#105)",
          "author_name": "Stefan Rudi",
          "author_login": "stefanrudi",
          "committed_at": "2026-03-18T09:21:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cce03a31b8bd8551fe29087158850ab581582ec",
          "body": "* updates\r\n\r\n* Update lib/tools.js\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>\r\n\r\n* back to descriptions\r\n\r\n---------\r\n\r\nCo-authored-by: Stefan Rudi <stefan.rudi@sap.com>",
          "is_bot": false,
          "headline": "chore: include review (#104)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-18T09:07:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c15c3b7300d0fef52d9012cd3220def51912d0b2",
          "body": "* read_Books -> query_Books\r\n\r\n* chapters to manye\r\n\r\n* remove genres from service\r\n\r\n* autoexpose vs autoexposed\r\n\r\n* describe tool can take a list of enum values\r\n\r\n* add return type to per_entity_actions",
          "is_bot": false,
          "headline": "chore: minor fixes (#102)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-11T17:30:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f6c74cb8a4e38e70a90628a379f5efe9e5a3fa7",
          "body": "* fix reporting script\r\n\r\n* changelog and .\r\n\r\n* chore: split GitHub release into tag-triggered workflow",
          "is_bot": false,
          "headline": "chore: split GH release into tag-triggered workflow (#100)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-10T14:05:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f09ed14e1f70d163a6475d61041fa4e810c9ef81",
          "body": "* update workflow file\r\n\r\n* indent\r\n\r\n* update reporting\r\n\r\n* .\r\n\r\n* pretest script, remove matrix\r\n\r\n* update pretest and set to staging",
          "is_bot": false,
          "headline": "chore: release config (#99)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-10T13:31:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5032115800a6be4f76f94c8dd7f6d580fb0346",
          "body": ";)",
          "is_bot": false,
          "headline": "chore: cleanup (#98)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-10T12:47:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad07acfd639d7a0e7c92ddf2116729465d9b391c",
          "body": ".",
          "is_bot": false,
          "headline": "chore: xmake config duplication (#97)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-10T11:25:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bb2bc2c59ea11da263941fc1a7b3bb064ab72c2",
          "body": "add optoin to return responses as json",
          "is_bot": false,
          "headline": "feat: add feature flag to return responses as json (#96)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-10T11:21:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b21dd8390913150d81c277acabc3af090231eee",
          "body": "update release actionqq",
          "is_bot": false,
          "headline": "chore: update release action (#95)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-09T20:51:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ead5b3e3b207126c6541fdfe44969fe096acc67",
          "body": "* remove test script\r\n\r\n* update xmake\r\n\r\n* revert\r\n\r\n* .",
          "is_bot": false,
          "headline": "chore: xmake (#93)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-09T19:14:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5acf659036382a5fa5eef88b8ca6fde49de10f",
          "body": "* move test card gen\r\n\r\n* move",
          "is_bot": false,
          "headline": "chore: move test card gen (#92)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-09T17:29:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b92d3e644ea125764bc2884f3f3e38607759c05",
          "body": "* disable via feature flag\r\n\r\n* not in tests\r\n\r\n* fix test",
          "is_bot": false,
          "headline": "fix: less client configs (#90)",
          "author_name": "Simon Engel",
          "author_login": "SirSimon04",
          "committed_at": "2026-03-05T17:24:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 3,
      "commits_last_year": 208,
      "latest_release_at": "2026-07-21T09:01:09Z",
      "latest_release_tag": "v1.2.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 23,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 8.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@cap-js/mcp",
          "exists": true,
          "license": "SEE LICENSE IN LICENSE",
          "keywords": [
            "cap",
            "mcp",
            "model-context-protocol",
            "ai",
            "agent"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@cap-js/mcp",
          "is_deprecated": false,
          "latest_version": "1.2.0",
          "repository_url": "https://github.com/cap-js/mcp",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 3,
          "monthly_downloads": 4711,
          "first_published_at": "2026-07-03T08:33:15.493000Z",
          "latest_published_at": "2026-07-21T09:01:14.119000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 16,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": null,
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 67478,
      "source_files_sampled": 39,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 96,
        "malicious_count": 0,
        "assessed_package": "npm:@cap-js/mcp@1.2.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "@toon-format/toon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": ">=2.3"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@modelcontextprotocol/sdk",
            "direct": true,
            "version": "^1.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@toon-format/toon",
            "direct": true,
            "version": ">=2.3",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "^4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "@cap-js/cds-test",
            "direct": false,
            "version": "^1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@cap-js/hana",
            "direct": false,
            "version": ">=2",
            "ecosystem": "npm"
          },
          {
            "name": "@cap-js/sqlite",
            "direct": false,
            "version": ">=2",
            "ecosystem": "npm"
          },
          {
            "name": "@colors/colors",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ioredis/commands",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/approuter",
            "direct": false,
            "version": "20.8.8",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/audit-logging",
            "direct": false,
            "version": "6.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/cds",
            "direct": false,
            "version": ">=9",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/cds-mtxs",
            "direct": false,
            "version": ">=3",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/e2e-trace",
            "direct": false,
            "version": "5.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/hana-client",
            "direct": false,
            "version": "^2.29.23",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/logging",
            "direct": false,
            "version": "8.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/xsenv",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/xssec",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sap/xssec",
            "direct": false,
            "version": "^4",
            "ecosystem": "npm"
          },
          {
            "name": "@tootallnate/once",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/triple-beam",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "agentkeepalive",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.17.1",
            "ecosystem": "npm"
          },
          {
            "name": "assert-plus",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": false,
            "version": "1.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "axios-cookiejar-support",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "axios-retry",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "base64-url",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "basic-auth",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "better-sqlite3",
            "direct": false,
            "version": ">=12",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "1.20.4",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-equal-constant-time",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "cf-nodejs-logging-support",
            "direct": false,
            "version": "7.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "clone",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "cluster-key-slot",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "compressible",
            "direct": false,
            "version": "2.0.18",
            "ecosystem": "npm"
          },
          {
            "name": "compression",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "connect",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-parser",
            "direct": false,
            "version": "1.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decode-uri-component",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "denque",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "destroy",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ecdsa-sig-formatter",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "ee-first",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "etag",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "express-session",
            "direct": false,
            "version": "1.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "extsprintf",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fecha",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "fetch-retry",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "filter-obj",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.15.11",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "fresh",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-cookie-agent",
            "direct": false,
            "version": "6.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-headers",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "humanize-ms",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.4.24",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ioredis",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-retry-allowed",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-stringify-safe",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonwebtoken",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "jwa",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jws",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jwt-decode",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jwt-decode",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.defaults",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.includes",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isarguments",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isboolean",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isinteger",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isnumber",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isstring",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.once",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "logform",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "moment",
            "direct": false,
            "version": "2.30.1",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mustache",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "next-line",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-cache",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-forge",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "on-headers",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "parseurl",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "passport",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "passport-strategy",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pause",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pseudomap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "psl",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "query-string",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "querystringify",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "random-bytes",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "range-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "redis-errors",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "redis-parser",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "request-stats",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "request-stats",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "requires-port",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ret",
            "direct": false,
            "version": "0.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-stable-stringify",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "1.16.3",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "split-on-first",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "standard-as-callback",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "strict-uri-encode",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tough-cookie",
            "direct": false,
            "version": "4.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "triple-beam",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "tv4",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-is",
            "direct": false,
            "version": "1.6.18",
            "ecosystem": "npm"
          },
          {
            "name": "uid-safe",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "unpipe",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "urijs",
            "direct": false,
            "version": "1.19.11",
            "ecosystem": "npm"
          },
          {
            "name": "url-parse",
            "direct": false,
            "version": "1.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "utils-merge",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "8.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "validator",
            "direct": false,
            "version": "13.15.26",
            "ecosystem": "npm"
          },
          {
            "name": "vary",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "verror",
            "direct": false,
            "version": "1.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "winston-transport",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": false,
            "version": "7.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "wtfnode",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 208,
        "direct_count": 3,
        "indirect_count": 205
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 3,
        "merged_prs": 17,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 11
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "SirSimon04",
          "commits": 95,
          "avatar_url": "https://avatars.githubusercontent.com/u/74311832?v=4"
        },
        {
          "type": "User",
          "login": "stefanrudi",
          "commits": 71,
          "avatar_url": "https://avatars.githubusercontent.com/u/54106627?v=4"
        },
        {
          "type": "User",
          "login": "danjoa",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/17622519?v=4"
        },
        {
          "type": "User",
          "login": "schiwekM",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/91881328?v=4"
        },
        {
          "type": "User",
          "login": "johannes-vogel",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/31311694?v=4"
        },
        {
          "type": "User",
          "login": "maxieckert-sap",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/68098387?v=4"
        },
        {
          "type": "User",
          "login": "henrybrink",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/20884220?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.537
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "check-changelog.yml",
        "issue.yml",
        "lint-prettier.yml",
        "prevent-issue-labeling.yml",
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 5,
            "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": 10,
            "reason": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
            "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": 9,
            "reason": "Found 15/16 approved changesets -- score normalized to 9",
            "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": 0,
            "reason": "dangerous workflow patterns detected",
            "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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 3,
            "reason": "SAST tool is not run on all commits -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file 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": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "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": "abe1483d3c0871ebc105b5452471d4021f4e7e26",
        "ran_at": "2026-07-29T10:35:12Z",
        "aggregate_score": 5.7,
        "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-29T00:24:04Z",
      "oldest_open_prs": [
        {
          "number": 25,
          "created_at": "2026-07-09T11:15:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 28,
          "created_at": "2026-07-22T00:24:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 30,
          "created_at": "2026-07-23T12:54:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-27T11:17:13Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/cap-js/mcp",
    "host": "github.com",
    "name": "mcp",
    "owner": "cap-js"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": "The weighted overall 67 is calibrated to 78 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 67,
            "calibrated": 78,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 78,
      "inputs": {
        "security": 66,
        "vitality": 82,
        "community": 56,
        "governance": 62,
        "calibration": "2026-08-02",
        "engineering": 74,
        "ai_readiness": 44,
        "weighted_overall_raw": 67
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 82,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 208,
              "human_commit_share": 0.82,
              "days_since_last_push": 0,
              "active_weeks_last_year": 23
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "23/52 weeks with commits",
                "points": 15.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 23
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "208 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 208
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "exceptional",
            "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": 100,
            "inputs": {
              "releases_count": 3,
              "latest_release_tag": "v1.2.0",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 8.9
            },
            "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 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~8.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 8.9
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 56,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "forks": 3,
              "stars": 16,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "16 stars",
                "points": 19.1,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "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": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": null,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [],
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "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": 13.5,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 61,
            "inputs": {
              "packages": [
                "@cap-js/mcp"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4711
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,711 downloads/month across npm",
                "points": 49,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4711,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "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": 62,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 7,
              "top_contributor_share": 0.537
            },
            "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 54% of commits",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 54
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "Excluded from scoring (no data or not applicable): Issue resolution, Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 70,
            "inputs": {
              "merged_prs": 17,
              "open_issues": 0,
              "closed_issues": 0,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 11,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "17/28 decided PRs merged",
                "points": 18.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 17,
                      "decided": 28
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 15/16 approved changesets -- score normalized to 9",
                "points": 13.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "followers": 306,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "cap-js",
              "public_repos": 29,
              "account_age_days": 1364
            },
            "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": "306 followers of cap-js",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 306,
                      "login": "cap-js"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "29 public repos, account ~3 yr old",
                "points": 18.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 29
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "@cap-js/mcp"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 74,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "topics": [
                "ai",
                "cap",
                "plugin"
              ],
              "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": "3 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "good",
        "name": "Security",
        "value": 66,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.7
            },
            "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": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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 15/16 approved changesets -- score normalized to 9",
                "points": 6.8,
                "status": "partial",
                "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": "dangerous workflow patterns detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "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": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "exceptional",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@cap-js/mcp@1.2.0 runtime dependency closure — what installing the published package pulls in — 96 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@cap-js/mcp@1.2.0",
                  "assessed": 96
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 96,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 96,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "exceptional",
            "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"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 4
            },
            "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": "weak",
        "name": "AI Readiness",
        "value": 44,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "weak",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.988,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "81 of 82 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 81,
                      "sampled": 82
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.02
            },
            "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": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "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": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "2 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 67478,
              "source_files_sampled": 39,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/39 source files over 60KB",
                "points": 53.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 39,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "labels": [
        "mcp-server",
        "library",
        "plugin"
      ],
      "scores": {
        "plugin": 4,
        "library": 6,
        "mcp-server": 7
      },
      "primary": "mcp-server",
      "evidence": [
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:npm",
          "weight": 6
        },
        {
          "tier": "dependencies",
          "label": "mcp-server",
          "source": "dep:@modelcontextprotocol/sdk",
          "weight": 4
        },
        {
          "tier": "structure",
          "label": "mcp-server",
          "source": "mcp_signal",
          "weight": 3
        },
        {
          "tier": "description",
          "label": "plugin",
          "source": "description:plugin",
          "weight": 2
        },
        {
          "tier": "tags",
          "label": "plugin",
          "source": "tag:plugin",
          "weight": 2
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": true,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.3.1"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-29T10:35:40.483158Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/cap-js/mcp.svg",
  "full_name": "cap-js/mcp",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v2.3.1, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.