loyal-spark-mcp
Registry code: 89f9b6c288552e01
Base MCP (39 tools) on Base: programs, mint, rewards. lsk_ key; plan limits enforced. /for-agents
from a public catalogue that lists it, not from the operator
- endpoint
- https://api.loyalspark.online/loyalty-mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 10 · newcomer
- Is loyal-spark-mcp live?
- Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
- Is loyal-spark-mcp free to use?
- Partly — some of its tools are open, others need a key or payment.
- What tools does loyal-spark-mcp have?
- 42 tools: get_program_workflow_status, register_loyalty_program, create_reward, transfer_loyalty_tokens, use_voucher, get_platform_stats, bazaar_probe_x402, list_loyalty_programs, ….
- Is loyal-spark-mcp safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 100%· all time 100%
last good check
of 42 tools
- unknown → live
Calls placed through this hub's router, from its own receipts, and USDC settlements on base into the address this listing's priced doors name, read off the chain. Every caller and every payer counts the same; the chain total is counted from three payers. The address stands behind 70 doors on this origin, so the chain figures are the operator's. How it is counted.
through this hub
successful
what callers paid
distinct
last 2026-10-21
no flags
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
generate_program_defaults 0.001 USDC paid never probed
Workflow planner: field catalog, required parameters, next_actions, and non-binding examples. External agents must choose their own name, symbol, and economics.
{ "type": "object", "properties": { "locale": { "type": "string" }, "category": { "type": "string" }, "description": { "type": "string" }, "business_name": { "type": "string" }, "preferred_style": { "type": "string" }, "target_audience": { "type": "string" } } }arguments 23 linesupdate_program_config 0.005 USDC paid never probed
Update default cashback_rate and/or points_per_dollar for a program (same as merchant dashboard sliders)
{ "type": "object", "required": [ "token_address" ], "properties": { "cashback_rate": { "type": "number", "description": "New default cashback % for earn (1–100). Omit to leave unchanged." }, "token_address": { "type": "string", "description": "Token contract address (0x...)" }, "points_per_dollar": { "type": "number", "description": "New points per $1 (0–1000, exclusive 0). Omit to leave unchanged." } } }arguments 20 linesredeem_reward 0.01 USDC paid never probed
Redeem a reward by providing a verified token transfer transaction hash. Creates a voucher for the customer.
{ "type": "object", "required": [ "reward_id", "customer_address", "transaction_hash" ], "properties": { "reward_id": { "type": "string", "description": "UUID of the reward to redeem" }, "customer_address": { "type": "string", "description": "Wallet address of the customer who transferred tokens" }, "transaction_hash": { "type": "string", "description": "Onchain tx hash of the token transfer from customer to merchant" } } }arguments 22 linesget_platform_info open 2h ago
Get info about Loyal Spark protocol on Base L2
{ "type": "object", "properties": {} }arguments 4 linesget_my_profile auth-required 2h ago
Get authenticated agent's profile
{ "type": "object", "properties": {} }arguments 4 linesget_program_workflow_status unknown never probed
Explain the next merchant action: current_step, required fields, and ordered next_actions (you provide all parameter values)
{ "type": "object", "properties": { "token_address": { "type": "string", "description": "Optional token to inspect" } } }arguments 9 linesregister_loyalty_program unknown never probed
Register a deployed token as a loyalty program in the database. B20 tokens are registered as active; legacy ERC-20 as inactive (activate next).
{ "type": "object", "required": [ "name", "symbol", "token_address" ], "properties": { "name": { "type": "string", "description": "Program name" }, "symbol": { "type": "string", "description": "Token symbol" }, "cashback_rate": { "type": "number", "description": "Default cashback percent for earn (1–100). Omit for DB default (5)." }, "token_address": { "type": "string", "description": "Deployed token contract address (0x...)" }, "token_standard": { "type": "string", "description": "'b20' (default) or 'erc20' (legacy)" }, "expiration_days": { "type": "number", "description": "Duration in days (default: 365)" }, "points_per_dollar": { "type": "number", "description": "Loyalty points per $1 spent (1–1000). Omit for DB default (1)." } } }arguments 38 linescreate_reward unknown never probed
Create a new reward redeemable with loyalty tokens
{ "type": "object", "required": [ "token_address", "name", "cost" ], "properties": { "cost": { "type": "number", "description": "Token cost to redeem" }, "name": { "type": "string", "description": "Reward name" }, "description": { "type": "string", "description": "Reward description" }, "token_address": { "type": "string", "description": "Token contract address" } } }arguments 26 linestransfer_loyalty_tokens unknown never probed
Get calldata to transfer loyalty tokens between wallets
{ "type": "object", "required": [ "token_address", "to", "amount" ], "properties": { "to": { "type": "string", "description": "Recipient wallet (0x...)" }, "amount": { "type": "number", "description": "Tokens to transfer" }, "token_address": { "type": "string", "description": "Token contract address (0x...)" } } }arguments 22 linesuse_voucher unknown never probed
Mark a voucher as used (redeemed by customer at merchant). Merchant-only operation.
{ "type": "object", "properties": { "voucher_id": { "type": "string", "description": "Voucher UUID (alternative to code)" }, "voucher_code": { "type": "string", "description": "Voucher code (e.g. LOYAL-XXXX-XXXX-XXXX-XXXX)" } } }arguments 13 linesget_platform_stats unknown never probed
Get global platform statistics across all merchants. Admin-only: requires agent owned by an admin wallet.
{ "type": "object", "properties": {} }arguments 4 linesbazaar_probe_x402 unknown never probed
GET a candidate x402 URL and, if it responds HTTP 402, return the parsed payment requirements (accepts[]) so the caller can decide whether to pay. HTTPS only. No signing performed.
{ "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "description": "Full https:// URL of the x402-paid endpoint" } } }arguments 12 lineslist_loyalty_programs unknown never probed
List loyalty programs owned by the agent's merchant
{ "type": "object", "properties": { "include_expired": { "type": "boolean", "description": "Include expired programs" } } }arguments 9 linescreate_loyalty_program unknown never probed
Get factory calldata to deploy a new loyalty token on Base. Defaults to B20 (Base native ERC-20 superset, single tx, active immediately). Pass token_standard='erc20' for the legacy factory. For B20, MINT_ROLE is granted atomically to the merchant admin AND to the agent's CDP wallet (or explicit extra_minters) so autonomous agents can mint with no follow-up transaction.
{ "type": "object", "properties": { "name": { "type": "string", "description": "Program name (required for external agents)" }, "locale": { "type": "string" }, "symbol": { "type": "string", "description": "Token symbol, 2-5 chars (required for external agents)" }, "auto_generate": { "type": "boolean", "description": "Internal automation only — fills missing name/symbol from examples. External agents should pass explicit name and symbol." }, "extra_minters": { "type": "array", "items": { "type": "string" }, "description": "(B20 only) Extra addresses to grant MINT_ROLE atomically in the same deploy tx." }, "token_standard": { "type": "string", "description": "'b20' (default, single-tx deploy on Base precompile factory) or 'erc20' (legacy factory, requires activate_loyalty_program follow-up)" }, "expiration_days": { "type": "number", "description": "Program duration in days (default: 365)" }, "preferred_style": { "type": "string" }, "target_audience": { "type": "string" }, "business_context": { "type": "object", "description": "Optional context for examples only" }, "agent_wallet_address": { "type": "string", "description": "(B20 only) Additional wallet to grant MINT_ROLE atomically. Defaults to the agent's active CDP MPC wallet if not provided." } } }arguments 49 linesactivate_loyalty_program unknown never probed
For legacy ERC-20 programs: returns unpauseUtility + enableMinting calldata. For B20 programs: no-op (already active).
{ "type": "object", "required": [ "token_address" ], "properties": { "token_address": { "type": "string", "description": "Token contract address (0x...)" } } }arguments 12 linesupdate_program_status unknown never probed
Update program status in database after onchain activation/pause
{ "type": "object", "required": [ "token_address", "status" ], "properties": { "status": { "type": "string", "description": "New status: active, paused, or inactive" }, "token_address": { "type": "string", "description": "Token contract address" } } }arguments 17 lineslist_rewards unknown never probed
List rewards for a loyalty program by token_address. Includes redemption metrics (total vouchers issued, redeemed, and last-30-day counts) for each reward.
{ "type": "object", "required": [ "token_address" ], "properties": { "token_address": { "type": "string", "description": "Token contract address (0x...)" } } }arguments 12 linesmint_loyalty_tokens unknown never probed
Record mint intent and get a fee-first `calls[]` bundle: protocol fee mint FIRST, then the recipient mint. The protocol fee is charged in the merchant's own loyalty tokens (not USDC). Submit both calls in order (atomically via EIP-5792 send_calls if your wallet supports it), then call confirm_mint_fee (or POST /agent-api/mint/confirm) with the fee tx hash. Unconfirmed fee obligations block future mints. Prefer recipient_address (same as REST POST /agent-api/mint); `recipient` is a legacy alias.
{ "type": "object", "required": [ "token_address", "amount" ], "properties": { "amount": { "type": "number", "description": "Tokens to mint" }, "recipient": { "type": "string", "description": "Legacy alias for recipient_address" }, "token_address": { "type": "string", "description": "Token contract address" }, "recipient_address": { "type": "string", "description": "Customer wallet receiving minted tokens (0x...). Preferred — matches REST." } } }arguments 25 linesearn_points unknown never probed
Calculate and mint loyalty tokens based on purchase amount and program's cashback rate. Returns a fee-first `calls[]` bundle (protocol fee mint first, then the customer mint) — submit in order, atomically via EIP-5792 if supported, then call confirm_mint_fee (or POST /agent-api/mint/confirm). Unconfirmed fee obligations block future mints.
{ "type": "object", "required": [ "token_address", "customer_address", "purchase_amount" ], "properties": { "cashback_rate": { "type": "number", "description": "Override cashback rate (%). If omitted, uses the program's default rate." }, "token_address": { "type": "string", "description": "Token contract address (0x...)" }, "purchase_amount": { "type": "number", "description": "Purchase amount in currency units (e.g. dollars)" }, "customer_address": { "type": "string", "description": "Customer wallet (0x...)" } } }arguments 26 linesconfirm_mint_fee unknown never probed
Confirm that the protocol fee transaction for a previous mint/earn was broadcast on Base. Verifies the fee mint on-chain and clears the obligation. Unconfirmed fee obligations block future mints.
{ "type": "object", "required": [ "obligation_id", "fee_tx_hash" ], "properties": { "fee_tx_hash": { "type": "string", "description": "Transaction hash of the protocol fee mint" }, "obligation_id": { "type": "string", "description": "fee_obligation_id returned by mint_loyalty_tokens or earn_points" }, "recipient_tx_hash": { "type": "string", "description": "Optional transaction hash of the recipient mint" } } }arguments 21 linesget_token_balance unknown never probed
Get loyalty token balance and tier info for a customer
{ "type": "object", "required": [ "token_address", "customer_address" ], "properties": { "token_address": { "type": "string", "description": "Token contract address" }, "customer_address": { "type": "string", "description": "Customer wallet" } } }arguments 17 linesget_program_analytics unknown never probed
Get analytics for your loyalty programs
{ "type": "object", "properties": {} }arguments 4 lineslist_marketplace_offers unknown never probed
List active token trading offers on the marketplace
{ "type": "object", "properties": { "limit": { "type": "number", "description": "Max results (1-100)" }, "status": { "type": "string", "description": "Filter: active/completed/cancelled" } } }arguments 13 linescheck_voucher_status unknown 2h ago
Check voucher status by code or ID. Requires a merchant agent key; only vouchers issued by the key owner's store are returned.
{ "type": "object", "properties": { "code": { "type": "string", "description": "Voucher code (e.g. LOYAL-XXXX-XXXX-XXXX-XXXX)" }, "voucher_id": { "type": "string", "description": "Voucher UUID (alternative to code)" } } }arguments 13 linescancel_stale_offers unknown never probed
Cancel marketplace offers that have been active for more than N days with no completions. Admin-only action tool.
{ "type": "object", "properties": { "max_age_days": { "type": "number", "description": "Cancel offers older than this many days (default: 14)" } } }arguments 9 linescreate_personalized_offer unknown never probed
Create a personalized offer for a specific customer. Use when analytics reveal engagement patterns (e.g., inactive customers, high-value segments).
{ "type": "object", "required": [ "token_address", "customer_address", "title" ], "properties": { "title": { "type": "string", "description": "Offer title (e.g., 'Welcome back! 20% bonus tokens')" }, "valid_days": { "type": "number", "description": "How many days the offer is valid (default: 7)" }, "description": { "type": "string", "description": "Offer description" }, "bonus_tokens": { "type": "number", "description": "Bonus tokens to award" }, "token_address": { "type": "string", "description": "Token contract address" }, "customer_address": { "type": "string", "description": "Customer wallet address" }, "discount_percentage": { "type": "number", "description": "Discount percentage (0-100)" } } }arguments 38 linesupdate_reward_status unknown never probed
Activate or deactivate a reward in the catalog. Use to manage reward availability based on analytics.
{ "type": "object", "required": [ "reward_id", "is_active" ], "properties": { "is_active": { "type": "boolean", "description": "true to activate, false to deactivate" }, "reward_id": { "type": "string", "description": "UUID of the reward" } } }arguments 17 linessend_report unknown never probed
Send a report to the developer/owner. Use this to submit SEO audits, growth ideas, data reports, anomalies, recommendations, or weekly summaries. The report will appear in the merchant's Agent Reports dashboard.
{ "type": "object", "required": [ "agent_role", "report_type", "title", "content" ], "properties": { "title": { "type": "string", "description": "Report title (max 500 chars)" }, "content": { "type": "string", "description": "Report body text (max 10000 chars)" }, "priority": { "type": "string", "description": "Priority: low, medium, high, or critical" }, "agent_role": { "type": "string", "description": "Your role: ceo, seo, growth, or analyst" }, "report_type": { "type": "string", "description": "Type: seo_audit, growth_idea, data_report, anomaly, task, recommendation, or weekly_report" }, "action_items": { "type": "array", "items": { "type": "string" }, "description": "List of suggested action items" } } }arguments 38 lineslist_my_reports unknown never probed
List your previously submitted reports. Allows reviewing past reports, checking status (new/reviewed/done), and identifying what still needs attention.
{ "type": "object", "properties": { "limit": { "type": "number", "description": "Max results 1-50 (default: 20)" }, "status": { "type": "string", "description": "Filter by status: new, reviewed, done (optional)" } } }arguments 13 linesupdate_report_status unknown never probed
Update report status to 'reviewed' or 'done'. Use 'done' when the action items have been completed. Use 'reviewed' to acknowledge a report.
{ "type": "object", "required": [ "report_id", "status" ], "properties": { "status": { "type": "string", "description": "New status: reviewed or done" }, "report_id": { "type": "string", "description": "UUID of the report" } } }arguments 17 linesdelete_report unknown never probed
Delete a report that is no longer relevant. Use to clean up outdated or irrelevant reports.
{ "type": "object", "required": [ "report_id" ], "properties": { "report_id": { "type": "string", "description": "UUID of the report to delete" } } }arguments 12 linesexport_customers unknown never probed
Export customer data for a specific loyalty program. Returns wallet addresses, voucher stats, balances, and tier info. Use for analytics, segmentation, and personalized offers.
{ "type": "object", "required": [ "token_address" ], "properties": { "token_address": { "type": "string", "description": "Token address of the loyalty program" } } }arguments 12 lineslist_store_discount_codes unknown never probed
List discount codes for this merchant's Shopify store, plus how customers spend points (online code, register voucher, or both).
{ "type": "object", "properties": { "token_address": { "type": "string", "description": "Program address. Omit to list every linked store." } } }arguments 9 linesupdate_store_discount_code unknown never probed
Mark a Shopify discount code used, or cancel it and return the loyalty points. Same actions as the merchant discount-code journal.
{ "type": "object", "required": [ "redemption_id", "action" ], "properties": { "action": { "type": "string", "description": "use or cancel" }, "redemption_id": { "type": "string", "description": "Id from list_store_discount_codes." } } }arguments 17 linesset_store_sales_channel unknown never probed
Set how this store's customers spend loyalty points: online (checkout code), offline (voucher at the register), or both (the shopper chooses).
{ "type": "object", "required": [ "channel" ], "properties": { "channel": { "type": "string", "description": "online, offline, or both" } } }arguments 12 linescreate_gift_certificate unknown never probed
Create a gift / welcome certificate (UDS-style) with a unique random redemption code (LOYAL-XXXX-XXXX-XXXX). Customer redeems via QR or by entering the code; merchant then mints tokens on-chain. Use for welcome bonuses, promo campaigns, partnership gifts.
{ "type": "object", "required": [ "token_address", "usd_amount" ], "properties": { "title": { "type": "string", "description": "Display title (default: 'Gift Certificate')" }, "quantity": { "type": "number", "description": "Number of certificates to create as a batch (1–100, default 1)" }, "image_url": { "type": "string", "description": "Optional public image URL for the cert design" }, "usd_amount": { "type": "number", "description": "Certificate face value in USD (positive)" }, "description": { "type": "string", "description": "Optional descriptive text shown to the customer" }, "token_address": { "type": "string", "description": "ERC-20 loyalty token address (must belong to the agent's merchant)" }, "expires_in_days": { "type": "number", "description": "Validity period in days (omit for no expiry)" }, "points_per_dollar": { "type": "number", "description": "Optional override of program rate (e.g. 10 = 10 tokens per $1). Defaults to program's points_per_dollar." }, "max_redemption_percent": { "type": "number", "description": "Max % of any future purchase the customer can pay with these tokens (5–100). Default 50." } } }arguments 45 lineslist_gift_certificates unknown never probed
List gift certificates issued by the agent's merchant (with status and redemption info).
{ "type": "object", "properties": { "limit": { "type": "number", "description": "Max rows (default 50, max 200)" }, "status": { "type": "string", "description": "Filter by status: active, pending_mint, redeemed, expired, revoked" }, "token_address": { "type": "string", "description": "Filter by program token address (optional)" } } }arguments 17 linesrevoke_gift_certificate unknown never probed
Revoke an active gift certificate (status active → revoked). Only the issuing merchant can revoke. Already-redeemed/minted certificates cannot be revoked.
{ "type": "object", "required": [ "certificate_id" ], "properties": { "certificate_id": { "type": "string", "description": "UUID of the certificate from create_gift_certificate / list_gift_certificates" } } }arguments 12 linesmark_gift_certificate_minted unknown never probed
After the merchant submits the on-chain mint transaction for a claimed gift certificate, call this to mark it as minted (status pending_mint → redeemed) and store the mint tx hash.
{ "type": "object", "required": [ "certificate_id", "transaction_hash" ], "properties": { "certificate_id": { "type": "string", "description": "UUID of the certificate" }, "transaction_hash": { "type": "string", "description": "Base L2 mint transaction hash (0x...)" } } }arguments 17 linesbazaar_discover_resources unknown never probed
Discover third-party x402-paid resources published in Coinbase CDP's Bazaar (docs, data feeds, AI inference, etc). Read-only. Filter by free-text q and/or network (e.g. 'base').
{ "type": "object", "properties": { "q": { "type": "string", "description": "Free-text filter matched against the resource JSON (name/description/url)" }, "limit": { "type": "number", "description": "Max rows returned (default 25, max 100)" }, "cursor": { "type": "string", "description": "Pagination cursor from a previous call" }, "network": { "type": "string", "description": "Filter by network, e.g. 'base' or 'base-sepolia'" } } }arguments 21 linesbazaar_discover_mcp_servers unknown never probed
Discover third-party MCP servers published in Coinbase CDP's Bazaar. Read-only. Filter by free-text q and/or network.
{ "type": "object", "properties": { "q": { "type": "string", "description": "Free-text filter matched against the server JSON" }, "limit": { "type": "number", "description": "Max rows (default 25, max 100)" }, "cursor": { "type": "string", "description": "Pagination cursor" }, "network": { "type": "string", "description": "Filter by network, e.g. 'base'" } } }arguments 21 linesbazaar_pay_and_call unknown never probed
Pay a Loyal Spark x402 URL on api.loyalspark.online with the merchant agent's CDP MPC wallet (EIP-3009 exact scheme, Base USDC). Other hosts are refused before any signature. Requires scope 'mint' and an active CDP wallet. max_usdc default 0.25, hard limit 10.
{ "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "description": "Full https:// URL of the x402 resource" }, "body": { "description": "Optional JSON request body for non-GET methods" }, "method": { "enum": [ "GET", "POST", "PUT", "PATCH", "DELETE" ], "type": "string", "description": "HTTP method (default GET)" }, "headers": { "type": "object", "description": "Extra request headers (Accept/Content-Type auto-set)" }, "max_usdc": { "type": "number", "description": "Spend cap for THIS call in USDC (default 0.25, must be ≤ 10)" }, "allowed_schemes": { "type": "array", "items": { "type": "string" }, "description": "x402 schemes to accept (default ['exact'])" }, "allowed_networks": { "type": "array", "items": { "type": "string" }, "description": "Networks to accept (default ['base'])" } } }arguments 48 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id89f9b6c288552e01.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/89f9b6c288552e01/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/89f9b6c288552e01?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.