{"name":"io.github.aspekt19/loyal-spark","slug":"aspekt19-loyal-spark","title":"Loyal Spark","description":"Base MCP (39 tools) on Base: programs, mint, rewards. lsk_ key; plan limits enforced. /for-agents","url":"https://mcp.market/server/aspekt19-loyal-spark","rating":null,"grade":"B","score":84,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":34,"stars":13,"forks":5,"downloads_week":null,"last_push_at":"2026-09-20T03:58:28.000Z","license":"MIT"},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T03:46:08.528Z","last_ok_at":"2026-09-21T03:46:08.528Z","latency_ms":417},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/aspekt19/unboxed-loyalty-spark","website":"https://loyalspark.online/for-agents","version":"1.0.3","remotes":[{"type":"streamable-http","url":"https://api.loyalspark.online/loyalty-mcp","headers":[{"description":"Merchant agent API key (lsk_...). Get at loyalspark.online/for-agents or SIWE.","isRequired":true,"isSecret":true,"name":"x-api-key"},{"description":"Alternative auth: Bearer lsk_... (same key as x-api-key).","isSecret":true,"placeholder":"Bearer lsk_...","name":"Authorization"}]}],"packages":[],"tools":[{"name":"activate_loyalty_program","description":"For legacy ERC-20 programs: returns unpauseUtility + enableMinting calldata. For B20 programs: no-op (already active).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address (0x...)"}},"required":["token_address"]}},{"name":"bazaar_discover_mcp_servers","description":"Discover third-party MCP servers published in Coinbase CDP's Bazaar. Read-only. Filter by free-text q and/or network.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"type":"string","description":"Free-text filter matched against the server JSON"},"network":{"type":"string","description":"Filter by network, e.g. 'base'"},"limit":{"type":"number","description":"Max rows (default 25, max 100)"},"cursor":{"type":"string","description":"Pagination cursor"}}}},{"name":"bazaar_discover_resources","description":"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').","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"type":"string","description":"Free-text filter matched against the resource JSON (name/description/url)"},"network":{"type":"string","description":"Filter by network, e.g. 'base' or 'base-sepolia'"},"limit":{"type":"number","description":"Max rows returned (default 25, max 100)"},"cursor":{"type":"string","description":"Pagination cursor from a previous call"}}}},{"name":"bazaar_pay_and_call","description":"Pay and call any x402-paid HTTPS endpoint using the merchant agent's CDP MPC wallet (EIP-3009 exact scheme on Base USDC). Probes the URL for HTTP 402, picks a compatible requirement, signs TransferWithAuthorization via CDP, retries with X-PAYMENT header, and returns the paid response. Requires scope 'mint' and a pre-created CDP wallet. Safety cap: max_usdc (default 0.25, hard limit 10).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","description":"Full https:// URL of the x402 resource"},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"description":"HTTP method (default GET)"},"body":{"description":"Optional JSON request body for non-GET methods"},"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_networks":{"type":"array","items":{"type":"string"},"description":"Networks to accept (default ['base'])"},"allowed_schemes":{"type":"array","items":{"type":"string"},"description":"x402 schemes to accept (default ['exact'])"}},"required":["url"]}},{"name":"bazaar_probe_x402","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","description":"Full https:// URL of the x402-paid endpoint"}},"required":["url"]}},{"name":"cancel_stale_offers","description":"Cancel marketplace offers that have been active for more than N days with no completions. Admin-only action tool.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"max_age_days":{"type":"number","description":"Cancel offers older than this many days (default: 14)"}}}},{"name":"check_voucher_status","description":"Check voucher status by code or ID. Public endpoint — no API key or authentication required.","write_action":false,"price_micros":0,"input_schema":{"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)"}}}},{"name":"confirm_mint_fee","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"obligation_id":{"type":"string","description":"fee_obligation_id returned by mint_loyalty_tokens or earn_points"},"fee_tx_hash":{"type":"string","description":"Transaction hash of the protocol fee mint"},"recipient_tx_hash":{"type":"string","description":"Optional transaction hash of the recipient mint"}},"required":["obligation_id","fee_tx_hash"]}},{"name":"create_gift_certificate","description":"Create a gift / welcome certificate (UDS-style) with a unique 6-character redemption code (LOYAL-XXXXXX). Customer redeems via QR or by entering the code; merchant then mints tokens on-chain. Use for welcome bonuses, promo campaigns, partnership gifts.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"ERC-20 loyalty token address (must belong to the agent's merchant)"},"usd_amount":{"type":"number","description":"Certificate face value in USD (positive)"},"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."},"title":{"type":"string","description":"Display title (default: 'Gift Certificate')"},"description":{"type":"string","description":"Optional descriptive text shown to the customer"},"expires_in_days":{"type":"number","description":"Validity period in days (omit for no expiry)"},"image_url":{"type":"string","description":"Optional public image URL for the cert design"},"quantity":{"type":"number","description":"Number of certificates to create as a batch (1–100, default 1)"}},"required":["token_address","usd_amount"]}},{"name":"create_loyalty_program","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Program name (required for external agents)"},"symbol":{"type":"string","description":"Token symbol, 2-5 chars (required for external agents)"},"expiration_days":{"type":"number","description":"Program duration in days (default: 365)"},"token_standard":{"type":"string","description":"'b20' (default, single-tx deploy on Base precompile factory) or 'erc20' (legacy factory, requires activate_loyalty_program follow-up)"},"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."},"extra_minters":{"type":"array","items":{"type":"string"},"description":"(B20 only) Extra addresses to grant MINT_ROLE atomically in the same deploy tx."},"auto_generate":{"type":"boolean","description":"Internal automation only — fills missing name/symbol from examples. External agents should pass explicit name and symbol."},"business_context":{"type":"object","description":"Optional context for examples only"},"preferred_style":{"type":"string"},"locale":{"type":"string"},"target_audience":{"type":"string"}}}},{"name":"create_personalized_offer","description":"Create a personalized offer for a specific customer. Use when analytics reveal engagement patterns (e.g., inactive customers, high-value segments).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address"},"customer_address":{"type":"string","description":"Customer wallet address"},"title":{"type":"string","description":"Offer title (e.g., 'Welcome back! 20% bonus tokens')"},"description":{"type":"string","description":"Offer description"},"bonus_tokens":{"type":"number","description":"Bonus tokens to award"},"discount_percentage":{"type":"number","description":"Discount percentage (0-100)"},"valid_days":{"type":"number","description":"How many days the offer is valid (default: 7)"}},"required":["token_address","customer_address","title"]}},{"name":"create_reward","description":"Create a new reward redeemable with loyalty tokens","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address"},"name":{"type":"string","description":"Reward name"},"description":{"type":"string","description":"Reward description"},"cost":{"type":"number","description":"Token cost to redeem"}},"required":["token_address","name","cost"]}},{"name":"delete_report","description":"Delete a report that is no longer relevant. Use to clean up outdated or irrelevant reports.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"report_id":{"type":"string","description":"UUID of the report to delete"}},"required":["report_id"]}},{"name":"earn_points","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address (0x...)"},"customer_address":{"type":"string","description":"Customer wallet (0x...)"},"purchase_amount":{"type":"number","description":"Purchase amount in currency units (e.g. dollars)"},"cashback_rate":{"type":"number","description":"Override cashback rate (%). If omitted, uses the program's default rate."}},"required":["token_address","customer_address","purchase_amount"]}},{"name":"export_customers","description":"Export customer data for a specific loyalty program. Returns wallet addresses, voucher stats, balances, and tier info. Use for analytics, segmentation, and personalized offers.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token address of the loyalty program"}},"required":["token_address"]}},{"name":"generate_program_defaults","description":"Workflow planner: field catalog, required parameters, next_actions, and non-binding examples. External agents must choose their own name, symbol, and economics.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"business_name":{"type":"string"},"category":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"preferred_style":{"type":"string"},"target_audience":{"type":"string"}}}},{"name":"get_my_profile","description":"Get authenticated agent's profile","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_platform_info","description":"Get info about Loyal Spark protocol on Base L2","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_platform_stats","description":"Get global platform statistics across all merchants. Admin-only: requires agent owned by an admin wallet.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_program_analytics","description":"Get analytics for your loyalty programs","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_program_workflow_status","description":"Explain the next merchant action: current_step, required fields, and ordered next_actions (you provide all parameter values)","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Optional token to inspect"}}}},{"name":"get_token_balance","description":"Get loyalty token balance and tier info for a customer","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address"},"customer_address":{"type":"string","description":"Customer wallet"}},"required":["token_address","customer_address"]}},{"name":"list_gift_certificates","description":"List gift certificates issued by the agent's merchant (with status and redemption info).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Filter by program token address (optional)"},"status":{"type":"string","description":"Filter by status: active, pending_mint, redeemed, expired, revoked"},"limit":{"type":"number","description":"Max rows (default 50, max 200)"}}}},{"name":"list_loyalty_programs","description":"List loyalty programs owned by the agent's merchant","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"include_expired":{"type":"boolean","description":"Include expired programs"}}}},{"name":"list_marketplace_offers","description":"List active token trading offers on the marketplace","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"type":"string","description":"Filter: active/completed/cancelled"},"limit":{"type":"number","description":"Max results (1-100)"}}}},{"name":"list_my_reports","description":"List your previously submitted reports. Allows reviewing past reports, checking status (new/reviewed/done), and identifying what still needs attention.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"type":"string","description":"Filter by status: new, reviewed, done (optional)"},"limit":{"type":"number","description":"Max results 1-50 (default: 20)"}}}},{"name":"list_rewards","description":"List rewards for a loyalty program by token_address. Includes redemption metrics (total vouchers issued, redeemed, and last-30-day counts) for each reward.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address (0x...)"}},"required":["token_address"]}},{"name":"mark_gift_certificate_minted","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"certificate_id":{"type":"string","description":"UUID of the certificate"},"transaction_hash":{"type":"string","description":"Base L2 mint transaction hash (0x...)"}},"required":["certificate_id","transaction_hash"]}},{"name":"mint_loyalty_tokens","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address"},"recipient":{"type":"string","description":"Recipient wallet (0x...)"},"amount":{"type":"number","description":"Tokens to mint"}},"required":["token_address","recipient","amount"]}},{"name":"redeem_reward","description":"Redeem a reward by providing a verified token transfer transaction hash. Creates a voucher for the customer.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"}},"required":["reward_id","customer_address","transaction_hash"]}},{"name":"register_loyalty_program","description":"Register a deployed token as a loyalty program in the database. B20 tokens are registered as active; legacy ERC-20 as inactive (activate next).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Program name"},"symbol":{"type":"string","description":"Token symbol"},"token_address":{"type":"string","description":"Deployed token contract address (0x...)"},"expiration_days":{"type":"number","description":"Duration in days (default: 365)"},"cashback_rate":{"type":"number","description":"Default cashback percent for earn (1–100). Omit for DB default (5)."},"points_per_dollar":{"type":"number","description":"Loyalty points per $1 spent (1–1000). Omit for DB default (1)."},"token_standard":{"type":"string","description":"'b20' (default) or 'erc20' (legacy)"}},"required":["name","symbol","token_address"]}},{"name":"revoke_gift_certificate","description":"Revoke an active gift certificate (status active → revoked). Only the issuing merchant can revoke. Already-redeemed/minted certificates cannot be revoked.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"certificate_id":{"type":"string","description":"UUID of the certificate from create_gift_certificate / list_gift_certificates"}},"required":["certificate_id"]}},{"name":"send_report","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"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"},"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"},"action_items":{"type":"array","items":{"type":"string"},"description":"List of suggested action items"}},"required":["agent_role","report_type","title","content"]}},{"name":"transfer_loyalty_tokens","description":"Get calldata to transfer loyalty tokens between wallets","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address (0x...)"},"to":{"type":"string","description":"Recipient wallet (0x...)"},"amount":{"type":"number","description":"Tokens to transfer"}},"required":["token_address","to","amount"]}},{"name":"update_program_config","description":"Update default cashback_rate and/or points_per_dollar for a program (same as merchant dashboard sliders)","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address (0x...)"},"cashback_rate":{"type":"number","description":"New default cashback % for earn (1–100). Omit to leave unchanged."},"points_per_dollar":{"type":"number","description":"New points per $1 (0–1000, exclusive 0). Omit to leave unchanged."}},"required":["token_address"]}},{"name":"update_program_status","description":"Update program status in database after onchain activation/pause","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address"},"status":{"type":"string","description":"New status: active, paused, or inactive"}},"required":["token_address","status"]}},{"name":"update_report_status","description":"Update report status to 'reviewed' or 'done'. Use 'done' when the action items have been completed. Use 'reviewed' to acknowledge a report.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"report_id":{"type":"string","description":"UUID of the report"},"status":{"type":"string","description":"New status: reviewed or done"}},"required":["report_id","status"]}},{"name":"update_reward_status","description":"Activate or deactivate a reward in the catalog. Use to manage reward availability based on analytics.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"reward_id":{"type":"string","description":"UUID of the reward"},"is_active":{"type":"boolean","description":"true to activate, false to deactivate"}},"required":["reward_id","is_active"]}},{"name":"use_voucher","description":"Mark a voucher as used (redeemed by customer at merchant). Merchant-only operation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"voucher_code":{"type":"string","description":"Voucher code (e.g. LOYAL-XXXX-XXXX-XXXX-XXXX)"},"voucher_id":{"type":"string","description":"Voucher UUID (alternative to code)"}}}}],"scan":{"score":84,"grade":"B","scanned_at":"2026-09-20T20:13:06.888Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:13:06.782Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2510ms"]},"poisoning":{"score":15,"max":15,"notes":["39 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://api.loyalspark.online/loyalty-mcp","reachable":true,"authRequired":false,"latencyMs":2510,"serverInfo":{"name":"loyal-spark-mcp","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"aspekt19","repo":"unboxed-loyalty-spark","archived":false,"pushedAt":"2026-09-20T03:58:28Z","stars":13,"forks":5,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/36282486?v=4","ownerCreatedAt":"2018-02-08T22:31:53Z","license":"MIT"},"icon":{"url":"https://loyalspark.online/media-kit/app-icon-1024.png","source":"registry","width":1024,"height":1024},"presence":{"stars":13,"forks":5,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-20T03:58:28.000Z","score":34}}}},"grade_history":[],"reviews":[]}