Skip to main content
Glama
proof-of-commitment

proof-of-commitment

by piiiico

Proof of Commitment

Звезды врут. Поведенческие сигналы — нет.

MCP-сервер и веб-инструмент, который оценивает пакеты npm, PyPI и репозитории GitHub на основе поведенческой приверженности — сигналов, которые сложнее подделать, чем звезды, README или количество скачиваний.

Проблема цепочки поставок

Три пакета в типичном проекте Node.js сейчас находятся в КРИТИЧЕСКОМ состоянии:

  • chalk — 399 млн скачиваний/неделю, 1 мейнтейнер

  • zod — 139 млн скачиваний/неделю, 1 мейнтейнер

  • axios — 96 млн скачиваний/неделю, 1 мейнтейнер (атакован 1 апреля 2026 г.)

Звезды и качество README не показывают этого. Поведенческие сигналы — показывают.

Related MCP server: pkgtruth

Попробуйте прямо сейчас

Терминал (без установки):

npx proof-of-commitment axios zod chalk
# or scan your own project:
npx proof-of-commitment --file package.json
# PyPI too:
npx proof-of-commitment --pypi litellm langchain requests

Веб-демо (без установки): getcommit.dev/audit — вставьте свои пакеты и получите оценку риска за секунды.

MCP-сервер (без установки):

{
  "mcpServers": {
    "proof-of-commitment": {
      "type": "streamable-http",
      "url": "https://poc-backend.amdal-dev.workers.dev/mcp"
    }
  }
}

Добавьте в Claude Desktop, Cursor, Windsurf или любой другой AI-инструмент с поддержкой MCP. Затем спросите:

"Проверь мой package.json на риски цепочки поставок" "Оцени axios, zod, chalk, lodash — какой из них наиболее рискованный?" "Активно ли поддерживается vercel/ai?"

GitHub Action

Добавьте аудит цепочки поставок в любой CI-конвейер — он автоматически обнаруживает пакеты из package.json или requirements.txt, публикует результаты в виде комментария к PR, записывает их в сводку GitHub Step Summary и при необходимости прерывает выполнение при обнаружении КРИТИЧЕСКИХ пакетов.

# .github/workflows/supply-chain-audit.yml
name: Supply Chain Audit
on: [push, pull_request]

jobs:
  audit:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write   # needed for PR comments
    steps:
      - uses: actions/checkout@v4
      - uses: piiiico/proof-of-commitment@main
        with:
          fail-on-critical: false   # set true to block merges
          comment-on-pr: true       # posts audit table directly on the PR

Когда comment-on-pr: true (по умолчанию), действие автоматически публикует таблицу аудита в виде комментария к pull request — и обновляет тот же комментарий при повторном запуске, чтобы не спамить. Ревьюеры видят таблицу рисков, не покидая PR.

Входные данные:

Входной параметр

По умолчанию

Описание

packages

(авто)

Имена пакетов через запятую (автоматически определяются из package.json/requirements.txt, если не заданы)

fail-on-critical

true

Прервать рабочий процесс, если найдены КРИТИЧЕСКИЕ пакеты

max-packages

20

Максимальное количество пакетов для аудита при автоопределении

comment-on-pr

true

Опубликовать результаты аудита в виде комментария к PR (требуется разрешение pull-requests: write)

Выходные данные: has-critical, critical-count, audit-summary (таблица в формате markdown, также записывается в Step Summary).

Пример комментария к PR / вывода Step Summary:

| Package | Risk        | Score | Maintainers | Downloads/wk | Age   |
|---------|-------------|-------|-------------|--------------|-------|
| chalk   | 🔴 CRITICAL | 75    | 1           | 380M         | 12.7y |
| zod     | 🔴 CRITICAL | 83    | 1           | 133M         | 6.1y  |
| axios   | 🔴 CRITICAL | 89    | 1           | 93M          | 11.6y |

Бейджи README

Добавьте бейдж с оценкой приверженности к любому пакету, который вы поддерживаете или используете:

![commit score](https://poc-backend.amdal-dev.workers.dev/api/badge/npm/YOUR-PACKAGE)

Примеры:

Пакет

URL бейджа

axios

![commit](https://poc-backend.amdal-dev.workers.dev/api/badge/npm/axios)

zod

![commit](https://poc-backend.amdal-dev.workers.dev/api/badge/npm/zod)

litellm

![commit](https://poc-backend.amdal-dev.workers.dev/api/badge/pypi/litellm)

Цвета: 🟢 здоровый (75+) · 🟡 хороший (60–74) · 🟡 умеренный (40–59) · 🟠 высокий риск (<40) · 🔴 КРИТИЧЕСКИЙ (один мейнтейнер + >10 млн скачиваний/неделю)

Бейджи кэшируются на 5 минут на edge-серверах Cloudflare. API-ключ не требуется.

REST API

Без API-ключа. Без установки.

curl https://poc-backend.amdal-dev.workers.dev/api/audit \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"packages": ["axios", "zod", "chalk", "lodash", "express"]}'
{
  "count": 5,
  "results": [
    {
      "name": "chalk",
      "ecosystem": "npm",
      "score": 75,
      "maintainers": 1,
      "weeklyDownloads": 398397580,
      "ageYears": 12.7,
      "trend": "stable",
      "riskFlags": ["CRITICAL"]
    },
    ...
  ]
}

7 инструментов MCP

Инструмент

Описание

audit_dependencies

Пакетный аудит рисков для 20 пакетов npm/PyPI

lookup_npm_package

Поведенческий профиль одного пакета npm

lookup_pypi_package

Поведенческий профиль одного пакета PyPI

lookup_github_repo

Оценка приверженности репозитория GitHub (долговечность, частота коммитов, глубина участия контрибьюторов)

lookup_business

Норвежский бизнес-регистр — годы работы, сотрудники, финансовые показатели

lookup_business_by_org

То же самое, по номеру организации

query_commitment

Поведенческие данные расширения браузера (уникальные проверенные посетители, частота повторных посещений)

Что измеряет оценка

Каждый пакет оценивается по шкале 0–100 по следующим критериям:

  • Долговечность — Как долго существует пакет? Заброшенные пакеты часто реактивируются для атак.

  • Глубина поддержки — Один мейнтейнер + миллионы еженедельных скачиваний = поверхность атаки, которую использовал LiteLLM.

  • Стабильность релизов — Регулярные релизы сигнализируют об активном контроле. Длительные перерывы = накопление уязвимостей.

  • Тенденция скачиваний — Растущие пакеты привлекают больше внимания (и атак). Стабильные = менее заметны.

Флаги риска:

  • CRITICAL — один мейнтейнер + >10 млн еженедельных скачиваний (точный профиль атаки LiteLLM/axios)

  • HIGH — пакету <1 года + быстрое внедрение

  • WARN — не было релизов в течение 12+ месяцев

Реальные точки данных

chalk     — score 75, 1 maintainer, 399M/week  ⚑ CRITICAL
zod       — score 83, 1 maintainer, 139M/week  ⚑ CRITICAL
axios     — score 89, 1 maintainer,  96M/week  ⚑ CRITICAL (attacked Apr 1 2026)
lodash    — score 88, 3 maintainers, 68M/week
express   — score 91, 5 maintainers, 35M/week
litellm   — score 74, 1 maintainer           ⚑ CRITICAL (supply chain attack Mar 2026)

Почему поведенческие сигналы

Атака на LiteLLM (март 2026 г.) и атака на axios (апрель 2026 г.) следовали одному и тому же шаблону: кража учетных данных → публикация вредоносного пакета → заражение 97 млн+ машин. Оба пакета получили оценку КРИТИЧЕСКИЙ по этим метрикам до атак.

Декларативные сигналы (звезды, качество README, CI-бейджи) не фиксируют этот риск. Поведенческая приверженность — фиксирует.

Включено в официальный реестр MCP

registry.modelcontextprotocol.io → io.github.piiiico/proof-of-commitment

Стек

Уровень

Технология

Бэкенд

Cloudflare Workers + D1

MCP

Model Context Protocol SDK

Данные

npm registry, PyPI, GitHub API, Brønnøysund (NO)

Лендинг

Astro + Cloudflare Pages

Более широкое видение

Аудит цепочки поставок — это первый инструмент. Фундаментальный примитив — это граф приверженности — поведенческие сигналы, которые заменяют доверие на основе контента в любой области.

Когда контент легко подделать (отзывы, звезды, README), приверженность становится сигналом. Мейнтейнер, выпустивший 847 релизов за 12 лет, демонстрирует иной уровень приверженности, чем тот, кто опубликовал что-то один раз в 2023 году.

Та же логика применима к веб-сайтам, компаниям и ИИ-агентам. Две карточные сети независимо друг от друга назвали этот пробел: Mastercard Verifiable Intent §9.2 прямо указывает, что поведенческое доверие «не охвачено». Visa TAP идентифицирует агентов, не отвечая на вопрос, стоит ли им доверять.

Proof of Commitment — это уровень доверия, на который они указывают.

→ getcommit.dev

Запуск локально

bun install
bun run dev:backend     # local server with SQLite
bun run test:e2e        # E2E test with mock World ID

Развертывание:

bun run deploy          # deploys to Cloudflare Workers

Available Tools

8 tools
audit_dependenciesAInspect

Batch-score multiple npm or PyPI packages for supply chain risk. Takes a list of package names and returns a risk table sorted by commitment score (lowest = highest risk first).

Risk flags:

  • CRITICAL: single npm publisher + >10M weekly downloads (publish-access concentration risk)

  • HIGH: new package (<1yr) + high downloads (unproven, rapid adoption = supply chain risk)

  • WARN: no release in 12+ months (potential abandonware)

  • WARN: dormant publishers with current scope access — contributors who stopped publishing but retain npm tokens (the Mastra incident vector, June 2026)

Perfect for auditing a full package.json or requirements.txt — paste your dependency list and get a prioritized risk report.

Examples: score all deps in a project, compare two similar packages, identify abandonware before it becomes a CVE.

Inputs: packages (required), ecosystem.

lookup_businessBInspect

Search for a Norwegian business and get its commitment profile from public data (Brønnøysund Register Centre). Returns real commitment signals that can't be faked:

  • Temporal commitment: how long the business has operated

  • Financial commitment: revenue, profitability, equity health

  • Operational commitment: employee count, active status

  • Overall commitment score (0-100)

Data source: Norwegian government registers (Brreg). No user-contributed data needed — immediate trust verification for any Norwegian business.

Inputs: query (required), maxResults.

lookup_business_by_orgAInspect

Look up a specific Norwegian business by organization number and get its commitment profile from public data (Brønnøysund Register Centre). Returns real commitment signals: longevity, financial health, operational activity, and overall commitment score.

Inputs: orgNumber (required).

lookup_github_repoAInspect

Get a behavioral commitment profile for any public GitHub repository. Returns real signals: how long the project has existed, recent commit frequency, contributor community size, release cadence, and social proof. These are behavioral commitments — harder to fake than README claims.

Useful for: vetting open-source dependencies, evaluating AI tools/frameworks, assessing vendor reliability. Examples: "vercel/next.js", "facebook/react", "https://github.com/piiiico/proof-of-commitment"

Inputs: repo (required).

lookup_go_moduleAInspect

Get a behavioral commitment profile for any Go module on proxy.golang.org. Takes a full module path (e.g., "github.com/gin-gonic/gin", "golang.org/x/net", "k8s.io/client-go", "gopkg.in/yaml.v3") and returns real signals: module age, version count, publish cadence, GitHub contributors (the closest equivalent to "publishers" since Go has no centralized publisher concept — git push access is the publish equivalent), GitHub stars, OpenSSF Scorecard score.

The Go ecosystem has no centralized download counter, so this profile is GitHub-primary — the linked source repository's activity, contributor count, and Scorecard carry more weight than for npm/PyPI/Cargo. Stars are used as the popularity proxy.

Useful for: vetting Go dependencies before adding to go.mod, identifying abandonware, supply chain risk assessment. Examples: "github.com/gin-gonic/gin", "golang.org/x/crypto", "github.com/spf13/cobra", "k8s.io/api"

Inputs: module (required).

lookup_npm_packageAInspect

Get a behavioral commitment profile for any npm package. Returns real signals: package age, download volume and trend (growing/stable/declining), release consistency, npm publisher count, GitHub contributor count, and linked GitHub activity.

Also returns publisherLifecycle — cross-referencing current maintainers against per-version publish history to flag dormant publishers who still hold npm scope access. The Mastra incident (June 2026) exploited exactly this: a contributor dormant since 2024 with never-revoked scope access.

Supply chain attacks target packages with low publisher depth (few people with npm publish access). Behavioral signals reveal what download counts hide.

Useful for: vetting dependencies, identifying abandonware, due diligence on open-source packages. Examples: "langchain", "@anthropic-ai/sdk", "express", "litellm"

Inputs: package (required).

lookup_pypi_packageAInspect

Get a behavioral commitment profile for any PyPI (Python) package. Returns real signals: package age, download volume and trend, release consistency, publisher/owner count, and linked GitHub activity.

Supply chain attacks target Python packages — LiteLLM (97M downloads/mo) was compromised via stolen PyPI token in March 2026. Behavioral signals reveal what star counts hide.

Useful for: vetting Python dependencies, identifying abandonware, supply chain risk due diligence. Examples: "langchain", "litellm", "openai", "anthropic", "requests", "fastapi", "pydantic"

Inputs: package (required).

query_commitmentAInspect

Query verified behavioral commitment data for a domain. Returns aggregated signals: unique verified visitors, repeat visit rate, and average time spent. These prove real human engagement — harder to fake than reviews or content.

Inputs: domain (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 8 tools

    Disambiguation4/5

    The package-ecosystem lookups (npm, PyPI, Go, GitHub) are clearly scoped to distinct registries, and audit_dependencies is obviously batch-oriented. The only real overlap is lookup_business vs lookup_business_by_org, which differ mainly by input (name search vs org number), and query_commitment's domain-based scope is somewhat fuzzy against the package lookups since package profiles also aggregate engagement signals.

    Naming Consistency4/5

    All eight tools use snake_case verb_noun form, with six sharing a lookup_ prefix and the rest using query_/audit_ verbs appropriately. Minor inconsistency in the noun portion of the lookup family (github_repo vs go_module vs pypi_package vs npm_package vs business), but the pattern remains predictable.

    Tool Count5/5

    Eight tools is well inside the sweet spot for a registry/commitment-scoring server. Each tool maps to a distinct data source or aggregation mode, and none feels redundant padding.

    Completeness4/5

    The surface covers Norwegian business data, four code-ecosystem sources, domain engagement, and batch risk auditing — a coherent lifecycle from single lookup to prioritized audit. Gaps remain: audit_dependencies only handles npm/PyPI (not Go/GitHub), and other major ecosystems (Cargo, RubyGems, Maven) have no lookup at all, but agents can work around these.

    Maintenance

    ActivityMaintained
    ResponsivenessMostly unanswered

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Deterministic supply-chain provenance, SBOM/AI-BOM generation, and dependency risk analysis for npm and PyPI packages, with 14 security rules and verifiable reports.
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI coding agents and CI to vet npm dependencies before they reach the lockfile, flagging hallucinated, slopsquatted, or otherwise risky packages with evidence-backed verdicts.
      3
      67 npm
      4
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables safety-ranked discovery of open-source components across npm, PyPI, crates.io, RubyGems, GitHub, and Hugging Face, with license, security, and health checks.
      1,348 npm
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Scores npm packages, PyPI packages and GitHub repositories 0-100 with an A-F grade and plain-language risks. Scans package.json, requirements.txt and lock files; no API key needed.
      3
      62 npm
      1
      Apache 2.0