How Do I...
Quick answers to common tasks. Each answer includes a code snippet and a link to the full guide.
Verify a receipt?
Three ways to verify:
CLI:
Terminal
npx peac verify eyJhbGciOiJFZERTQSIs... --issuer https://api.example.com
MCP Server (via AI agent):
MCP tool call
{ "tool": "peac_verify", "arguments": { "receipt": "eyJ...", "issuer_url": "https://api.example.com" } }
Programmatic:
verify.ts
import { verifyLocal } from '@peac/protocol';
const result = await verifyLocal(receipt, publicKey, { issuer: 'https://api.example.com' });
See: Verification | CLI Reference | MCP Server
Issue a receipt?
issue.ts
import { issue } from '@peac/protocol';
const receipt = await issue({
privateKey: process.env.PEAC_PRIVATE_KEY,
kid: 'peac-2026-03',
claims: {
iss: 'https://api.example.com',
sub: 'user:agent-123',
amt: '10.00',
cur: 'USD',
rail: 'x402',
},
});
Or use Express middleware for automatic issuance:
express.ts
import { peacMiddleware } from '@peac/middleware-express';
app.use(peacMiddleware({ privateKey, kid, issuer }));
See: Quickstart | Express Middleware
Add receipts to my MCP server?
Use @peac/mappings-mcp to attach evidence to MCP tool responses via _meta fields:
mcp-attach.ts
import { attachMcpCarrier } from '@peac/mappings-mcp';
const toolResponse = attachMcpCarrier(originalResponse, {
receipt_ref: 'sha256:abc123...',
receipt_jws: 'eyJhbGciOiJFZERTQSIs...',
});
See: Agent Protocols | MCP Server
Carry evidence through A2A?
Use @peac/mappings-a2a to attach and extract evidence from A2A metadata:
a2a-attach.ts
import { attachA2aCarrier, extractA2aCarrier } from '@peac/mappings-a2a';
const artifact = attachA2aCarrier(originalArtifact, {
receipt_ref: 'sha256:abc123...',
receipt_jws: 'eyJhbGciOiJFZERTQSIs...',
});
const carrier = extractA2aCarrier(incomingMessage);
See: A2A Integration | Evidence Carrier
Record payment evidence?
Use the appropriate rail adapter:
payment.ts
import { extractX402Evidence } from '@peac/adapter-x402';
const evidence = extractX402Evidence({ paymentHeader, amount: '0.001', currency: 'USDC', network: 'base' });
import { fromStripePaymentIntent } from '@peac/rails-stripe';
const evidence2 = fromStripePaymentIntent(paymentIntent);
See: Payment Rails | x402 Integration
Observe content signals?
signals.ts
import { parseRobotsTxt, parseTdmRep, resolveSignals } from '@peac/mappings-content-signals';
const robots = parseRobotsTxt(robotsTxtContent, 'PEACBot');
const tdmrep = parseTdmRep(tdmrepJsonContent);
const observation = resolveSignals({ robotsTxt: robots, tdmRep: tdmrep });
// { train: 'deny', search: 'allow', inference: 'unspecified', ... }
See: Content Signals
Test conformance?
Terminal
# Run basic conformance
npx peac conformance run --level basic
# Run full conformance suite
npx peac conformance run --level full --issuer https://api.example.com
See: Conformance Levels | CLI Reference
Create an evidence bundle?
CLI:
Terminal
npx peac bundle create --receipts r1.jws r2.jws --issuer https://api.example.com --output evidence.peac.tar.gz
MCP Server:
MCP tool call
{ "tool": "peac_create_bundle", "arguments": { "receipts": ["<jws1>", "<jws2>"], "issuer_url": "https://api.example.com" } }
See: Evidence Bundles | CLI Reference
Record inference evidence?
inference.ts
import { fromChatCompletion } from '@peac/adapter-openai-compatible';
const evidence = fromChatCompletion(response, { messages });
// SHA-256 digests only -- no raw text stored
See: Inference Receipts