Loyal Spark Loyalty Protocol
Loyal Spark is an onchain loyalty protocol for merchants and AI agents to manage loyalty programs, tokens, rewards, vouchers, and marketplace trading on Base L2.
Platform & Profile: Get platform info and the authenticated agent's merchant profile and permissions.
Program Management: Deploy custom ERC-20 loyalty tokens, register, activate, update, and list loyalty programs (with cashback rate configuration).
Token Operations: Mint and transfer loyalty tokens to customers, check balances, and retrieve customer tier information.
Rewards & Vouchers: Create rewards, redeem them (generating vouchers with an on-chain transaction hash), mark vouchers as used, and check voucher status publicly (no API key required).
Analytics: Retrieve analytics across all owned loyalty programs.
Marketplace: List, create, accept, and cancel P2P token trading offers with filtering and pagination.
AI Agent Support: Register agents, manage API keys with granular permissions, create Coinbase CDP MPC server wallets, and pay per request via on-chain micropayments (x402, MPP).
CRM: Manage customer profiles with RFM segmentation and tier management.
Enables AI agents to manage Coinbase CDP MPC wallets for autonomous onchain operations, including secure transaction signing and wallet creation on the Base network.
Supports integration with the Farcaster decentralized social network via a protocol manifest, enabling discovery and interaction within Farcaster-compatible clients.
Utilizes Supabase for database management, authentication, and edge functions to power loyalty program operations, analytics, and agent API tools.
Loyal Spark — Onchain Loyalty Protocol
A Web3-powered loyalty platform built on Base Mainnet: merchants and AI agents create onchain loyalty programs (B20 by default), mint points, manage rewards/vouchers, and automate the loop via REST, MCP, and pay-per-call gateways (x402 / MPP).
Overview
Loyal Spark revolutionizes traditional loyalty programs by bringing them onchain. It operates as a dual-mode platform: humans interact via the web UI with flexible authentication (email, phone, social login, or wallet), while AI agents interact via REST API or MCP Server — sharing the same database, smart contracts, and tokens.
Wallet Abstraction: Users and merchants sign in via Privy — email, phone/SMS, Google, or external wallets (MetaMask, WalletConnect, Coinbase Wallet). Privy automatically creates an embedded wallet on Base — no crypto experience needed. Farcaster miniapp and SIWE for crypto-native users are also fully supported. Merchants can send tokens to customers by email or phone number (resolved to wallet address automatically).
┌─────────────────────────────────────────────────┐
│ Loyal Spark Platform │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Web UI │ │ REST API │ │MCP Server│ │
│ │ (humans) │ │ (agents) │ │ (agents) │ │
│ └─────┬─────┘ └─────┬────┘ └─────┬────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ Backend (Edge Functions) │ │
│ │ Auth · RLS · DB · Realtime │ │
│ └─────────────────┬────────────────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ Base L2 │ │ CDP Server │ │
│ │ Contracts│ │ Wallet (MPC) │ │
│ └──────────┘ └──────────────┘ │
└─────────────────────────────────────────────────┘Related MCP server: Free USDC Transfer MCP Server
Features
For Merchants (Web UI)
Deploy Loyalty Tokens: Create custom loyalty tokens on Base (B20 default; legacy ERC-20 via API)
Mint Tokens: Issue loyalty points to customers via wallet addresses or QR scan
Create Rewards: Design voucher rewards with token costs
CRM & Analytics: Customer profiles, RFM segmentation, tier management
Marketing Automation: Automated campaigns, personalized offers
Referral Programs: Generate referral codes with bonuses
Voucher Management: Track redemptions with QR code verification
AI Agent Management: Register agents, manage API keys, monitor activity
Team & branches: Invite cashiers/managers by wallet or one-time invite code (redeem on Merchant → Team); requires Postgres RPC
accept_merchant_invite— see docs/development/PORTALS_AND_TEAM.md
For Customers (Web UI)
Multi-Token Dashboard: View all loyalty tokens from different merchants
Browse Rewards: Explore available vouchers across all programs
Redeem Vouchers: Burn tokens to claim exclusive rewards with QR codes
Tier System: Bronze → Silver → Gold → Platinum with increasing perks
Frozen modules (not product promises):
marketplace/(DEX) androundup/(DeFi) remain in the tree but are explicitly frozen — no active development
For AI Agents (REST API + MCP)
Full CRUD via API: Create programs, mint tokens, manage rewards, view analytics
MCP Server: Connect Claude, GPT, Cursor, or any MCP-compatible LLM directly
Server Wallets: Coinbase CDP MPC wallets for autonomous onchain operations
Scoped Permissions: Granular access control (read, mint, manage_rewards, trade)
Activity Logging: Full audit trail of all agent operations
Tiered Pricing (agents): Free (200 calls/mo, 1 agent, 1,000 tokens minted/mo, 1.25% mint fee) → Pro ($49/mo, 0.5%) → Enterprise ($129/mo, 0.25%) — subscriptions in USDC, mint fee in loyalty tokens; see docs/business/MONETIZATION_AND_PRICING.md
Skills Documentation: 16 structured step-by-step guides (
00–15under/.well-known/skills/) for agent onboarding, B20 semantics, and payment rails
Technology Stack
Layer | Technology |
Frontend | React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui (Radix) |
Animations | Framer Motion |
Blockchain | Wagmi v2, Viem, RainbowKit, Privy ( |
Network | Base Mainnet (Chain ID: 8453) |
Smart Contracts | Base-native B20 Asset precompile + legacy ERC-20 factory |
Backend | Supabase (PostgreSQL, RLS, Deno Edge Functions, Realtime) |
Native apps | Capacitor 8 (iOS / Android) — see |
Agent Wallets | Coinbase CDP MPC (Server Wallets) |
State | TanStack Query v5 |
Routing | React Router DOM v6 |
Forms | React Hook Form + Zod validation |
Builder Attribution | Base Builder Code (ERC-8021) |
Smart Contract Architecture
New loyalty programs (default) deploy via Base’s native B20 factory precompile — one transaction, active immediately after register-program. Legacy programs use the Loyal Spark ERC-20 factory below (token_standard: "erc20" in API only). Full flows: docs/development/LOYALTY_PROGRAM_CONTRACTS.md.
Role | Address | When |
B20 Factory (Base precompile) |
| Default — |
LoyaltyTokenFactory (legacy) |
| Opt-in |
LoyalSparkERC20 (implementation) |
| Logic for legacy proxy tokens |
LoyaltyTokenEscrow (P2P) |
| Marketplace swaps |
Network: Base Mainnet (Chain ID: 8453)
Program creation (summary)
Path | Deploy | Activate | Portal |
B20 (default) | 1× | Not required | Yes |
Legacy ERC-20 | 1× |
| API only |
Token operations (both standards)
B20 tokens are ERC-20–compatible for balances, transfers, mint, and escrow:
mint(address to, uint256 amount)— issue points (role-gated)transfer/transferFrom— move tokens between walletsbalanceOf(address)— query balance
AI Agent Integration
Quick Start
Merchant dashboard:
Go to loyalspark.online/merchant and sign in (email, phone, Google, or wallet via Privy)
Open AI Agents tab → Register an agent → Copy your API key (
lsk_...)Use the key in
x-api-keyheader for REST or MCP calls
Without the web app (autonomous agents): free lsk_ via wallet signature — Edge Function agent-register-siwe + nonce from siwe-nonce. See docs/agents/AUTONOMOUS_AGENT_REGISTRATION.md and docs/agents/QUICKSTART.md.
Optional repo scripts (development / agent onboarding)
These directories are not imported by the web app; they are optional helpers for developers and agents reproducing flows locally. Secrets stay in environment variables only.
Folder | Purpose |
Smoke test: paid MCP via x402 (USDC on Base, | |
Same stack, paid agent-api routes ( | |
Example Python → Node subprocess hook for bots that already send loyalty txs on Base. | |
Helper: build SIWE message + sign + call |
Schemas for paid MCP: merchant mcp-tools/<name> — mcp-bazaar-tools.ts; recipient recipient-mcp-tools/<name> — recipient-mcp-bazaar-tools.ts. HTTP 402 accepts + Coinbase x402 Bazaar discovery metadata for all paid routes are built in x402-bazaar-accept.ts. These scripts are not linked from the marketing homepage; primary onboarding remains /for-agents and the merchant portal.
REST API
# List loyalty programs
curl -H "x-api-key: lsk_YOUR_KEY" \
https://api.loyalspark.online/agent-api/programs
# Mint tokens — returns a fee-first calls[] bundle (1.25% fee on Free plan,
# minted in your own loyalty tokens); settle it via POST /agent-api/mint/confirm
curl -X POST \
-H "x-api-key: lsk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"token_address":"0x...","recipient_address":"0x...","amount":100}' \
https://api.loyalspark.online/agent-api/mintAPI Endpoints (28 authenticated + 1 public)
All routes below require x-api-key: lsk_... except GET /vouchers/status (public). Canonical catalogue: public/.well-known/agent.json (must match supabase/functions/agent-api/index.ts).
Method | Path | Scope | Description |
GET |
| authenticated | Agent profile & permissions |
GET |
| read | Autonomous planner: lifecycle step + |
GET |
| read | List loyalty programs |
POST |
| read, mint, or | Propose program name, symbol, economics, and starter rewards from business context |
POST |
| mint or | Calldata to deploy loyalty token (B20 default, or legacy ERC-20 with |
POST |
| mint or | Register deployed token (optional |
POST |
| mint or | Update |
POST |
| mint or | Legacy ERC-20 activation only (no-op for B20) |
POST |
| mint or | Update program status |
GET |
| read | List rewards |
POST |
| manage_rewards | Create reward |
POST |
| mint | Fee-first mint |
POST |
| mint | Settle protocol fee after mint/earn (obligation_id + fee_tx_hash) |
POST |
| mint | Cashback: mint from purchase amount × rate (same fee-first + confirm) |
POST |
| mint | Transfer tokens |
GET |
| read | Token balance & tier |
GET |
| read | Customer list |
GET |
| read | List vouchers |
GET |
| public | Check voucher status (no API key) |
POST |
| read | Redeem reward → create voucher |
POST |
| manage_rewards | Mark voucher as used |
GET |
| read | Program analytics |
GET |
| read | Marketplace offers |
POST |
| trade | Create P2P offer |
POST |
| trade | Accept P2P offer |
POST |
| trade | Cancel P2P offer |
GET |
| authenticated | Extract token_address from deploy tx |
GET |
| read | Read merchant profile |
POST |
| manage_rewards | Create or update merchant profile ( |
MCP Server (for LLMs)
Connect Claude, GPT, or any MCP-compatible agent:
{
"mcpServers": {
"loyal-spark": {
"url": "https://api.loyalspark.online/loyalty-mcp",
"headers": {
"x-api-key": "lsk_YOUR_KEY"
}
}
}
}MCP tools (39) — defined in supabase/functions/loyalty-mcp/index.ts:get_platform_info, get_my_profile, generate_program_defaults, get_program_workflow_status, list_loyalty_programs, create_loyalty_program, register_loyalty_program, activate_loyalty_program, update_program_status, update_program_config, list_rewards, create_reward, mint_loyalty_tokens, transfer_loyalty_tokens, earn_points, confirm_mint_fee, get_token_balance, get_program_analytics, list_marketplace_offers, redeem_reward, use_voucher, check_voucher_status, get_platform_stats, cancel_stale_offers, create_personalized_offer, update_reward_status, export_customers, send_report, list_my_reports, update_report_status, delete_report, create_gift_certificate, list_gift_certificates, revoke_gift_certificate, mark_gift_certificate_minted, bazaar_discover_resources, bazaar_discover_mcp_servers, bazaar_probe_x402, bazaar_pay_and_call (confirm_mint_fee = lsk_-only fee settlement, not x402-priced; last four = Bazaar side-car).
Base MCP custom plugin (send_calls-ready calldata)
For AI users already connected to Base MCP (mcp.base.org), Loyal Spark ships GET-friendly calldata endpoints at https://api.loyalspark.online/agent-prepare/*. Each response returns a send_calls-compatible transaction batch with Builder Code bc_wdmnog7m already appended (ERC-8021). Base Account signs and broadcasts.
Actions: create-program, activate-program, mint, transfer (merchant, lsk_) · recipient-transfer, recipient-approve (holder, rwk_).
# Prepare a mint (returns { transactions: [{to,data,value}], … } for send_calls)
curl -H "x-api-key: lsk_YOUR_KEY" \
"https://api.loyalspark.online/agent-prepare/mint?token=0xTOKEN&to=0xCUSTOMER&amount=100"Plugin spec: skills/loyal-spark/plugins/loyal-spark.md.
Recipient agents (wallet holders, rwk_)
For AI agents that only hold a wallet which receives loyalty tokens (not merchant operators). Humans are unchanged; this is an optional machine path.
Piece | URL / path |
REST |
|
MCP |
|
Register key |
|
REST (14 routes; all require x-api-key: rwk_… except register): GET /me, GET /balances, GET /balance?token_address=, GET /rewards?token_address=, GET /vouchers, GET /workflow/reward-status, POST /register (SIWE), POST /redeem-reward with { reward_id, transaction_hash } (customer is always the bound wallet), POST /prepare-transfer with { token_address, to, amount }, POST /workflow/prepare-reward-redemption. P2P: GET /offers?token_address=, POST /offers, POST /accept-offer, POST /cancel-offer (same bodies as merchant agent-api marketplace; creator_address is the bound wallet).
MCP tools (20) — supabase/functions/recipient-loyalty-mcp/index.ts: get_recipient_profile, list_my_loyalty_balances, get_my_loyalty_balance, get_reward_workflow_status, prepare_reward_redemption, prepare_loyalty_token_transfer, list_rewards_for_program, list_my_vouchers, redeem_my_reward, list_p2p_offers, create_p2p_offer, accept_p2p_offer, cancel_p2p_offer, lookup_gift_certificate, claim_gift_certificate, list_my_gift_certificates, bazaar_discover_resources, bazaar_discover_mcp_servers, bazaar_probe_x402, bazaar_pay_and_call (last four = Bazaar side-car; bazaar_pay_and_call requires opt-in delegated CDP wallet).
Pay-per-call (recipient, MPP / x402): Autonomous agents that should pay USDC per request use the same gateways as merchants: mpp-gateway/recipient-api/… (Tempo MPP) or x402-gateway/recipient-api/… and x402-gateway/recipient-mcp-tools/<tool> (x402). USD prices match the merchant corridor (reads ~$0.001, writes ~$0.005–0.01; prepare-transfer / prepare_loyalty_token_transfer $0.005). Canonical tables: docs/business/MONETIZATION_AND_PRICING.md §4.1 · source constants: supabase/functions/_shared/recipient-paid-routes.ts, recipient-mcp-bazaar-tools.ts. Direct functions/v1/recipient-api / recipient-loyalty-mcp calls use rwk_ + rate limits only (no per-request USDC in the gateway layer).
Example MCP fragment: examples/recipient-agent-mcp/cursor-mcp.json.
Agent Discovery
AI agents can discover the protocol automatically via:
/.well-known/agent.json— Full protocol specification, capabilities, pricing/.well-known/skills/— 16 structured Skills (00–15, step-by-step guides)/api-docs— Interactive API documentation
Skills for AI Agents
Structured Markdown guides that teach agents how to use the protocol:
# | Skill | Description |
00 | Getting Started | Register agent (merchant UI or SIWE), get |
01 | Create Loyalty Program | Deploy B20 loyalty token on Base (legacy ERC-20 optional) |
02 | Mint Tokens | Mint tokens to customer wallets |
03 | Transfer Tokens | Transfer tokens between wallets |
04 | Manage Rewards | Create redeemable rewards catalog |
05 | Balance & Tiers | Check balances and tier status |
06 | Marketplace Trading | P2P token trading with atomic escrow |
07 | Analytics & CRM | Program analytics and CRM data |
08 | Referrals | Referral programs for organic growth |
09 | Vouchers | Voucher lifecycle management |
10 | Server Wallets | CDP MPC wallets for autonomous transactions |
11 | Earn Points (Cashback) | Mint from purchase amount × cashback rate |
12 | Gift Certificates | Issue, claim, and mint |
13 | Endpoint Workflows | Multi-step REST/MCP flows and prerequisites |
14 | B20 Native Spec | Base Beryl B20 Asset semantics for loyalty tokens |
15 | Payment Scenarios | x402 exact, MPP, subscriptions, spend policies |
Installable skill bundle (CLI): npx skills add aspekt19/unboxed-loyalty-spark --skill loyal-spark — source in skills/loyal-spark/.
Skills index: https://loyalspark.online/.well-known/skills/index.md
Server Wallets (CDP MPC)
Agents can create their own Coinbase MPC wallets on Base for autonomous transactions:
curl -X POST \
-H "x-api-key: lsk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create_wallet"}' \
https://api.loyalspark.online/agent-walletBenefits:
No private key management — keys are in Coinbase's secure enclave
Server-side transaction signing
Automatic Builder Code attribution (ERC-8021)
Pricing
Plan | Monthly | API Calls | Agents | Mint fee | Mint cap |
Free | $0 | 200 | 1 | 1.25% | 1,000 tokens/mo |
Pro | $49 USDC | 10,000 | 5 | 0.5% | Unlimited |
Enterprise | $129 USDC | Unlimited | Unlimited | 0.25% | Unlimited |
Merchant SaaS (portal): Starter $39 / Growth $79 / Scale $149 per month (annual discount 15–20% optional) — details in docs/business/MONETIZATION_AND_PRICING.md.
Payments for agent plans on-chain in USDC on Base ($1 = 1 USDC). Plan limits (API calls, agent seats, Free-tier mint cap) are enforced server-side in Edge Functions — see MONETIZATION_AND_PRICING.md.
Mint fee is not USDC. It is charged in the merchant's own loyalty tokens — a second mint(address,uint256) to the platform fee wallet on the same token contract, returned first in the calls[] bundle. The token contract has no mintWithFee, so settlement is tracked off-chain: each prepared mint creates a fee obligation, and 5+ obligations unpaid for over 60 minutes block further mints with HTTP 402. Confirm with POST /agent-api/mint/confirm.
Getting Started
Prerequisites
Node.js 18+ or Bun
An email, phone number, Google account, or Web3 wallet (MetaMask, Coinbase Wallet, WalletConnect)
Some ETH on Base for gas fees (merchants only)
Installation
git clone https://github.com/aspekt19/unboxed-loyalty-spark.git
cd unboxed-loyalty-spark
npm install
npm run devSign In Options
Email / Phone / Google (recommended): Click "Sign In" via Privy — an embedded wallet is created automatically, no crypto knowledge needed
MetaMask / Coinbase Wallet / WalletConnect: Traditional Web3 wallet connection
Farcaster: Auto-connects inside Warpcast miniapp
On Merchant and Customer portals, use the header Sign In / wallet control until a session exists; the Profile control appears only after you are signed in. See docs/development/PORTALS_AND_TEAM.md.
Network: Base Mainnet (Chain ID: 8453) | RPC: https://mainnet.base.org | Explorer: https://basescan.org
Project Structure
unboxed-loyalty-spark/
├── AGENTS.md # Entry map for AI / coding agents
├── docs/ # Human docs (guides, integrations, pitch notes)
│ ├── development/ # Build & deploy
│ ├── integrations/ # Farcaster, OpenServ, A2A, prompts
│ ├── pitch-deck/ # Investor deck (Markdown sources)
│ └── supabase/ # DB/edge runbooks
├── src/
│ ├── components/
│ │ ├── ui/ # shadcn/ui library
│ │ ├── agents/ # AI agent management
│ │ ├── rewards/ # Rewards & vouchers
│ │ ├── crm/ # CRM & analytics
│ │ ├── marketing/ # Campaigns
│ │ ├── automation/ # Marketing automation
│ │ ├── tiers/ # Customer tiers
│ │ ├── referral/ # Referral programs
│ │ ├── roundup/ # DeFi investment (frozen)
│ │ ├── marketplace/ # Token trading (frozen)
│ │ ├── reviews/ # Customer reviews
│ │ ├── onboarding/ # Welcome flows & tours
│ │ ├── merchant/ # Merchant shell & tabs (Team, Programs, …)
│ │ ├── team/ # Branches, employees, invite redemption
│ │ └── admin/ # Platform administration
│ ├── hooks/ # Data fetching (TanStack Query + Supabase) — keep queries here
│ ├── config/ # Contract addresses & ABIs
│ ├── contexts/ # Auth context
│ ├── integrations/supabase/ # Database client & types
│ ├── pages/ # Routes (e.g. ForAgentsPage → /for-agents, ApiDocsPage → /api-docs)
│ └── lib/ # Utilities
├── examples/agent-mcp/ # Copy-paste MCP + curl for agents
├── scripts/ # Optional dev helpers (x402 MCP smoke test, SIWE lsk_ helper) — not bundled in the web app
├── public/
│ ├── .well-known/
│ │ ├── agent.json # AI agent discovery
│ │ ├── skills/ # Markdown skills for agents (00–12)
│ │ └── farcaster.json # Farcaster manifest
│ ├── openapi.json # OpenAPI 3.1 (API + x402 hints)
│ ├── llms.txt / llms-full.txt # Short / long summaries for LLM crawlers
│ └── media-kit/ # Brand & press assets
├── capacitor.config.ts # Native app IDs (see docs/development/)
├── contracts/ # Solidity contracts
├── supabase/
│ ├── functions/ # Edge Functions — see supabase/functions/README.md
│ └── migrations/ # Database migrations
└── README.mdIndexes: AGENTS.md (AI agents) · docs/README.md (human guides) · docs/development/PORTALS_AND_TEAM.md (portal UI & team invites) · supabase/functions/README.md (Edge Functions).
Edge Functions
See the supabase/functions/README.md catalogue (grouped by role: API, MCP, auth, payments, jobs). The root README table is intentionally shortened here to avoid duplication.
Security
Flexible Authentication: Email/phone/Google via Privy (with embedded wallets), or SIWE for Farcaster and crypto-native users
API Key Auth: SHA-256 hashed keys with
lsk_prefix for agentsRow Level Security: All database tables protected with RLS policies
Scoped Permissions: Agents operate within granted scopes only
MPC Wallets: Private keys never leave Coinbase's secure enclave
Rate Limiting: Per-agent rate limits prevent abuse
Builder Code Attribution: All transactions tagged with ERC-8021 builder code
Builder Code
All on-chain transactions are tagged with Base Builder Code bc_wdmnog7m (ERC-8021 format) for analytics visibility in base.dev.
For AI Agents
Loyal Spark is a machine-payment-native API. AI agents can discover, authenticate, and pay for API calls without human intervention.
Discovery Endpoints
Resource | URL | Purpose |
Agent onboarding (web) | Keys, REST, MCP, gateways, discovery — one page for builders | |
Agent Manifest | Full protocol spec, capabilities, pricing | |
MPP Manifest | Machine Payment Protocol manifest | |
OpenAPI Spec | OpenAPI 3.1.0 with x-payment-info | |
Skills Library | 16 step-by-step guides for agents ( | |
LLMs.txt | Protocol summary for LLM crawlers | |
Prompt Guide | Ready-to-use system prompts | |
Copy-paste MCP / curl | Starter configs in the repo | |
Repo quickstart (keys, SIWE, x402) | Short paths for coding agents |
Payment Gateways (pay per call — no subscription)
Agents can pay per request with onchain micropayments instead of a monthly plan. Write actions still need a free lsk_ or rwk_ key for identity and scopes; x402/MPP cover the per-call USDC/pathUSD fee only.
Protocol | Network | Asset | Gateway |
x402 exact | Base | USDC |
|
MPP | Tempo | pathUSD / USDC |
|
Pricing: $0.001–$0.005 per read · $0.005–$0.05 per write · HTTP 402 challenge/response flow.
Paid MCP (merchant): POST …/x402-gateway/mcp-tools/<tool_name> (JSON-RPC tools/call); after settlement, pass x-api-key: lsk_… like direct MCP. Recipient / holder MCP: POST …/x402-gateway/recipient-mcp-tools/<tool_name> with x-api-key: rwk_…. Tool lists + JSON Schemas: mcp-bazaar-tools.ts · recipient-mcp-bazaar-tools.ts. 402 + Bazaar (discovery) metadata for both families: x402-bazaar-accept.ts (extensions.bazaar, outputSchema.input.type: "mcp"). After successful settle, the CDP facilitator may return EXTENSION-RESPONSES (bazaar.status: success | processing | rejected).
Catalogues & Registries
Official MCP Registry —
io.github.aspekt19/loyal-spark(remote Streamable HTTP →api.loyalspark.online/loyalty-mcp; see rootserver.json)mppscan.com — MPP service scanner (indexed via OpenAPI)
glama.ai — MCP server directory
mcp.so — MCP server registry
smithery.ai — MCP marketplace (
loyalspark/loyalty-protocol)
Links & Resources
Website: loyalspark.online
API Docs: loyalspark.online/api-docs
Agent Discovery: loyalspark.online/.well-known/agent.json
Twitter/X: x.com/Loyal_Spark
Email: admin@loyalspark.online
Built With
Base — Ethereum L2 by Coinbase
Privy — Wallet Abstraction & Authentication
Coinbase CDP — MPC Server Wallets (for AI agents)
Wagmi — React Hooks for Ethereum
shadcn/ui — UI Components
Lovable — Full-Stack Development Platform
Viem — TypeScript Interface for Ethereum
License
MIT License — see LICENSE file for details.
Available Tools
17 toolsactivate_loyalty_programAInspect
Get activation calldata (unpauseUtility + enableMinting) for an inactive program
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address (0x...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of explaining behavior. It successfully clarifies that this returns calldata (transaction data) rather than executing the activation itself, and discloses the specific operations involved. However, it omits safety considerations, error conditions (e.g., already active programs), or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, efficient sentence with high information density. The parenthetical technical details (unpauseUtility + enableMinting) are precisely placed to clarify the calldata content without verbosity. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 param, no nesting) and no output schema, the description adequately explains the return value (calldata) and the target state. It meets the minimum requirements for this tool's complexity level, though annotations or error conditions would improve it further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds implicit context that token_address refers to an inactive program's contract, but does not elaborate on parameter format beyond the schema's '0x...' notation or provide examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Gets activation calldata' using specific technical terms (unpauseUtility + enableMinting) and specifies the target resource (inactive program). However, it does not explicitly differentiate from the sibling tool update_program_status, which could create selection ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies preconditions by specifying 'for an inactive program,' but provides no explicit guidance on when to use this versus update_program_status or other sibling tools, and does not state what happens if the program is already active.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_voucher_statusAInspect
Check voucher status by code or ID. Public endpoint — no API key or authentication required.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Voucher code (e.g. LOYAL-XXXX-XXXX-XXXX-XXXX) | |
| voucher_id | No | Voucher UUID (alternative to code) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It discloses that the endpoint is public and requires no authentication, which is valuable. However, it does not explicitly state that it is read-only, nor does it mention error handling, rate limits, or response format. The 'check' wording implies safety but doesn't confirm it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose. The second sentence adds a useful fact (public endpoint) without fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with no output schema, the description covers the essential aspects: what it does, how to invoke it, and authentication requirements. It lacks details on output format, but this is likely acceptable for a status check tool. The absence of explicit read-only disclosure is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both 'code' and 'voucher_id'. The description's mention of 'by code or ID' aligns with the schema but adds no new semantic depth. Baseline of 3 is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check voucher status by code or ID.' It uses a specific verb ('check') and resource ('voucher status'), and the two lookup methods distinguish it from sibling tools like use_voucher or create_gift_certificate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for read-only status checks but does not explicitly compare with alternatives or state when not to use it. The public endpoint note provides context but no exclusionary guidance. Usage is inferred from the clear purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_loyalty_programAInspect
Get factory calldata to deploy a new ERC-20 loyalty token on Base
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Program name | |
| symbol | Yes | Token symbol, 2-5 chars | |
| expiration_days | No | Program duration in days (default: 365) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the mechanism (factory calldata) and platform (Base), but lacks details on side effects, authentication requirements, rate limits, or what the tool actually returns (the calldata itself vs a transaction hash).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, dense sentence with zero waste. Front-loaded with action ('Get factory calldata'), specifies the domain ('ERC-20 loyalty token'), and platform ('Base'). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a blockchain deployment tool with 100% schema coverage, the description adequately covers the primary purpose. However, lacking an output schema and given the complexity of factory deployment patterns, it should ideally clarify what the caller receives (calldata vs deployed address) and next steps. Sufficient but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all 3 parameters (name, symbol, expiration_days). The description provides context that these params are for an ERC-20 loyalty token, but does not add specific syntax or format details beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get factory calldata' combined with clear resource 'ERC-20 loyalty token' and platform 'Base'. Distinguishes from sibling tools like register_loyalty_program or activate_loyalty_program through the specific deployment mechanism.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this versus siblings like register_loyalty_program or activate_loyalty_program. While 'deploy' implies initial contract creation, the workflow relationship between deploying, registering, and activating is not explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rewardBInspect
Create a new reward redeemable with loyalty tokens
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address | |
| name | Yes | Reward name | |
| description | No | Reward description | |
| cost | Yes | Token cost to redeem |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the tool creates a reward but does not mention any side effects, prerequisites (e.g., an existing loyalty program), permission requirements, or whether the operation is reversible. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear, front-loaded sentence with no redundant information. It earns its place by stating the core function in an efficient manner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain return behavior, prerequisites, and relation to other loyalty program entities. It only states the basic action, leaving out important context such as whether a loyalty program must already exist or what the response contains. The tool has 4 parameters and sits in a complex set of sibling tools, so this brevity is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already documented (e.g., cost is 'Token cost to redeem'). The description adds no extra meaning beyond the schema; it merely restates the token-based redemption concept. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Create' with a clear resource ('reward') and a qualifying phrase ('redeemable with loyalty tokens') that distinguishes it from sibling tools like create_gift_certificate and create_personalized_offer. It precisely states the action and object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool (when creating a reward), but provides no explicit guidance on when not to use it or how it differs from similar creation tools such as create_gift_certificate or create_personalized_offer. The usage context is implied rather than clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_profileAInspect
Get authenticated agent's profile
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. The verb 'Get' implies a read-only operation and the phrase 'authenticated agent' signals an authentication requirement, but it does not disclose error conditions, side effects, or output behavior. A more explicit read-only/authentication statement would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys all essential information without superfluous words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless read-only tool, the description is largely complete. It does not explain the output structure, but no output schema exists, and 'profile' is reasonably self-explanatory given common usage. Minor gaps remain around expected response fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema fully covers the parameter surface. The description adds no parameter-specific meaning, but none is needed; baseline for 0-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and names the precise resource 'authenticated agent's profile', which distinguishes it from all sibling tools focused on loyalty, marketplace, or reports. Adding 'authenticated' clarifies the otherwise ambiguous 'my' from the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for retrieving one's own profile, and no sibling tool serves a similar purpose. It does not explicitly state when not to use it, but the context is unambiguous due to the unique scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_platform_infoAInspect
Get info about Loyal Spark protocol on Base L2
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Get info' strongly implies a read-only, non-destructive operation, which is a useful implicit disclosure. However, it does not explicitly state side-effect safety, permission requirements, or return behavior. For a zero-parameter getter, this is minimally transparent but not fully explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, extremely concise and front-loaded. Every word adds value, and there is no redundant or vague filler. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema, no annotations), the description covers the essential invocation context: it tells the agent what the tool does and that it requires no inputs. It lacks details about the return structure or when to use it, but for a basic platform info getter, it is sufficiently complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema covers everything with 100% coverage. The description adds no parameter information, but none is needed. Baseline for zero parameters is 4, and there is no deficiency to penalize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get info about Loyal Spark protocol on Base L2' uses a specific verb ('Get') and a clear resource ('info about Loyal Spark protocol on Base L2'). It distinguishes from siblings like get_platform_stats and get_my_profile, though 'info' is broader than these more specific sibling names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions or preferred contexts, nor does it reference any sibling tools such as get_platform_stats or get_program_analytics. This is a clear gap for a tool with many related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_program_analyticsBInspect
Get analytics for your loyalty programs
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does not disclose whether the tool is read-only, requires authentication, returns a report, or has any side effects. Minimal behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no redundant filler. It states the action and the resource efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the simple schema, the absence of an output schema and any details about what analytics are returned makes the description inadequate. It would benefit from mentioning typical metrics, time ranges, or the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain. The description adds no param semantics, but the baseline for 0-param tools is 4, and the schema already covers this trivially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Get') and resource ('analytics for your loyalty programs'), which distinguishes it from siblings like get_platform_stats or get_program_workflow_status. However, it doesn't specify what kind of analytics, so it's not maximally precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description only states what it does, not when to prefer it over other analytics or program tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_balanceBInspect
Get loyalty token balance and tier info for a customer
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address | |
| customer_address | Yes | Customer wallet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing behavioral traits. It only states what the tool returns, but does not explicitly confirm it is read-only, nor does it describe error handling or what happens if the customer or token does not exist. The word 'Get' implies non-mutation, but without annotations this is not sufficiently explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that starts with the verb 'Get' and immediately conveys the purpose. There is no filler or repetition, making it optimally sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with two clearly described parameters and no output schema, so the description's claim of returning 'balance and tier info' is minimally adequate. However, it lacks details on the response structure (e.g., what fields constitute 'tier info'), potential errors, and typical use cases, leaving gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (token contract address, customer wallet) with 100% coverage. The tool description adds no additional meaning beyond the schema. Given the baseline of 3 for high schema coverage, this score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('loyalty token balance and tier info'), and the target ('for a customer'). It distinguishes itself from sibling tools like mint_loyalty_tokens or transfer_loyalty_tokens by being a read-only query, and the explicit mention of 'balance and tier info' makes it specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that get_my_profile might be used for the caller's own balance, or that this tool is for querying a specific customer's balance given a token address. No prerequisites or exclusions are stated, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_loyalty_programsAInspect
List loyalty programs owned by the agent's merchant
| Name | Required | Description | Default |
|---|---|---|---|
| include_expired | No | Include expired programs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It adds the ownership scoping but does not mention whether expired programs are excluded by default, any permission requirements, side effects, or return format. The verb 'list' implies read-only, but this is not explicitly stated, and the description offers little beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded, containing only essential information about the action and scope. There is no unnecessary detail or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter) and the schema's clear documentation of the 'include_expired' parameter, the description provides sufficient context for a basic list operation. The ownership scope is stated, and the parameter description implies the default filtering behavior. While an output schema is absent, it is not necessary for a simple list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter 'include_expired' with a clear description, so the schema fully documents parameter semantics. The tool description does not add further meaning about parameters, but the baseline is 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists loyalty programs and specifies the scope 'owned by the agent's merchant', distinguishing it from sibling tools like 'create_loyalty_program' or 'list_gift_certificates'. The verb 'list' and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for viewing the merchant's own loyalty programs, but it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. It relies on the tool's name and context rather than providing explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketplace_offersAInspect
List active token trading offers on the marketplace
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter: active/completed/cancelled | |
| limit | No | Max results (1-100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden for behavioral disclosure. It states that only 'active' offers are listed, adding some context, but does not mention pagination, ordering, or that the status parameter can override the active filter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and resource with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with two optional parameters and no output schema, the description covers the core purpose. However, the absence of usage guidance and behavioral details (like pagination) keeps it from a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both limit and status have descriptive text. The description adds no additional parameter information, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies the resource ('active token trading offers on the marketplace'), distinguishing it from related sibling tools like cancel_stale_offers or create_personalized_offer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies the tool should be used to list active offers, but there is no explicit guidance on when to use it versus alternatives, nor any exclusions or recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rewardsCInspect
List rewards for a loyalty program by token_address
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address (0x...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but only implies read-only safety through the verb 'List'. It fails to mention pagination behavior, rate limiting, authentication requirements, or what data structure is returned (rewards as objects, array, etc.).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 9 words with no filler content. However, given the absence of annotations and output schema, this brevity may be excessive—every sentence earns its place, but there aren't enough sentences to fully document the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with 100% schema coverage, the description meets minimum viability by identifying the core operation. However, given no output schema and no annotations, it should explain what constitutes a 'reward' or provide return value context to be complete. It stops at the bare minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description acknowledges the 'token_address' parameter but adds no semantic value beyond the schema's description ('Token contract address (0x...)'). It doesn't clarify if this is the program's token or a specific reward token.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (List), resource (rewards), and scope (for a loyalty program), which distinguishes it from sibling tools like 'create_reward' or 'list_loyalty_programs'. However, it doesn't clarify the relationship to 'list_marketplace_offers' or what distinguishes a 'reward' from an 'offer' in this domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the filter criterion ('by token_address') but provides no explicit guidance on when to use this tool versus alternatives, nor any prerequisites for the token_address value. It lacks 'when-not' guidance or context about program states (e.g., active vs. inactive programs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mint_loyalty_tokensBInspect
Record mint intent and get smart contract call params
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address | |
| recipient | Yes | Recipient wallet (0x...) | |
| amount | Yes | Tokens to mint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It crucially clarifies that this tool returns 'smart contract call params' rather than executing the transaction itself—a key behavioral distinction. However, it omits authentication requirements, gas/fee implications, idempotency guarantees, or what the returned parameters contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at nine words with no filler. It front-loads the core action. However, given the high-stakes blockchain context and zero annotations, it is arguably too terse—lacking safety warnings or output handling guidance that would justify its brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a blockchain operation tool with no output schema and no annotations, the description is insufficient. While it mentions returning 'smart contract call params,' it fails to describe the output structure, error cases, chain/network context, or how to use the returned parameters to actually execute the mint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all three parameters (token_address, recipient, amount), establishing a baseline score of 3. The description adds no additional semantic context beyond what the schema already provides, such as address format validation or amount precision requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records minting intent and retrieves smart contract parameters, using specific verbs ('record', 'get') and identifying the blockchain context. However, it does not explicitly differentiate from the sibling 'transfer_loyalty_tokens' tool, which also moves tokens to recipients but from existing supply rather than minting new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this versus 'transfer_loyalty_tokens' or other alternatives. There are no prerequisites mentioned (e.g., program ownership requirements) nor warnings about the irreversible nature of minting operations in blockchain contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redeem_rewardAInspect
Redeem a reward by providing a verified token transfer transaction hash. Creates a voucher for the customer.
| Name | Required | Description | Default |
|---|---|---|---|
| reward_id | Yes | UUID of the reward to redeem | |
| customer_address | Yes | Wallet address of the customer who transferred tokens | |
| transaction_hash | Yes | On-chain tx hash of the token transfer from customer to merchant |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully discloses that the tool 'Creates a voucher' as a side effect and implies validation of the transaction hash. However, it omits critical behavioral details such as error handling for invalid hashes, idempotency guarantees, or whether the voucher creation is synchronous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two highly efficient sentences with zero redundancy. It front-loads the core action and mechanism in the first sentence and follows with the outcome/side effect, making it immediately scannable and actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description adequately covers the primary workflow: it explains the redemption mechanism, the required blockchain context, and the voucher creation outcome. It could be improved by describing the return value structure or error conditions, but it provides sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, establishing a baseline score of 3. The description adds minimal semantic value beyond the schema, though it reinforces the relationship between parameters by specifying that the transaction_hash must represent a 'verified token transfer.' It does not add syntax details, validation rules, or format examples beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Redeem a reward'), the required mechanism ('by providing a verified token transfer transaction hash'), and the outcome ('Creates a voucher'). It effectively distinguishes from siblings like 'create_reward' (which creates the reward definition) and 'use_voucher' (which likely consumes vouchers).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the requirement of a 'verified token transfer transaction hash,' suggesting this tool is for post-payment verification scenarios. However, it lacks explicit guidance on when to use this versus 'use_voucher' or what prerequisites must be met before invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_loyalty_programCInspect
Register a deployed token as a loyalty program in the database
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Program name | |
| symbol | Yes | Token symbol | |
| token_address | Yes | Deployed token contract address (0x...) | |
| expiration_days | No | Duration in days (default: 365) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It mentions persistence ('in the database') but fails to clarify critical behavioral traits: whether this is idempotent, what gets returned (no output schema exists), error conditions (e.g., duplicate registration), or side effects. For a database mutation operation, this is insufficient behavioral coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is efficient and front-loaded with the core action. However, given the absence of annotations and output schema, the description is arguably too brief—conciseness becomes under-specification when critical behavioral and sibling-differentiation context is missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero annotations, no output schema, and a confusingly similar sibling tool ('create_loyalty_program'), the description is incomplete. It should explicitly clarify the distinction between creating new programs versus registering existing deployed tokens, and disclose return values or success indicators.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, establishing a baseline of 3. The description reinforces 'token_address' by mentioning 'deployed token' but adds no additional semantic context (e.g., address format validation, default behavior when expiration_days is omitted) beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Register') and resource ('deployed token' as 'loyalty program'), clarifying this handles existing tokens. However, it lacks explicit differentiation from the sibling 'create_loyalty_program', which could confuse agents about whether to deploy new tokens or register existing ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus 'create_loyalty_program' or other alternatives. While 'deployed token' implies prior token deployment, there are no 'when-to-use' or 'when-not-to-use' instructions, nor prerequisites stated (e.g., token ownership verification).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_loyalty_tokensAInspect
Get calldata to transfer loyalty tokens between wallets
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address (0x...) | |
| to | Yes | Recipient wallet (0x...) | |
| amount | Yes | Tokens to transfer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears the full burden of behavioral disclosure. It does disclose the key non-obvious behavior that the tool only returns calldata rather than executing the transfer ('Get calldata to transfer'), which is useful. However, it omits details such as whether the caller must hold tokens, whether approval is needed, or what the calldata format looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is entirely front-loaded. It states the action and the object without any filler or redundant information, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and only three straightforward parameters, the description provides the core purpose and the fact that it returns calldata. However, it lacks any context about the return value's structure, potential errors, or how the calldata should be used in an actual transaction, leaving some gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters (to, amount, token_address) with descriptions, achieving 100% coverage. The description adds no additional parameter semantics beyond the schema, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get calldata to transfer loyalty tokens between wallets.' It uses a specific verb ('Get calldata') and identifies the resource (loyalty tokens) and the action (transfer between wallets), distinguishing it from sibling tools like mint_loyalty_tokens and redeem_reward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusion criteria, prerequisites, or suggest when to prefer transfer_loyalty_tokens over mint_loyalty_tokens or other token-related tools. The agent is left to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_program_statusAInspect
Update program status in database after on-chain activation/pause
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address | |
| status | Yes | New status: active, paused, or inactive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully clarifies that this operates on the database (not the blockchain), which is critical context. However, it omits details about idempotency, error handling if the on-chain state differs, or what the function returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence of nine words with no filler. It front-loads the action ('Update program status') and every word contributes essential information about scope and timing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool without output schema or annotations, the description is minimally sufficient. It explains the 'where' (database) and 'when' (after on-chain events), but lacks information about success indicators, failure modes, or state validation requirements that would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, establishing a baseline of 3. The description adds workflow context ('after on-chain activation/pause') that semantically links the 'status' parameter values (active/paused) to their on-chain counterparts, but does not elaborate on token address format or validation rules beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Update), resource (program status in database), and scope limitation (after on-chain activation/pause). It effectively distinguishes this database-sync tool from the sibling 'activate_loyalty_program' by specifying 'database' and 'after on-chain', though it could explicitly name the sibling to be perfect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after on-chain activation/pause' provides implicit temporal guidance for when to invoke this tool (i.e., following blockchain state changes). However, it lacks explicit contrast with alternatives like 'activate_loyalty_program' or clear statements about when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
use_voucherAInspect
Mark a voucher as used (redeemed by customer at merchant). Merchant-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| voucher_code | No | Voucher code (e.g. LOYAL-XXXX-XXXX-XXXX-XXXX) | |
| voucher_id | No | Voucher UUID (alternative to code) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It does disclose that this is a merchant-only mutation and describes the redemption scenario. However, it does not mention idempotency, behavior if the voucher is already used, reversibility, or error conditions. For a state-changing operation, this is a moderate level of transparency but far from complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded: a short main clause followed by a clarifying parenthetical and a restriction. Both sentences earn their place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two params and no output schema, the description covers purpose, usage context, and authorization restriction. It does not mention potential prerequisite checks (e.g., verifying status before marking) or failure semantics, but given the tool's simplicity and the lack of annotations, it is still reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both voucher_id and voucher_code have clear descriptive text including the alternation between them and the format of the code. The description adds no additional parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Mark a voucher as used' with the context 'redeemed by customer at merchant'. This specific verb+resource distinguishes it from sibling tools like check_voucher_status (read-only status check) and redeem_reward (rewards, not vouchers). The 'Merchant-only operation' qualifier adds further clarity on the intended actor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool (at the point of customer redemption at a merchant) and adds a restriction ('Merchant-only operation'). However, it does not explicitly name alternatives or exclusions, such as using check_voucher_status for querying status before marking as used. The context implies the scenario but lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.9- Added
check_voucher_status
2 tool updates
v0.1.8- Added
redeem_reward - Added
use_voucher
14 tool updates
v0.1.4- Changed
activate_loyalty_program2 fields changed- added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address (0x...)", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address" +]
- Changed
create_loyalty_program4 fields changed- added
Input schema / properties / expiration_daysAdded value: +{ + "description": "Program duration in days (default: 365)", + "type": "number" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Program name", + "type": "string" +} - added
Input schema / properties / symbolAdded value: +{ + "description": "Token symbol, 2-5 chars", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "name", + "symbol" +]
- Changed
create_reward5 fields changed- added
Input schema / properties / costAdded value: +{ + "description": "Token cost to redeem", + "type": "number" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "Reward description", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Reward name", + "type": "string" +} - added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address", + "name", + "cost" +]
- Changed
get_my_profile1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_platform_info1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_program_analytics1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_token_balance3 fields changed- added
Input schema / properties / customer_addressAdded value: +{ + "description": "Customer wallet", + "type": "string" +} - added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address", + "customer_address" +]
- Changed
list_loyalty_programs1 field changed- added
Input schema / properties / include_expiredAdded value: +{ + "description": "Include expired programs", + "type": "boolean" +}
- Changed
list_marketplace_offers2 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Max results (1-100)", + "type": "number" +} - added
Input schema / properties / statusAdded value: +{ + "description": "Filter: active/completed/cancelled", + "type": "string" +}
- Changed
list_rewards2 fields changed- added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address (0x...)", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address" +]
- Changed
mint_loyalty_tokens4 fields changed- added
Input schema / properties / amountAdded value: +{ + "description": "Tokens to mint", + "type": "number" +} - added
Input schema / properties / recipientAdded value: +{ + "description": "Recipient wallet (0x...)", + "type": "string" +} - added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address", + "recipient", + "amount" +]
- Changed
register_loyalty_program5 fields changed- added
Input schema / properties / expiration_daysAdded value: +{ + "description": "Duration in days (default: 365)", + "type": "number" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Program name", + "type": "string" +} - added
Input schema / properties / symbolAdded value: +{ + "description": "Token symbol", + "type": "string" +} - added
Input schema / properties / token_addressAdded value: +{ + "description": "Deployed token contract address (0x...)", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "name", + "symbol", + "token_address" +]
- Changed
transfer_loyalty_tokens4 fields changed- added
Input schema / properties / amountAdded value: +{ + "description": "Tokens to transfer", + "type": "number" +} - added
Input schema / properties / toAdded value: +{ + "description": "Recipient wallet (0x...)", + "type": "string" +} - added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address (0x...)", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address", + "to", + "amount" +]
- Changed
update_program_status3 fields changed- added
Input schema / properties / statusAdded value: +{ + "description": "New status: active, paused, or inactive", + "type": "string" +} - added
Input schema / properties / token_addressAdded value: +{ + "description": "Token contract address", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "token_address", + "status" +]
4 tool updates
v0.1.3- Added
activate_loyalty_program - Added
create_loyalty_program - Added
register_loyalty_program - Added
update_program_status
10 tool updates
v0.1.0- First observed
create_reward - First observed
get_my_profile - First observed
get_platform_info - First observed
get_program_analytics - First observed
get_token_balance - First observed
list_loyalty_programs - First observed
list_marketplace_offers - First observed
list_rewards - First observed
mint_loyalty_tokens - First observed
transfer_loyalty_tokens
TDQS
Scored across 17 tools
Tools are mostly distinct, though create_loyalty_program vs register_loyalty_program and activate_loyalty_program vs update_program_status operate on similar resources and could cause brief hesitation. Descriptions clarify the deployment vs. registration and calldata generation vs. database update distinctions sufficiently.
Excellent consistency throughout with strict verb_noun snake_case pattern (e.g., create_reward, transfer_loyalty_tokens, check_voucher_status). All 17 tools follow the same convention without deviation.
17 tools is slightly large but justified for the scope, covering full lifecycle: program deployment/registration, token minting/transfers, reward management, voucher handling, marketplace queries, and analytics. Each tool earns its place without redundancy.
Strong coverage of loyalty protocol workflows including deployment, activation, token operations, reward redemption, and voucher lifecycle. Minor gaps exist for reward updates/deletion and explicit pause calldata generation, but agents can work around these using existing tools.
Maintenance
Related MCP Connectors
Agent-commerce MCP server for x402/USDC payments and affiliate splits on Base.
MCP server for Boson Protocol — on-chain agentic commerce for physical & digital goods.
MCP server for AI agents to discover campaigns by humans and donate USDC directly on Base.
SqueezeOS MCP for live machine discovery and x402-paid USDC APIs on Base.
Related MCP Servers
AlicenseNot gradedqualityFmaintenanceProvides onchain tools for Claude AI to interact with the Base blockchain and Coinbase API, enabling wallet management, fund transfers, and smart contract deployment.110 npm350MIT- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables fee-free USDC transfers on the Base blockchain network using Coinbase CDP MPC Wallet integration, with support for ENS and BaseName domain resolution.6 npm21MIT
- AlicenseNot gradedqualityDmaintenanceMCP (Model Context Protocol) server for the MAIN DEX on Base. Provides AI agents (Claude, Cursor, etc.) with tools to interact with the protocol: swap tokens, manage liquidity, enter/exit ALM strategies(10% APY), and more.MIT
- FlicenseNot gradedqualityDmaintenanceMCP server enabling rapid Web3 development on Base with Farcaster integration.-