Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

SpellBook Finance

REMOTE · API.SPELLBOOK-FINANCE.COM · SCANNED SEP 28

Magic: The Gathering card prices, movers, arbitrage, sealed box EV, and seller inventory tools.

66 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability85
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 21414 tokens (~131/item across 163 items; 100 tools + 63 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management8
  • Stability check failed: schema churn in the 3 days we've observed: 1 tool removals, 0 breaking changes, 0 auth/transport breaks, 36 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 102 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the SpellBook Finance MCP server?

SpellBook Finance is a hosted endpoint at https://api.spellbook-finance.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.spellbook-finance.com

# add to Claude Code
claude mcp add --transport http com-spellbook-finance-mcp 'https://api.spellbook-finance.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-spellbook-finance-mcp": {
      "url": "https://api.spellbook-finance.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-spellbook-finance-mcp": {
      "type": "http",
      "url": "https://api.spellbook-finance.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-spellbook-finance-mcp]
url = "https://api.spellbook-finance.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-spellbook-finance-mcp": {
      "type": "remote",
      "url": "https://api.spellbook-finance.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-spellbook-finance-mcp --url 'https://api.spellbook-finance.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-spellbook-finance-mcp:
    url: "https://api.spellbook-finance.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-spellbook-finance-mcp": {
      "Transport": "http",
      "Url": "https://api.spellbook-finance.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add com-spellbook-finance-mcp -t streamable-http -u 'https://api.spellbook-finance.com/mcp'
// mcp.json
{
  "mcpServers": {
    "com-spellbook-finance-mcp": {
      "type": "http",
      "url": "https://api.spellbook-finance.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Sept 26 +1
    • A breaking change shipped without a version bump: still 0.1.0 ▼ security
    • New tool “spellbook_sealed_portfolio_open”, which the server declares destructive security
    • Tool “spellbook_japan_source_scan” rewrote its description, which is the text the model reads security
    • Tool “spellbook_printings_search” rewrote its description, which is the text the model reads security
    • Tool “spellbook_sealed_listing_pause” rewrote its description, which is the text the model reads security
    • Tool “spellbook_sealed_listing_preview” rewrote its description, which is the text the model reads security
    • Tool “spellbook_sealed_listing_submit” rewrote its description, which is the text the model reads security
    • Tool “spellbook_sealed_portfolio” rewrote its description, which is the text the model reads security
    • “spellbook_sealed_listing_submit” added a required parameter “expectedAskUsd”, so existing callers break ▼ functional
    • New resource “japanese-pokemon-sealed-box-shapes” functional
    • New resource “japanese-pokemon-single-language-prices” functional
    • New resource “mercari-japan-pokemon-landed-costs” functional
    • New tool “spellbook_sealed_recovered_component_record” functional
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “cohortId” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “importChargesUsd” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “importDutyRate” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “inboundShippingUsd” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “otherAcquisitionUsd” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “otherSellingUsd” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “outboundShippingUsd” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “proxyFeeUsd” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “sellingFeeRate” cosmetic
    • “spellbook_pokemon_arbitrage_spreads” added an optional parameter “sellingFixedFeeUsd” cosmetic
    • “spellbook_printings_search” added an optional parameter “language” cosmetic
    • “spellbook_sealed_listing_pause” added an optional parameter “channel” cosmetic
    • “spellbook_sealed_listing_preview” added an optional parameter “channel” cosmetic
    • “spellbook_sealed_listing_submit” added an optional parameter “channel” cosmetic
    • “spellbook_japan_source_scan” reworded the description of “cohortId” cosmetic
    • “spellbook_sealed_listing_pause” reworded the description of “idempotencyKey” cosmetic
    • “spellbook_sealed_listing_preview” reworded the description of “takeover” cosmetic
    • “spellbook_sealed_listing_submit” reworded the description of “idempotencyKey” cosmetic
    • “spellbook_sealed_listing_submit” reworded the description of “takeover” cosmetic
    • “spellbook_sealed_portfolio_hold_set” reworded the description of “entryId” cosmetic
  • 26 Sept 26 0
    • New tool “spellbook_sealed_listing_pause”, which the server declares destructive security
    • New tool “spellbook_sealed_listing_submit”, which the server declares destructive security
    • Tool “spellbook_sealed_portfolio” rewrote its description, which is the text the model reads security
    • Tool “spellbook_sealed_product_search” rewrote its description, which is the text the model reads security
    • Schema quality: 15971 → 18801 ▼ functional
    • Stability: unverified → 0.03 ▲ functional
    • New tool “spellbook_card_buylist” functional
    • New tool “spellbook_deck_contents” functional
    • New tool “spellbook_deck_import_limitless” functional
    • New tool “spellbook_experiment_cross_channel” functional
    • New tool “spellbook_experiment_eligibility” functional
    • New tool “spellbook_pokemon_arbitrage_spreads” functional
    • New tool “spellbook_pokemon_ath” functional
    • New tool “spellbook_pokemon_market_analytics” functional
    • New tool “spellbook_pokemon_metagame_archetype” functional
    • New tool “spellbook_pokemon_metagame_card” functional
    • New tool “spellbook_pokemon_metagame_overview” functional
    • New tool “spellbook_sealed_intent_default_set” functional
    • New tool “spellbook_sealed_intent_defaults” functional
    • New tool “spellbook_sealed_listing_preview” functional
    • New tool “spellbook_sealed_portfolio_hold_set” functional
    • New tool “spellbook_sealed_portfolio_open_intent_clear” functional
    • New tool “spellbook_sealed_portfolio_receive” functional
  • 25 Sept 26 65

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 28 Sept 2026 · Probed https://api.spellbook-finance.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.spellbook-finance.com CN=Amazon RSA 2048 M04,O=Amazon,C=US 4 Sept 2026 20 Mar 2027 RSA 2048 SHA256-RSA 8a4cdac2839a106c4a04a281455821c
SANs: api.spellbook-finance.com
CN=Amazon RSA 2048 M04,O=Amazon,C=US (CA) CN=Amazon Root CA 1,O=Amazon,C=US 23 Aug 2022 23 Aug 2030 RSA 2048 SHA256-RSA 773124f2a952e3ed18a58bdb85d1bc0ce5f27
CN=Amazon Root CA 1,O=Amazon,C=US (CA) CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US 25 May 2015 31 Dec 2037 RSA 2048 SHA256-RSA 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.spellbook-finance.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
spellbook-finance.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.spellbook-finance.com/mcp Verified 200
http (plaintext) http://api.spellbook-finance.com/mcp HTTPS enforced
MCP tools · 100 exposed · ~18,207 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
spellbook_pricing_amendment_delete ~84

Delete one saved pricing amendment by exact amendment id and return a deletion readback. This changes saved configuration and does not publish or trigger repricing.

NameTypeReqDescription
amendmentIdstringyesThe exact saved amendment id from a prior amendment read. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_amendment_get ~90

Read one saved pricing amendment's selector, marketplace scope, absolute multiplier, optional protected band, enabled state, priority and timestamps. Use it before an update, preview or delete.

NameTypeReqDescription
amendmentIdstringyesThe exact saved amendment id from a prior amendment read. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_amendment_preview ~123

Start or run a bounded preview for one saved amendment or one seller-selected draft. Returns customer-safe per-channel impact counts and status evidence, with no raw inventory rows or demand telemetry. Preview is not publication.

NameTypeReqDescription
amendmentobject–Draft amendment; provide this or amendmentId.
amendmentIdstring–The exact saved amendment id from a prior amendment read. Required.
channelsarray–Optional marketplace channels to preview.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_amendment_preview_status ~98

Read one pricing amendment preview job's bounded status and per-channel customer impacts. It returns counts, quantities, delta totals, timestamps, missing evidence and limitations. It never publishes or reprices.

NameTypeReqDescription
jobIdstringyesThe preview job id returned by spellbook_pricing_amendment_preview. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_amendment_update ~167

Update selected fields on one saved pricing amendment and return saved readback. Omitted fields preserve existing values, including server-owned demand behavior. The update does not publish or trigger repricing.

NameTypeReqDescription
amendmentIdstringyesThe exact saved amendment id from a prior amendment read. Required.
enabledboolean–Replacement enabled state.
marketplaceScope––Replacement marketplace scope.
modeobject–Replacement absolute multiplier and optional protected band.
namestring–Replacement seller-selected name.
notes––Replacement notes; null clears notes.
priorityinteger–Replacement precedence priority.
selectorobject–Replacement bounded selector.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_amendments_list ~114

List bounded seller pricing amendments with selector, marketplace scope, absolute multiplier, protected band, enabled state, priority and timestamps. It returns a cursor plus missing evidence and limitations.

NameTypeReqDescription
cursorstring–Opaque cursor from a prior list response. Omit for the first page.
limitinteger–Maximum amendments to return, 1 to 100. Omit for 50.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_decision_explain ~165

Read one seller listing's recorded pricing evidence for one marketplace. Returns the last recorded ask, market anchor, safe price effect, decision timestamps and whether the evidence is observed, recorded, projected or missing. Call this when a seller asks what price was saved or what evidence supports it, then use the seller controls tools when they want to inspect or change a setting. It never claims a remote marketplace ask is current without a remote observation timestamp.

NameTypeReqDescription
channelstringyesWhich marketplace listing to explain. Required, because the same copy carries a different ask per channel.
itemIdstringyesThe exact Item id, from a prior spellbook_inventory_items_query. Required.
workspaceIdstringyesThe workspace that owns the listing. Required.

No output schema declared.

No examples provided.

spellbook_pricing_profile_activate ~92

Activate one seller-selected pricing profile and return its saved readback plus resulting active profile id. The first profile remains inactive until this explicit call. Activation does not publish or trigger repricing.

NameTypeReqDescription
profileIdstringyesThe exact saved pricing profile id from a prior pricing profile read. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_profile_create ~151

Create one seller pricing profile from a seller-selected name and explicit baseline multiplier and floor, with optional dollar offset and ordinary channel overrides. Returns saved profile and pin readback. It does not activate, publish or reprice.

NameTypeReqDescription
channelOverridesobject–Seller-approved overrides by marketplace channel. Omit when none are needed.
floornumberyesExplicit baseline floor in USD. Required.
marketOffsetUsdnumber–Optional baseline dollar adjustment.
multnumberyesExplicit baseline market multiplier. Required.
namestringyesSeller-selected profile name. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_profile_get ~94

Read one seller pricing profile's approved multiplier, floor, dollar offset, ordinary value bands and channel overrides, then report its active state and channel pin facts. Call it before an update or activation.

NameTypeReqDescription
profileIdstringyesThe exact saved pricing profile id from a prior pricing profile read. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_profile_update ~159

Update selected seller-approved fields on one pricing profile and return saved profile and pin readback. Omitted fields stay unchanged. Null clears only a selected channel override field.

NameTypeReqDescription
channelOverridesobject–Selected per-channel overrides; omit to preserve all, null to clear one channel entry.
floornumber–Replacement baseline floor in USD.
marketOffsetUsdnumber–Replacement baseline dollar adjustment.
multnumber–Replacement baseline multiplier.
namestring–Replacement seller-selected profile name.
profileIdstringyesThe exact saved pricing profile id from a prior pricing profile read. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_pricing_profiles_list ~68

List seller-created pricing profiles by name and active state, plus the resulting active profile id. Call it before choosing a profile for detail, update, activation or channel pinning.

NameTypeReqDescription
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_printings_search ~235

Find an exact card printing before recording a physical copy or forming a price. Searches by name, and narrows with `set:<code>` plus a collector number in the same query string, for example "Pikachu set:sv2a 025/165". Pokemon searches can filter English or Japanese catalog rows. Returns each printing with its product identity, game, language, set code, collector number, rarity and available finishes. Read this first, because a card name alone does not identify a printing, and a wrong printing values the wrong card.

NameTypeReqDescription
gamestring–Restrict the search to one game. Omit to search Magic, the default.
languagestring–Restrict Pokemon results to English or Japanese catalog rows. Omit when language is unknown.
pageinteger–Page number of results, 1 to 20. Omit for the first page.
qstringyesCard name to search, optionally narrowed with `set:<code>` plus a collector number in the same string, e.g. "sol ring set:c21 263". Required.

No output schema declared.

No examples provided.

spellbook_pull_work ~216

Read a page of SpellBook's current fulfillment work, grouped by marketplace order. Each order carries its tray slot and card lines with bin, printing, condition, and state, including blocked reasons and ship-by evidence when available. Use when a seller asks what to pull or pack. Read spellbook_skill for fulfilling-orders before coaching the workflow; follow nextCursor until hasMore is false before summarizing the full returned workset. Use pending lines for the shared bin walk, then verify and pack each order separately.

NameTypeReqDescription
cursorstring–Opaque nextCursor from the previous page. Pass it unchanged to continue; omit for the first page.
limitinteger–Maximum complete order groups to return on this page, from 1 to 50. Omit for 20.
marketplacestring–Filter to one marketplace, or use all for the combined bin walk. Omit for all.
workspaceIdstringyesThe seller-owned workspace to read, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_purchase_incoming_record ~300

Record single cards the customer bought on a marketplace that have not arrived yet, one row per exact printing with the quantity and the price paid per copy. Each copy is written as pending receipt under one order, so it counts as incoming and cannot be listed or sold until it is received. Returns the order's acquisitionSource, the copy count, the total cost and the bins the copies will go into. Use it right after the customer completes a marketplace checkout for singles found through spellbook_buy_targets or spellbook_singles_buylist_spreads. It never buys anything and moves no money. A card already in hand goes through spellbook_inventory_bin_ensure instead. When the package arrives, call spellbook_inventory_incoming_receive with the returned acquisitionSource.

NameTypeReqDescription
marketplacestringyesWhere the order was placed. Required. Use other for any marketplace not listed.
orderRefstringyesThe marketplace's order number from the checkout confirmation. Required. The same order number groups every copy for receiving.
rowsarrayyesThe order's lines, one per exact printing, condition and finish. Required, at least one.
sellerNamestring–The seller's store name on the marketplace, when the checkout shows one. Shown beside the order in the incoming list.
workspaceIdstringyesThe workspace that bought the cards, from spellbook_workspaces_list. Required; writes only to this workspace.

No output schema declared.

No examples provided.

spellbook_return_address ~78

Read the signed-in seller's saved return address: the name, street line, and city-state-ZIP line SpellBook prints on shipping labels, plus the other settings stored beside it. profile is null when the seller never saved one. Read it before spellbook_return_address_save, so the agent can show the seller what is on file.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

spellbook_return_address_save ~244

Save the return address the seller gave, which SpellBook prints on shipping labels and which store setup counts as returnAddressSaved. It replaces only the name, street, and city-state-ZIP lines and keeps every other saved setting. Only the workspace owner may call it, and only with an address the seller stated. A seller who does not want to share a home address in chat can type it on a SpellBook page, which the limits name, so offer that page before you ask for the address. Call spellbook_store_setup_status afterwards to confirm returnAddressSaved.

NameTypeReqDescription
cityStateZipstringyesOne line with city, state, and ZIP code, such as Springfield, IL 62701, exactly as the seller gave it. Required.
namestringyesThe name on the return address, such as the seller's name or store name, exactly as the seller gave it. Required.
streetstringyesOne street line, such as a house number and street, exactly as the seller gave it. Required.
workspaceIdstringyesThe workspace whose setup this address completes. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_riftbound_japanese_comparables ~124

Read physical Japanese-language Riftbound observations, separate from English cards sold in Japan. Returns exact SKU language, finish, condition, price kind, source links, actual price capture timestamps, freshness policy, per-source eligible denominators and nullable acceptance rates. ManaPool is unsupported_game. Distinguishes unavailable, stale, completed eligible zero and accepted evidence. TCG Market is a provider statistic, not a completed sale or guaranteed resale proceeds. asOf is query time. An empty result never implies a market price of zero or proves market-wide coverage.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

spellbook_sale_record ~478

Record a sale of cards the seller's workspace holds that happened outside SpellBook's order intake, such as a local game store buy, an in-person trade, or a one-off marketplace sale SpellBook did not import. Names the exact printing, finish, condition, quantity and unit sale price. It marks that many copies sold, oldest first, closes the position so spellbook_inventory_holdings and spellbook_buy_outcome_report reflect it, and pulls those copies off every marketplace where they are still live. Returns the sold item ids and the holding after the sale.

NameTypeReqDescription
binIdstring–Sell only copies from this bin. Omit to take the oldest copies from any bin.
buyerNamestring–The buyer's name as the customer stated it. Optional.
conditionstringyesThe condition of the sold copies, matching how they were recorded. Required.
finishstringyesThe finish of the sold copies, matching the finish recorded in inventory. Pokemon supports nf (Normal/Unlimited), fo (Holofoil), rh (Reverse Holofoil), 1e (1st Edition) and 1e-fo (1st Edition Holofoi…
marketplacestringyesWhere the sale happened. in_person covers a store buy or a trade. Required.
notestring–A free-text note stored with the sale. Optional.
occurredAtstring–When the sale happened, as an ISO-8601 timestamp. Omit to use the time of this call.
orderIdstringyesA stable reference for this sale, such as the buyer's order number or a receipt number. Required. A second call with the same orderId for the same printing, finish and condition returns the first sal…
productIdstringyesThe exact printing id, from spellbook_printings_search or spellbook_inventory_holdings. Required; a wrong id sells the wrong card.
qtyintegeryesHow many copies sold. Required.
salePricePerUnitnumberyesPrice received PER COPY in USD, before any fee. Not the order total. Required.
workspaceIdstringyesThe workspace that held the sold copies, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_sealed_deal_board ~175

Read today's Sealed Deal Board rows with their age stamps, so you can answer "what is new since <date>" without diffing the whole board yourself. Each row carries firstSeenAt (the day the board first carried that product), firstSeenBasis, priceBeatenAt with priceBeatenFromUsd (the day its cheapest price fell at least 5% and at least $10 under its own trailing 30-day low), and recencyEventAt, which is the later of the two. Optionally filter to one game; omit game to include every available game. Filter and compare these yourself; this returns facts and ranks nothing by recency.

NameTypeReqDescription
gamestring–Restrict rows to one game: mtg, riftbound or pokemon. Omit to include all games.

No output schema declared.

No examples provided.

spellbook_sealed_intent_default_set ~138

Set a workspace rule for future extension-captured sealed purchases. An exact game and productType wins over wildcard rules. Read spellbook_sealed_intent_defaults before and after; existing units keep their current marks.

NameTypeReqDescription
gamestringyesThe game to match, or * for every game. Required.
intentstringyesThe capture intent: open or hold. This does not physically open or list stock. Required.
productTypestringyesThe sealed product type to match, or * for every type. Required.
workspaceIdstringyesThe workspace whose rule to set. Required.

No output schema declared.

No examples provided.

spellbook_sealed_intent_defaults ~74

Read a workspace's future sealed-purchase open or hold defaults. Call this before changing how extension-captured products are classified. These rows affect future captures only; spellbook_sealed_portfolio reports marks already on physical units.

NameTypeReqDescription
workspaceIdstringyesThe workspace whose defaults to read. Required.

No output schema declared.

No examples provided.

spellbook_sealed_listing_pause ~238

Remove one SpellBook-managed sealed listing from ManaPool or set its TCGplayer quantity to zero through the paired browser. Call spellbook_sealed_listing_preview first and pass its channel and intentRevision unchanged. A product with no saved SpellBook intent cannot be removed by this tool.

NameTypeReqDescription
boxIdstringyesThe exact TCGplayer sealed product id from the portfolio row. Required.
channelstring–Marketplace whose managed listing should be removed. Defaults to manapool.
expectedIntentRevisionintegeryesThe non-null intentRevision from a fresh spellbook_sealed_listing_preview. Required.
gamestring–The product game. Defaults to mtg.
idempotencyKeystringyesA unique request key for this removal, such as a new UUID. If the result is uncertain, preview current state before deciding on another pause. Required.
kindstringyesThe sealed kind from the same portfolio row. Required.
languagestring–The product language code. Defaults to EN.
workspaceIdstringyesThe workspace that owns the listing. Required.

No output schema declared.

No examples provided.

spellbook_sealed_listing_preview ~349

Preview one sealed listing on ManaPool or TCGplayer without publishing. Returns the proposed quantity and ask, any current offer, TCG publisher readback state, stock and intent revisions, and blockers. For TCGplayer, the first call may queue an exact seller-grid SKU read; call again after the paired extension finishes. After submitting, call preview again: publisher.state live confirms an offer, and removed confirms a zero-quantity removal. Pass this preview's channel, ask, and revisions to spellbook_sealed_listing_submit.

NameTypeReqDescription
boxIdstringyesThe TCGplayer product id of the sealed product, the boxId on a spellbook_sealed_portfolio row. Required.
capinteger–The most units to offer at once. Omit to offer every eligible unit.
channelstring–Marketplace to preview. Defaults to manapool.
fixedPriceUsdnumber–A fixed ask in USD for every unit. Omit to list at the product's current market price.
gamestring–The game of the product. Defaults to mtg.
kindstringyesThe sealed kind, the kind on the same spellbook_sealed_portfolio row. Required, because units are counted by kind and boxId together.
languagestring–The product language code, such as EN or JA. Defaults to EN.
takeoverboolean–True adopts a listing on the selected marketplace that SpellBook did not create. Defaults to false; pass true only after the person agrees.
workspaceIdstringyesThe workspace that holds the sealed units, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_sealed_listing_submit ~449

Submit one sealed product listing to ManaPool or TCGplayer at the exact quantity and ask shown by spellbook_sealed_listing_preview. Pass the same channel and product arguments, plus proposed.stockRevision, proposed.askUsd, and intentRevision unchanged. ManaPool submits directly. TCGplayer queues the paired browser writer. A queued TCG write is pending until an exact seller-grid readback confirms it.

NameTypeReqDescription
boxIdstringyesThe TCGplayer product id of the sealed product, the boxId on a spellbook_sealed_portfolio row. Required.
capinteger–The most units to offer at once. Omit to offer every eligible unit.
channelstring–Marketplace to submit to. Must match the preview. Defaults to manapool.
expectedAskUsdnumberyesproposed.askUsd from the preview. Required; a different value means the market ask changed and the call is refused.
expectedIntentRevision––intentRevision from the preview. Pass it unchanged, null included.
expectedStockRevisionintegeryesproposed.stockRevision from the preview. Required; a different value means stock moved and the call is refused.
fixedPriceUsdnumber–A fixed ask in USD for every unit. Omit to list at the product's current market price.
gamestring–The game of the product. Defaults to mtg.
idempotencyKeystringyesA unique request key for this publish attempt, such as a new UUID. If the result is uncertain, preview current state before deciding on another submit. Required.
kindstringyesThe sealed kind, the kind on the same spellbook_sealed_portfolio row. Required, because units are counted by kind and boxId together.
languagestring–The product language code, such as EN or JA. Defaults to EN.
takeoverboolean–True adopts a listing on the selected marketplace that SpellBook did not create. Defaults to false; pass true only after the person agrees.
workspaceIdstringyesThe workspace that holds the sealed units, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_sealed_portfolio ~124

Read a seller's sealed boxes, packs and cases, with quantity, cost basis, market price, heldQuantity, openIntentQuantity, acquisitionSource and workspaceId for each purchase entry. Call this to reconcile physical sealed stock before listing or opening it. Recovered components can have unknown allocated cost basis and an approximate recovery date. A hold differs from an actual opening; call spellbook_sealed_portfolio_hold_set to correct a holding mark.

NameTypeReqDescription
workspaceIdstringyesThe workspace whose sealed positions to read, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_sealed_portfolio_hold_set ~134

Mark every still-sealed unit in one purchase entry as a long-term hold, or release that hold. A hold keeps physical inventory and market value but excludes those units from sealed listing. Read spellbook_sealed_portfolio before and after to check heldQuantity.

NameTypeReqDescription
entryIdstringyesThe exact purchase entryId from spellbook_sealed_portfolio, including the SEALED# prefix when present. Required.
holdbooleanyesTrue excludes live units from listing; false makes them eligible again. Required.
workspaceIdstringyesThe workspace that owns the entry. Required.

No output schema declared.

No examples provided.

spellbook_sealed_portfolio_open ~139

Record that an exact quantity of sealed boxes or packs has already been physically opened. Use the entryId from spellbook_sealed_portfolio and read the returned counts; the same entryId and quantity safely replay after a timeout. The historical opening date stays unknown, and recordedAt means when SpellBook recorded the status. No singles are created.

NameTypeReqDescription
entryIdstringyesThe exact sealed purchase entryId from spellbook_sealed_portfolio. Required.
quantityintegeryesExact count of units already opened from this entry. Required.
workspaceIdstringyesThe workspace that owns the sealed entry. Required.

No output schema declared.

No examples provided.

spellbook_sealed_portfolio_open_intent_clear ~106

Clear the plan to open every still-sealed unit in one purchase entry. Call this when spellbook_sealed_portfolio shows openIntentQuantity for stock the seller intends to keep sealed; then read the portfolio again. This preserves the units and any holding mark.

NameTypeReqDescription
entryIdstringyesThe exact purchase entryId from spellbook_sealed_portfolio. Required.
workspaceIdstringyesThe workspace that owns the entry. Required.

No output schema declared.

No examples provided.

spellbook_sealed_portfolio_receive ~102

Mark one incoming sealed display purchase entry as physically received after the seller confirms its arrival. Call spellbook_sealed_portfolio first to identify the incoming entry, then read it again to confirm owned status. This preserves its holding mark and opening plan.

NameTypeReqDescription
entryIdstringyesThe exact incoming display entryId from spellbook_sealed_portfolio. Required.
workspaceIdstringyesThe workspace that owns the incoming entry. Required.

No output schema declared.

No examples provided.

spellbook_sealed_portfolio_record ~302

Record one sealed acquisition the customer has already made, so the buy can be scored later against what it cost. Names the catalog boxId, the quantity, the unit price paid as a decimal string, and the acquisition date. Use it after a seller buys a box, pack or case found through spellbook_sealed_deal_board. It records a purchase that happened; it never buys anything and moves no money.

NameTypeReqDescription
acquisitionChannelstring–Where the product was bought, such as a store name or marketplace. Optional, and it is stored as the customer stated it.
acquisitionDatestringyesThe date the buy happened, as YYYY-MM-DD. Required, and it sets which day's modeled EV the purchase is scored against.
acquisitionPricestringyesPrice paid PER UNIT in USD, as a decimal string such as "114.99". Not the order total. Required.
boxIdstringyesExact sealed catalog product id, from spellbook_sealed_product_search or spellbook_sealed_deal_board. An id the catalog does not hold is refused. Required.
quantityintegeryesHow many units of this product were bought. Required.
salesTaxUsdstring–Sales tax paid on the whole order in USD, as a decimal string. Optional.
workspaceIdstringyesThe workspace to record this sealed buy in, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_sealed_product_offers ~144

Inspect one exact TCG product ID's sealed offers and their source times. Each offer includes the exact store listing, its local price, the crawl's actionability observation, and the selected exit comparable with its evidence date. Checkout shipping, tax, and available quantity are explicitly unknown until checked with the store. Opening EV is not intact resale value. Empty title or null computedAt can mean missing snapshot.

NameTypeReqDescription
regionstring–Restrict retail references to one currency region: US, CA or All. Omit for all.
tcgProductIdstringyesExact TCGplayer product id for this sealed product, digits only. Required.

No output schema declared.

No examples provided.

spellbook_sealed_product_search ~322

Search sealed catalog identity and available offer records by a third-party listing's name, set and product type. catalogMatches covers boxes, packs and cases, returning exact product IDs, kind, physicalLanguage, form, contentsState, intact marketPrice with marketPriceObservedAt, and coverage (priceState, modelState, evState, totalEv, missingInput) independently of EV or offer availability. products returns deal rows with modeled totalEV and offer evidence when supported. Call spellbook_sealed_product_offers with a deal row's tcgProductId for retail references, available sold comparables and freshness. Public or entitled response is chosen by the backend; teaser and gating fields limit deal coverage.

NameTypeReqDescription
cursorstring–Opaque cursor from a previous page, passed back unchanged. Omit to start from the first page.
gamestring–Restrict results to one game: mtg, riftbound or pokemon. Omit for a mixed-game search.
limitinteger–Maximum rows to return, 1 to 100. Omit for the default of 20.
productTypestring–Exact sealed product type to filter to. Omit to include every type.
qstring–Free-text product name search. Omit to browse without a name filter.
regionstring–Restrict results to one currency region: US, CA or All. Omit for all.
storestring–Exact store name to filter to. Omit to include every store.

No output schema declared.

No examples provided.

spellbook_sealed_recovered_component_record ~243

Record sealed packs recovered from already-opened products, without adding a new purchase or guessing their share of the parent product's cost. This bounded intake accepts the confirmed Aetherdrift Box Topper and Modern Horizons 3 Collector Booster Sample Pack products. It records zero incremental cash, keeps parent basis unallocated, marks recovery timing approximate, and returns persisted-row readback. Reuse requestId unchanged after a timeout.

NameTypeReqDescription
holdbooleanyesTrue marks these units as held from listing; false leaves them unheld. Required.
productIdstringyesExact TCG sealed pack product id: 618698 for Aetherdrift Box Topper, or 579917 for Modern Horizons 3 Collector Booster Sample Pack. Required.
quantityintegeryesHow many recovered units to record: up to 11 for product 618698, or exactly 1 for product 579917. Required.
requestIdstringyesStable idempotency key for this recovery entry. Reuse this exact value to retry. Required.
workspaceIdstringyesThe workspace to add recovered sealed components to. Required.

No output schema declared.

No examples provided.

spellbook_seller_plan_checkout_link ~171

Get a Stripe checkout page for a seller-chosen Store plan on one workspace. Read spellbook_workspace_plan_status first. Skip checkout when sellerToolsUnlocked comes from an active Store plan, person-level Pro, or admin access. When freeSellerCap.sellerSource is free_cap, offer paid Store access only if the seller chooses it to bypass the free active-unit cap. Give the returned URL to the seller to enter payment details at Stripe, then re-read plan status to observe its stored state; that status cannot prove payment settled. It refuses a workspace whose plan is already active.

NameTypeReqDescription
intervalstringyesThe billing interval the seller chose: monthly or annual. Required.
workspaceIdstringyesThe workspace the Store plan is for. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_singles_buylist_spreads ~346

Investigate Magic TCGplayer NM acquisitions against Card Kingdom buylist payout scenarios. Preserve source timestamps, finish, stock, grading scenarios, and queue degradation; spread is not net realized profit.

NameTypeReqDescription
cursorstring–Opaque cursor from a previous page, passed back unchanged. Omit to start from the first page.
isFoilboolean–True restricts to foil rows, false to non-foil. Omit to include both.
limitinteger–Maximum rows to return, 1 to 200. Omit for the default of 20.
minCkQtyinteger–Minimum Card Kingdom buylist quantity a row must have. Omit for no floor.
minSpreadPctnumber–Minimum spread percentage a row must have to be returned. Omit for no floor.
minSpreadUsdnumber–Minimum spread in USD a row must have to be returned. Omit for no floor.
minTotalPotentialProfitUsdnumber–Minimum total potential profit in USD a row must have to be returned. Omit for no floor.
minValuenumber–Minimum acquisition value in USD a row must have to be returned. Omit for no floor.
raritystring–Exact rarity to filter to. Omit to include every rarity.
setsstring–Exact set code(s) to filter to. Omit to include every set.
sortBystring–Which field ranks the rows. Omit for the default order.
sortDirstring–Sort direction for sortBy. Omit for the default direction.

No output schema declared.

No examples provided.

spellbook_skill ~150

Read the step-by-step procedure SpellBook Finance wrote for a whole customer task, in full. getting-started takes a new seller from sign-in through supplies, bin labels, a first tracked card, and connected marketplaces. buy-loop covers inspecting buy facts and recording what happened. physical-placement covers moving one item to a bin and verifying it. fulfilling-orders covers where an order lands, the bin walk that finds each sold card, and who packs, labels, and confirms shipped. Read the matching procedure before the first call of that task. Omit name to list every procedure with its title.

NameTypeReqDescription
namestring–The procedure to read in full. Omit to list every procedure with its title.

No output schema declared.

No examples provided.

spellbook_sku_exact_price_lock_clear ~138

Clear one seller SKU's exact-price lock by exact printing, finish and condition. Returns the saved controls readback, so the agent can confirm the lock is null.

NameTypeReqDescription
conditionstringyesThe exact physical condition for the SKU. Required.
finishstringyesThe exact finish for the SKU: nf, fo, etched, surge, rh, 1e or 1e-fo. Required.
scryfallIdstringyesThe exact Scryfall printing id. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_sku_exact_price_lock_set ~166

Set one seller SKU's exact price lock and return its saved readback. Identify the exact printing, finish and condition. The lock scope is all marketplaces and no marketplace publish or repricing is triggered by this tool.

NameTypeReqDescription
conditionstringyesThe exact physical condition for the SKU. Required.
finishstringyesThe exact finish for the SKU: nf, fo, etched, surge, rh, 1e or 1e-fo. Required.
priceUsdnumberyesThe seller-selected exact locked price in USD. Required.
scryfallIdstringyesThe exact Scryfall printing id. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_sku_minimum_floor_clear ~137

Clear one seller SKU's minimum floor by exact printing, finish and condition. Returns the saved controls readback, so the agent can confirm the floor is null.

NameTypeReqDescription
conditionstringyesThe exact physical condition for the SKU. Required.
finishstringyesThe exact finish for the SKU: nf, fo, etched, surge, rh, 1e or 1e-fo. Required.
scryfallIdstringyesThe exact Scryfall printing id. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_sku_minimum_floor_set ~173

Set one seller SKU's minimum sell price and return its saved readback. Identify the exact printing, finish and condition. A floor raises computed prices up to the floor; it does not make an exact ask and does not trigger repricing.

NameTypeReqDescription
conditionstringyesThe exact physical condition for the SKU. Required.
finishstringyesThe exact finish for the SKU: nf, fo, etched, surge, rh, 1e or 1e-fo. Required.
minSellPriceUsdnumberyesThe seller-selected minimum sell price in USD. Required.
scryfallIdstringyesThe exact Scryfall printing id. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_sku_price_controls ~161

Read one seller SKU's exact minimum floor and exact-price lock by Scryfall printing, finish and condition. Returns saved values, update timestamps, the all-marketplaces lock scope, missing evidence and limitations. Call it before changing a floor or lock, then read it again after a write.

NameTypeReqDescription
conditionstringyesThe exact physical condition for the SKU. Required.
finishstringyesThe exact finish for the SKU: nf, fo, etched, surge, rh, 1e or 1e-fo. Required.
scryfallIdstringyesThe exact Scryfall printing id. Required.
workspaceIdstringyesThe workspace the seller selected. The caller must own it. Required.

No output schema declared.

No examples provided.

spellbook_store_setup_status ~166

Read one workspace's store setup facts and the seller-activation projection: which setup facts are true (physical inventory imported, stock confirmed, channel activated, return address saved, first order synced, extension paired, ManaPool connected), the current phase, the single nextAction, and its blockers. It also returns ebayConnected, and each channel's automation mode with a plain meaning sentence in ebayAutomation.meaning and manapoolAutomation.meaning, so an agent can tell the seller which marketplaces are connected and which list cards automatically. Baseline quantity remains marketplace evidence, not physical stock. It applies to any question about where a seller stands in setup, or what remains before their store can sell.

NameTypeReqDescription
workspaceIdstringyesThe workspace to read setup status for. Required.

No output schema declared.

No examples provided.

spellbook_support_report ~222

Store one minimal customer failure report. Generate a fresh ULID submissionId and reuse the exact request for retries within 24 hours. Reports are accepted only after storage. No raw diagnostics, conversations, secrets, or customer identity. Available to authenticated Free customers, including paid-access denials. A report reaches no person.

NameTypeReqDescription
clientVersionstringyesThis client's semantic version, e.g. "1.2.3". Required.
correlationIdstring–A correlation id from a prior response, if one was returned. Omit when none was given.
errorCodestringyesWhich closed error code best matches the failure. Required.
occurredAtstringyesISO-8601 timestamp of when the failure occurred. Required.
operationstringyesWhich SpellBook operation failed. Required, one of the closed operation names.
submissionIdstringyesA fresh ULID for this report. Reuse the exact same value and request body to retry within 24 hours; a new value starts a new report.

No output schema declared.

No examples provided.

spellbook_tcg_extension_pairing ~164

Read whether this workspace has a paired TCGplayer browser extension, and get the SpellBook page where the seller pairs one. TCGplayer has no seller API, so SpellBook syncs TCGplayer listings and orders through a Chrome extension on the seller's own computer. Returns whether the account has extension access, the current session's status, when it was paired, when the extension last checked in, and its order sync state. If session is null or lastSeenAt is null, give the seller pairingPage.guideUrl to install the extension, then pairingPage.url to pair it. Call this tool again after they finish.

NameTypeReqDescription
workspaceIdstringyesThe workspace to read extension pairing for, from spellbook_workspaces_list. Required.

No output schema declared.

No examples provided.

spellbook_tcg_listing_export ~189

Produce the CSV a person uploads to the TCGplayer portal, and mark those copies as listed in SpellBook. Call it only after spellbook_tcg_listing_preview and only once the person has said they will upload the file. Hand them the CSV and tell them plainly that SpellBook now believes these copies are listed, so the upload has to happen.

NameTypeReqDescription
floorPricenumber–Must match the value shown in spellbook_tcg_listing_preview to export the same priced candidates.
marketMultipliernumber–Must match the value shown in spellbook_tcg_listing_preview to export the same priced candidates.
sampleSizeinteger–Must match the value shown in spellbook_tcg_listing_preview to export the same candidate set.
workspaceIdstringyesThe workspace to export a TCGplayer upload CSV for. Required; writes listing records for this workspace.

No output schema declared.

No examples provided.

spellbook_tcg_listing_preview ~214

Show which cards in one workspace would be listed on TCGplayer, and at what price, without changing anything. TCGplayer has no server-side publish, so the real path is a CSV a person uploads to the TCGplayer portal. Call this first and show the person the candidates and the totals, then call spellbook_tcg_listing_export only once they have agreed to upload the file.

NameTypeReqDescription
cursorstring–Opaque cursor from a previous page, passed back unchanged. Omit to start from the first page.
floorPricenumber–A price floor in USD for this preview. Omit to use the workspace's stored floor.
marketMultipliernumber–Price multiplier applied to market price for this preview. Omit to use the workspace's stored pricing.
sampleSizeinteger–Maximum candidate rows to preview. Omit for the default sample size.
workspaceIdstringyesThe workspace to preview a TCGplayer listing run for. Required.

No output schema declared.

No examples provided.

spellbook_workspace_create ~94

Create the signed-in seller's first workspace when spellbook_workspaces_list comes back empty. It makes a workspace the seller owns. A signup Store trial starts only when its flag is on and the free Seller cap is off for this workspace. When the seller already has a workspace, it returns the first one and creates nothing, so a repeated call is safe. It returns workspaceId, name, role, and created.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

spellbook_workspace_plan_status ~161

Read one workspace's Store plan and Seller cap status: tier, stored plan status, trialExpiresAt, sellerToolsUnlocked, and freeSellerCap's scope, observedAt, sellerSource, activeUnitCount, countIsExact, cap, headroom, overCap, enforcementEnabled, claimed, and transitionGraceExpiresAt. A free owner must explicitly choose one workspace with spellbook_free_seller_workspace_claim before free Seller access begins. Read this status again after the claim. For a seller-requested paid Store plan, use spellbook_seller_plan_checkout_link when the stored plan is not active, then re-read this status.

NameTypeReqDescription
workspaceIdstringyesThe workspace to read the plan for. The caller must be a member. Required.

No output schema declared.

No examples provided.

spellbook_workspaces_list ~68

List the authenticated customer's existing workspaces with workspaceId, name, membership role and status. Owner, admin and member roles are preserved. Discover a workspace before selecting it; this read creates no workspace or trial. When the list is empty, spellbook_workspace_create makes the first one.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

Common questions

What is the SpellBook Finance MCP server?

SpellBook Finance is an MCP server listed in the public MCP registry as com.spellbook-finance/mcp. Magic: The Gathering card prices, movers, arbitrage, sealed box EV, and seller inventory tools. This page covers its hosted endpoint (https://api.spellbook-finance.com/mcp).

Is the SpellBook Finance MCP server safe to use?

SpellBook Finance scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the SpellBook Finance MCP server expose?

SpellBook Finance exposes 100 tools: spellbook_guides, spellbook_skill, spellbook_pull_work, spellbook_buy_targets, spellbook_buy_outcome_report, and 95 more. Their descriptions and schemas cost roughly 18,207 tokens of context every time the server is loaded.

Does the SpellBook Finance MCP server require authentication?

No. We connected to SpellBook Finance without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the SpellBook Finance MCP server still maintained?

SpellBook Finance is still listed as active in the MCP registry. We last reached this channel on 28 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.