Loyal Spark
by aspekt19 · remote · no sign-in to list tools · v1.0.4 · published by GitHub user aspekt19
Base MCP (39 tools) on Base: programs, mint, rewards. lsk_ key; plan limits enforced. /for-agents
42 tools: 3 can delete or cancel things, 4 do something that can't be undone, 22 change things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels3Claude Code: deny: see these tools
- Can't be undone4Claude Code: ask: see these tools
- Changes things22Claude Code: ask: see these tools
- Only reads13Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http loyal-spark https://api.loyalspark.online/loyalty-mcp --header 'x-api-key: <your-x-api-key>'Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
42 tools
Deletes or cancels 3Claude Code: deny
cancel_stale_offersCancel marketplace offers that have been active for more than N days with no completions.No findings
Why it is in this group
- The name "cancel_stale_offers" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel marketplace offers that have been active for more than N days with no completions. Admin-only action tool.
delete_reportDelete a report that is no longer relevant.No findings
Why it is in this group
- The name "delete_report" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a report that is no longer relevant. Use to clean up outdated or irrelevant reports.
revoke_gift_certificateRevoke an active gift certificate (status active → revoked).No findings
Why it is in this group
- The name "revoke_gift_certificate" says "revoke": a word for removing or ending something.
Description, as the server wrote it Revoke an active gift certificate (status active → revoked). Only the issuing merchant can revoke. Already-redeemed/minted certificates cannot be revoked.
Can't be undone 4Claude Code: ask
bazaar_pay_and_callPay a Loyal Spark x402 URL on api.loyalspark.online with the merchant agent's CDP MPC wallet (EIP-3009 exact scheme, Base USDC).No findings
Why it is in this group
- The name "bazaar_pay_and_call" says "pay": a word that usually means money moves, which cannot be taken back.
- The name "bazaar_pay_and_call" also says "call": a word for a change.
Description, as the server wrote it 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.
mint_loyalty_tokensRecord mint intent and get a fee-first `calls[]` bundle: protocol fee mint FIRST, then the recipient mint.No findings
Why it is in this group
- The input addresses people (input.recipient): what it sends cannot be taken back.
Description, as the server wrote it 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.
send_reportSend a report to the developer/owner.No findings
Why it is in this group
- The name "send_report" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
transfer_loyalty_tokensGet calldata to transfer loyalty tokens between walletsNo findings
Why it is in this group
- The name "transfer_loyalty_tokens" says "transfer": a word for a change that another call does not undo.
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it Get calldata to transfer loyalty tokens between wallets
Changes things 22Claude Code: ask
activate_loyalty_programFor legacy ERC-20 programs: returns unpauseUtility + enableMinting calldata.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it For legacy ERC-20 programs: returns unpauseUtility + enableMinting calldata. For B20 programs: no-op (already active).
bazaar_discover_mcp_serversDiscover third-party MCP servers published in Coinbase CDP's Bazaar.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Discover third-party MCP servers published in Coinbase CDP's Bazaar. Read-only. Filter by free-text q and/or network.
bazaar_discover_resourcesDiscover third-party x402-paid resources published in Coinbase CDP's Bazaar (docs, data feeds, AI inference, etc).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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').
check_voucher_statusCheck voucher status by code or ID.No findings
Why it is in this group
- The name "check_voucher_status" says "status": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it Check voucher status by code or ID. Requires a merchant agent key; only vouchers issued by the key owner's store are returned.
confirm_mint_feeConfirm that the protocol fee transaction for a previous mint/earn was broadcast on Base.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
create_gift_certificateCreate a gift / welcome certificate (UDS-style) with a unique random redemption code (LOYAL-XXXX-XXXX-XXXX).No findings
Why it is in this group
- The name "create_gift_certificate" says "create": a word for a change.
Description, as the server wrote it 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.
create_loyalty_programGet factory calldata to deploy a new loyalty token on Base.No findings
Why it is in this group
- The name "create_loyalty_program" says "create": a word for a change.
Description, as the server wrote it 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.
create_personalized_offerCreate a personalized offer for a specific customer.No findings
Why it is in this group
- The name "create_personalized_offer" says "create": a word for a change.
Description, as the server wrote it Create a personalized offer for a specific customer. Use when analytics reveal engagement patterns (e.g., inactive customers, high-value segments).
create_rewardCreate a new reward redeemable with loyalty tokensNo findings
Why it is in this group
- The name "create_reward" says "create": a word for a change.
Description, as the server wrote it Create a new reward redeemable with loyalty tokens
earn_pointsCalculate and mint loyalty tokens based on purchase amount and program's cashback rate.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
export_customersExport customer data for a specific loyalty program.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Export customer data for a specific loyalty program. Returns wallet addresses, voucher stats, balances, and tier info. Use for analytics, segmentation, and personalized offers.
generate_program_defaultsWorkflow planner: field catalog, required parameters, next_actions, and non-binding examples.No findings
Why it is in this group
- The name "generate_program_defaults" says "generate": a word for a change.
Description, as the server wrote it Workflow planner: field catalog, required parameters, next_actions, and non-binding examples. External agents must choose their own name, symbol, and economics.
mark_gift_certificate_mintedAfter 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.No findings
Why it is in this group
- The name "mark_gift_certificate_minted" says "mark": a word for a change.
Description, as the server wrote it 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.
redeem_rewardRedeem a reward by providing a verified token transfer transaction hash.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Redeem a reward by providing a verified token transfer transaction hash. Creates a voucher for the customer.
register_loyalty_programRegister a deployed token as a loyalty program in the database.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Register a deployed token as a loyalty program in the database. B20 tokens are registered as active; legacy ERC-20 as inactive (activate next).
set_store_sales_channelSet how this store's customers spend loyalty points: online (checkout code), offline (voucher at the register), or both (the shopper chooses).No findings
Why it is in this group
- The name "set_store_sales_channel" says "set": a word for a change.
Description, as the server wrote it Set how this store's customers spend loyalty points: online (checkout code), offline (voucher at the register), or both (the shopper chooses).
update_program_configUpdate default cashback_rate and/or points_per_dollar for a program (same as merchant dashboard sliders)No findings
Why it is in this group
- The name "update_program_config" says "update": a word for a change.
Description, as the server wrote it Update default cashback_rate and/or points_per_dollar for a program (same as merchant dashboard sliders)
update_program_statusUpdate program status in database after onchain activation/pauseNo findings
Why it is in this group
- The name "update_program_status" says "update": a word for a change.
Description, as the server wrote it Update program status in database after onchain activation/pause
update_report_statusUpdate report status to 'reviewed' or 'done'.No findings
Why it is in this group
- The name "update_report_status" says "update": a word for a change.
Description, as the server wrote it Update report status to 'reviewed' or 'done'. Use 'done' when the action items have been completed. Use 'reviewed' to acknowledge a report.
update_reward_statusActivate or deactivate a reward in the catalog.No findings
Why it is in this group
- The name "update_reward_status" says "update": a word for a change.
Description, as the server wrote it Activate or deactivate a reward in the catalog. Use to manage reward availability based on analytics.
update_store_discount_codeMark a Shopify discount code used, or cancel it and return the loyalty points.No findings
Why it is in this group
- The name "update_store_discount_code" says "update": a word for a change.
Description, as the server wrote it Mark a Shopify discount code used, or cancel it and return the loyalty points. Same actions as the merchant discount-code journal.
use_voucherMark a voucher as used (redeemed by customer at merchant).No findings
Why it is in this group
- The description's first verb is "mark": a word for a change.
Description, as the server wrote it Mark a voucher as used (redeemed by customer at merchant). Merchant-only operation.
Only reads 13Claude Code: allow
bazaar_probe_x402GET a candidate x402 URL and, if it responds HTTP 402, return the parsed payment requirements (accepts[]) so the caller can decide whether to pay.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it 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.
get_my_profileGet authenticated agent's profileNo findings
Why it is in this group
- The name "get_my_profile" says "get": a word for reading.
Description, as the server wrote it Get authenticated agent's profile
get_platform_infoGet info about Loyal Spark protocol on Base L2No findings
Why it is in this group
- The name "get_platform_info" says "get": a word for reading.
Description, as the server wrote it Get info about Loyal Spark protocol on Base L2
get_platform_statsGet global platform statistics across all merchants.No findings
Why it is in this group
- The name "get_platform_stats" says "get": a word for reading.
Description, as the server wrote it Get global platform statistics across all merchants. Admin-only: requires agent owned by an admin wallet.
get_program_analyticsGet analytics for your loyalty programsNo findings
Why it is in this group
- The name "get_program_analytics" says "get": a word for reading.
Description, as the server wrote it Get analytics for your loyalty programs
get_program_workflow_statusExplain the next merchant action: current_step, required fields, and ordered next_actions (you provide all parameter values)No findings
Why it is in this group
- The name "get_program_workflow_status" says "get": a word for reading.
Description, as the server wrote it Explain the next merchant action: current_step, required fields, and ordered next_actions (you provide all parameter values)
get_token_balanceGet loyalty token balance and tier info for a customerNo findings
Why it is in this group
- The name "get_token_balance" says "get": a word for reading.
Description, as the server wrote it Get loyalty token balance and tier info for a customer
list_gift_certificatesList gift certificates issued by the agent's merchant (with status and redemption info).No findings
Why it is in this group
- The name "list_gift_certificates" says "list": a word for reading.
Description, as the server wrote it List gift certificates issued by the agent's merchant (with status and redemption info).
list_loyalty_programsList loyalty programs owned by the agent's merchantNo findings
Why it is in this group
- The name "list_loyalty_programs" says "list": a word for reading.
Description, as the server wrote it List loyalty programs owned by the agent's merchant
list_marketplace_offersList active token trading offers on the marketplaceNo findings
Why it is in this group
- The name "list_marketplace_offers" says "list": a word for reading.
Description, as the server wrote it List active token trading offers on the marketplace
list_my_reportsList your previously submitted reports.No findings
Why it is in this group
- The name "list_my_reports" says "list": a word for reading.
Description, as the server wrote it List your previously submitted reports. Allows reviewing past reports, checking status (new/reviewed/done), and identifying what still needs attention.
list_rewardsList rewards for a loyalty program by token_address.No findings
Why it is in this group
- The name "list_rewards" says "list": a word for reading.
Description, as the server wrote it List rewards for a loyalty program by token_address. Includes redemption metrics (total vouchers issued, redeemed, and last-30-day counts) for each reward.
list_store_discount_codesList discount codes for this merchant's Shopify store, plus how customers spend points (online code, register voucher, or both).No findings
Why it is in this group
- The name "list_store_discount_codes" says "list": a word for reading.
Description, as the server wrote it List discount codes for this merchant's Shopify store, plus how customers spend points (online code, register voucher, or both).
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.4. Values in angle brackets are yours to fill in.
claude mcp add --transport http loyal-spark https://api.loyalspark.online/loyalty-mcp --header 'x-api-key: <your-x-api-key>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__loyal-spark__get_platform_info",
"mcp__loyal-spark__get_my_profile",
"mcp__loyal-spark__get_program_workflow_status",
"mcp__loyal-spark__list_loyalty_programs",
"mcp__loyal-spark__list_rewards",
"mcp__loyal-spark__get_token_balance",
"mcp__loyal-spark__get_program_analytics",
"mcp__loyal-spark__list_marketplace_offers",
"mcp__loyal-spark__get_platform_stats",
"mcp__loyal-spark__list_my_reports",
"mcp__loyal-spark__list_store_discount_codes",
"mcp__loyal-spark__list_gift_certificates",
"mcp__loyal-spark__bazaar_probe_x402"
],
"ask": [
"mcp__loyal-spark__generate_program_defaults",
"mcp__loyal-spark__create_loyalty_program",
"mcp__loyal-spark__register_loyalty_program",
"mcp__loyal-spark__activate_loyalty_program",
"mcp__loyal-spark__update_program_status",
"mcp__loyal-spark__update_program_config",
"mcp__loyal-spark__create_reward",
"mcp__loyal-spark__mint_loyalty_tokens",
"mcp__loyal-spark__transfer_loyalty_tokens",
"mcp__loyal-spark__earn_points",
"mcp__loyal-spark__confirm_mint_fee",
"mcp__loyal-spark__redeem_reward",
"mcp__loyal-spark__use_voucher",
"mcp__loyal-spark__check_voucher_status",
"mcp__loyal-spark__create_personalized_offer",
"mcp__loyal-spark__update_reward_status",
"mcp__loyal-spark__send_report",
"mcp__loyal-spark__update_report_status",
"mcp__loyal-spark__export_customers",
"mcp__loyal-spark__update_store_discount_code",
"mcp__loyal-spark__set_store_sales_channel",
"mcp__loyal-spark__create_gift_certificate",
"mcp__loyal-spark__mark_gift_certificate_minted",
"mcp__loyal-spark__bazaar_discover_resources",
"mcp__loyal-spark__bazaar_discover_mcp_servers",
"mcp__loyal-spark__bazaar_pay_and_call"
],
"deny": [
"mcp__loyal-spark__cancel_stale_offers",
"mcp__loyal-spark__delete_report",
"mcp__loyal-spark__revoke_gift_certificate"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as loyal-spark. Review it before you use it.
