Skip to main content
Glama
tranzen21

storekit-verify-mcp

by tranzen21

storekit-verify-mcp

Decode and cryptographically verify Apple App Store Server Notifications V2 — as an MCP server and a CLI.

Apple delivers subscription webhooks (SUBSCRIBED, DID_RENEW, EXPIRED, REFUND, …) as signed JWS payloads. Verifying them properly means checking the ES256 signature, walking a 3-certificate chain to a pinned Apple root, checking Apple's policy OIDs, and doing it again for the nested transaction and renewal payloads. Most servers either skip verification entirely or trust a decode. This tool does it right, and explains what each notification means while it's at it.

I built this logic for Talli, my live App Store app, where server-side webhook verification drives subscription entitlements. This is that experience packaged as a standalone tool.

What it checks

  • ✅ ES256 signature of the outer signedPayload and the nested signedTransactionInfo / signedRenewalInfo

  • ✅ Full x5c chain: leaf → intermediate → root, each link's signature verified

  • ✅ Root pinned to Apple Root CA – G3 (bundled, SHA-256 fingerprint documented in source)

  • ✅ Apple's policy OIDs on the leaf (receipt signing) and intermediate (WWDR)

  • ✅ Certificate validity windows at the payload's signedDate

  • ✅ Optional bundleId and environment (Sandbox/Production) assertions

Related MCP server: MCP Security Tools Suite

MCP server

Add to Claude Code:

claude mcp add storekit-verify -- npx -y github:tranzen21/storekit-verify-mcp

Or any MCP client:

{
  "mcpServers": {
    "storekit-verify": {
      "command": "npx",
      "args": ["-y", "github:tranzen21/storekit-verify-mcp"]
    }
  }
}

Tools

Tool

What it does

verify_notification

Full cryptographic verification → {valid, errors[], decoded}

decode_notification

Decode without verification (inspect payloads fast)

decode_transaction

Decode a single signed transaction/renewal JWS

explain_notification_type

What a notificationType/subtype means and how to handle it

Ask your agent things like "verify this webhook body and tell me if I should revoke entitlement" — it can decode, verify, and explain in one pass.

CLI

# Verify a webhook body (file or stdin). Exit code 0 = valid.
npx github:tranzen21/storekit-verify-mcp storekit-verify verify webhook.json \
  --bundle-id com.example.app --environment Production

# Decode without verification
storekit-verify decode webhook.json

# What does DID_FAIL_TO_RENEW / GRACE_PERIOD mean?
storekit-verify explain DID_FAIL_TO_RENEW GRACE_PERIOD

Library

import { verifyNotification } from "storekit-verify-mcp";

const result = await verifyNotification(requestBody, {
  expectedBundleId: "com.example.app",
  expectedEnvironment: "Production",
});
if (!result.valid) throw new Error(result.errors.join("; "));
// result.decoded.payload.notificationType, result.decoded.transactionInfo, ...

Development

npm install
npm run fixtures   # generates a test CA chain (openssl) + signed sample payloads
npm test           # builds + runs node:test suite

The test suite covers: valid chain verification, root-pin rejection, mismatched-key signatures, tampered payloads, bundle/environment mismatches, expired certificates, and malformed input.

Notes

  • Requires Node 20+.

  • No network calls at runtime: the Apple root is bundled; verification is fully offline.

  • Not affiliated with or endorsed by Apple. For the official server library, see apple/app-store-server-library-node — this project exists to make the same verification available to MCP agents and as a zero-setup CLI.

License

MIT © Marcquin Taylor

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables sending rich notifications to Discord and/or Slack webhooks with automatic service detection, retry logic, and support for embeds, blocks, and attachments. Provides secure webhook management with comprehensive input validation and rate limiting.
    3
    TypeScript
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables ethical security testing and attack surface management through SSL certificate validation, CVE queries, subdomain enumeration, security header analysis, and comprehensive reconnaissance capabilities. Designed for authorized penetration testing workflows with responsible disclosure practices.
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for offline verification of signed artifacts — receipts, manifests, and audit bundles. MIT licensed, works without accounts or API calls. Tools: self_test, verify_receipt, verify_bundle, explain_artifact.
    4
    105
    5
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Cryptographic verification for AI agent actions — ECDSA-secp256k1 signed Action Receipts anchored on Base, multi-dimensional trust vectors, capability tokens, and offline-verifiable on-chain proof. 29 tools.
    3
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Post-quantum, tamper-evident receipts for agent actions. Ed25519 + ML-DSA-65, offline verify.

  • Verify PyPI and npm packages, symbols, and version diffs against real artifacts. Free, no account.

  • Decode EVM bytes to JSON: event-log decoder, calldata explainer, selector lookup, ABI fetch.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tranzen21/storekit-verify-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server