This MCP server exposes the tools a Base44 app has opted into - its configured entity operations, backend functions, and agents - always as the authenticated app user, with the app's permission model and row-level security enforced. Call tools/list to see what this app exposes.
Discoverability
0 of 6 checks0/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
No matching mcp.json manifest or MCP Server Card was found at the checked URLs.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Who the signed-in Foilwick player is, including membership tier, recent decks, collection_copies (total owned copies), unique_collection_cards (distinct owned cards), and tag vocabulary. Call this first to orient yourself.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Play workflow step 1 of 5: search active decks by name, format, color, or folder, then inspect the selected deck with get_deck. Trashed decks are excluded; use list_trashed_decks for Trash.
Describe the returned information so the agent knows whether it will answer the request.
Inputs17/100
1 of 6 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
folder_id
Folder id from list_folders. Pass an empty string for Unfiled.
Clear enough to supply this argument.
offset
Not provided
Missing description. Explain what this value means and how to supply it.
q
Not provided
Missing description. Explain what this value means and how to supply it.
format
Not provided
Missing description. Explain what this value means and how to supply it.
color
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Play workflow step 2 of 5: inspect a selected deck before start_play_sandbox. Pass either deck_id or deck_name. Returns cards by board with quantities, tags, Oracle text, stats, popularity, price, and whether that price came from the selected printing or cheapest released fallback. Pass fields='brief' for names, quantities, and zones only.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
fields
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Discover Magic cards by name, rules text, color identity, type, mana value, keywords, popularity, and format legality. Results are paginated; use next_offset as offset to continue, then use get_cards for full details.
The description explains the capability, when to use it, and what to expect.
Inputs35/100
6 of 17 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
color_identity
Exact color identity, not a subset filter: UG returns cards whose identity is exactly blue-green and excludes mono-blue or mono-green cards.
Clear enough to supply this argument.
cmc › lte
Not provided
Missing description. Explain what this value means and how to supply it.
cmc › lt
Not provided
Missing description. Explain what this value means and how to supply it.
cmc › gte
Not provided
Missing description. Explain what this value means and how to supply it.
cmc › gt
Not provided
Missing description. Explain what this value means and how to supply it.
offset
Pagination offset, 0–1000; defaults to 0. Use the previous response's next_offset to continue.
Clear enough to supply this argument.
q
Case-insensitive partial card-name search. Also accepts Scryfall tag syntax such as otag:ramp.
Clear enough to supply this argument.
identity_within
Commander-style subset filter. BG returns colorless, mono-black, mono-green, and black-green cards, while excluding identities containing other colors.
Clear enough to supply this argument.
edhrec_rank_lte
Not provided
Missing description. Explain what this value means and how to supply it.
color
Not provided
Missing description. Explain what this value means and how to supply it.
keywords
Not provided
Missing description. Explain what this value means and how to supply it.
format
Not provided
Missing description. Explain what this value means and how to supply it.
supertypes
Not provided
Missing description. Explain what this value means and how to supply it.
sort
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Results per page, 1–48; defaults to 24.
Clear enough to supply this argument.
type
Not provided
Missing description. Explain what this value means and how to supply it.
oracle
Case-insensitive Oracle rules-text search. Every term must match (AND semantics); pass a single-element array to require one phrase.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description68/100
Every printing of a known card with set, collector number, release date, released/preview status, rarity, artist, price, image, and the cheapest released printing.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
name
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Current cheapest released-printing prices for known cards, including the pricing source, printing id, store links, and a running total. Pass either name or names.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
name
Not provided
Missing description. Explain what this value means and how to supply it.
names
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Start a solo playtest for a selected deck after inspecting it with get_deck. Pass either deck_id or deck_name. Returns a live spectator link to share with the player, then continue with perform_play_actions and save_play_replay.
The description explains the capability, when to use it, and what to expect.
Inputs33/100
1 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
seed
Optional deterministic shuffle seed. Reusing it reproduces the opening deal.
Clear enough to supply this argument.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_start_play_sandbox",
"title": "Start Solo Playtest",
"description": "Start a solo playtest for a selected deck after inspecting it with get_deck. Pass either deck_id or deck_name. Returns a live spectator link to share with the player, then continue with perform_play_actions and save_play_replay.",
"inputSchema": {
"type": "object",
"properties": {
"seed": {
"type": "string",
"description": "Optional deterministic shuffle seed. Reusing it reproduces the opening deal."
},
"deck_id": {
"type": "string"
},
"deck_name": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
View the latest table state for an active solo playtest, including stable human-readable card refs, canonical instance IDs, revision number, and available action types.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
sandbox_id
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Continue a manual playtest with composable tabletop primitives. Every returned card has a stable, human-readable ref such as sol_ring_1; any card action accepts either ref or canonical instance id. entered_turn is only an informational 'Entered this turn' marker; determine eligibility manually from continuous control, current card type, Oracle text, haste, effects, blocks, and prevention. For combat, use attack with each battlefield attacker and its damage per copy; Foilwick taps attackers by default and subtracts the declared total from opponent life without enforcing Magic rules. Set an attacker's tap=false for vigilance or similar effects. inspect_library privately observes top or all library cards and must be final in its batch; later batches can reorder, move, reveal, hide, update state, or shuffle those instances. When something changes on the table — a card changes zones, becomes tapped, attacks, gains or loses counters, the turn advances, or either player loses life — the response may include oracle_reminders: printed Oracle text from the cards involved and from other permanents whose text mentions that kind of change, so you re-read the table instead of recalling it from earlier turns. It is a reading aid only — Foilwick resolves nothing, orders nothing, and verifies nothing, and matching is deliberately loose and over-inclusive, so decide yourself what applies and take any follow-up with normal actions. Mana: keep the pool current. Tap a source, then change_mana with a positive delta for each color added, then a negative change_mana for what a cast or ability costs — adds before spends, in one batch. Tapping never adds mana on its own and Foilwick never checks a spend against a card's mana cost, so an unrecorded float is simply wrong bookkeeping rather than an error. Example turn: [{"type":"tap","instance":"forest_1","tapped":true},{"type":"change_mana","color":"G","delta":1},{"type":"tap","instance":"ancient_tomb_1","tapped":true},{"type":"change_mana","color":"C","delta":2},{"type":"play_from_hand","instance":"springheart_nantuko_1"},{"type":"change_mana","color":"G","delta":-1},{"type":"change_mana","color":"C","delta":-1}]. Every compact delta reports the mana pool, even when nothing else about it changed. Returns compact deltas by default; pass top-level fields='full' only for recovery. Finish with save_play_replay.
The description explains the capability, when to use it, and what to expect.
Inputs65/100
36 of 43 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
sandbox_id
Not provided
Missing description. Explain what this value means and how to supply it.
expected_revision
The revision returned by the latest sandbox response.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Omit for a compact delta. Pass full only when an explicit full-state recovery response is needed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › as
copy_card/create_token only: define a batch-local alias beginning with a letter and containing only letters, numbers, or underscores. Reference it later as $alias inside instances.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › count
draw: 1–20. mill: 1–100. create_token: 1–20. copy_card: number of copies, 1–20, defaults to 1. inspect_library with scope top: number of top cards, defaults to 1.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › markers
set_card_state only: replace named manual tabletop markers with JSON values.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › key
change_player_counter only: counter category to adjust.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › offset
inspect_library pagination offset; defaults to 0.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › image_uri
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › entered_turn
set_card_state only: set the informational 'Entered this turn' marker. This does not determine summoning sickness or attack/tap-ability eligibility.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › fields
inspect_library only: brief is the default; full requires selected instances.
Clear enough to supply this argument.
actions › items › to
move_card/move_cards: any zone except `from`; `top` is invalid. search_library: hand, battlefield, graveyard, exile, or top; defaults to hand.
Clear enough to supply this argument.
actions › items › instance
Card ref (preferred, e.g. sol_ring_1) or canonical instance id for play_from_hand, move_card, attach, detach, tap, set_counters, set_card_state, or copy_card (the battlefield card being copied). play_from_hand only accepts cards currently in hand; to cast from the command zone, graveyard, or exile, use move_card from that zone to battlefield. Inspected library refs remain valid for later actions.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › delta
Required non-zero change for set_counters, change_life, change_mana, and change_player_counter; positive adds and negative removes. Counter results return each target's instance, ref, slot, previous_total, and resulting_total.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › power
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › flipped
set_card_state only: set flipped state.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › slot
Optional battlefield slot for play_from_hand, move_card to battlefield, or search_library to battlefield.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › color
change_mana only: mana-pool color to adjust. Use a positive delta to add mana after tapping a source, and a negative delta for every spend — a cast payment, an activation cost, or emptying a float. W/U/B/R/G/C.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › type
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › face_down
set_card_state only: set face-down state.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › commentary
play_from_hand/move_card/move_cards/attach/detach/tap/attack/set_counters/change_life/change_mana/change_player_counter/draw/next_turn/mill/shuffle_library/mulligan/bottom_from_hand/search_library/create_token/roll: Teaching note displayed on this replay step. · comment: Standalone strategy note.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › scope
inspect_library only: inspect the top count or the entire library.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › type_line
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › label
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › instances
Card refs (preferred) or canonical instance ids for move_cards, tap, set_counters, bottom_from_hand, reorder_library, reveal_cards, hide_cards, or selected full-detail inspect_library results. For set_counters, every listed battlefield permanent receives the same delta atomically. A $alias expands a batch-local token pile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › target
change_life only: player or opponent; defaults to player.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › card_name
search_library/create_token: exact name. inspect_library: optional case-insensitive name filter.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › quantity
move_card: For a token pile, move only this many. Omit to move the whole pile. · tap: With one token-pile instance, tap only this many and leave the rest in the original pile. · set_counters: For a token pile, split off this many before changing counters. Omit to affect the whole pile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › from
Required for move_card and move_cards; must be the zone currently containing every selected instance.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › attackers › items › quantity
Token piles only: number of copies attacking. Omit to attack with the whole pile.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › attackers › items › tap
Whether this attacker taps. Defaults to true; pass false for vigilance or similar effects.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › attackers › items › damage
Combat damage dealt to the opponent by each attacking copy; zero or more.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › attackers › items › instance
Battlefield card ref (preferred), canonical instance id, or a batch-local $alias.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › counters
set_card_state only: replace the generic counter total.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › toughness
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › limit
inspect_library page size from 1–100; defaults to 50.
Clear enough to supply this argument.
actions › items › position
move_card/move_cards to library, or reorder_library: place specified instances at top or bottom in the provided order.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › sides
roll only: 2–1000 sides; defaults to 6, and 2 is shown as a coin flip.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_perform_play_actions",
"title": "Play Cards and Update Table",
"description": "Continue a manual playtest with composable tabletop primitives. Every returned card has a stable, human-readable ref such as sol_ring_1; any card action accepts either ref or canonical instance id. entered_turn is only an informational 'Entered this turn' marker; determine eligibility manually from continuous control, current card type, Oracle text, haste, effects, blocks, and prevention. For combat, use attack with each battlefield attacker and its damage per copy; Foilwick taps attackers by default and subtracts the declared total from opponent life without enforcing Magic rules. Set an attacker's tap=false for vigilance or similar effects. inspect_library privately observes top or all library cards and must be final in its batch; later batches can reorder, move, reveal, hide, update state, or shuffle those instances. When something changes on the table — a card changes zones, becomes tapped, attacks, gains or loses counters, the turn advances, or either player loses life — the response may include oracle_reminders: printed Oracle text from the cards involved and from other permanents whose text mentions that kind of change, so you re-read the table instead of recalling it from earlier turns. It is a reading aid only — Foilwick resolves nothing, orders nothing, and verifies nothing, and matching is deliberately loose and over-inclusive, so decide yourself what applies and take any follow-up with normal actions. Mana: keep the pool current. Tap a source, then change_mana with a positive delta for each color added, then a negative change_mana for what a cast or ability costs — adds before spends, in one batch. Tapping never adds mana on its own and Foilwick never checks a spend against a card's mana cost, so an unrecorded float is simply wrong bookkeeping rather than an error. Example turn: [{\"type\":\"tap\",\"instance\":\"forest_1\",\"tapped\":true},{\"type\":\"change_mana\",\"color\":\"G\",\"delta\":1},{\"type\":\"tap\",\"instance\":\"ancient_tomb_1\",\"tapped\":true},{\"type\":\"change_mana\",\"color\":\"C\",\"delta\":2},{\"type\":\"play_from_hand\",\"instance\":\"springheart_nantuko_1\"},{\"type\":\"change_mana\",\"color\":\"G\",\"delta\":-1},{\"type\":\"change_mana\",\"color\":\"C\",\"delta\":-1}]. Every compact delta reports the mana pool, even when nothing else about it changed. Returns compact deltas by default; pass top-level fields='full' only for recovery. Finish with save_play_replay.",
"inputSchema": {
"type": "object",
"required": [
"sandbox_id",
"expected_revision",
"batch_id",
"actions"
],
"properties": {
"fields": {
"enum": [
"full"
],
"type": "string",
"description": "Omit for a compact delta. Pass full only when an explicit full-state recovery response is needed."
},
"actions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"as": {
"type": "string",
"description": "copy_card/create_token only: define a batch-local alias beginning with a letter and containing only letters, numbers, or underscores. Reference it later as $alias inside instances."
},
"to": {
"enum": [
"library",
"hand",
"battlefield",
"graveyard",
"exile",
"command",
"sideboard",
"top"
],
"type": "string",
"description": "move_card/move_cards: any zone except `from`; `top` is invalid. search_library: hand, battlefield, graveyard, exile, or top; defaults to hand."
},
"key": {
"enum": [
"poison",
"energy",
"experience",
"storm"
],
"type": "string",
"description": "change_player_counter only: counter category to adjust."
},
"from": {
"enum": [
"library",
"hand",
"battlefield",
"graveyard",
"exile",
"command",
"sideboard"
],
"type": "string",
"description": "Required for move_card and move_cards; must be the zone currently containing every selected instance."
},
"host": {
"type": "string",
"description": "attach only: the ref (preferred) or canonical instance id of a different battlefield card that receives the attachment."
},
"slot": {
"type": "integer",
"description": "Optional battlefield slot for play_from_hand, move_card to battlefield, or search_library to battlefield."
},
"text": {
"type": "string",
"description": "Standalone strategy note."
},
"type": {
"enum": [
"play_from_hand",
"move_card",
"move_cards",
"attach",
"detach",
"tap",
"attack",
"set_counters",
"change_life",
"change_mana",
"change_player_counter",
"draw",
"next_turn",
"mill",
"shuffle_library",
"mulligan",
"bottom_from_hand",
"search_library",
"inspect_library",
"reorder_library",
"reveal_cards",
"hide_cards",
"set_card_state",
"copy_card",
"create_token",
"roll",
"comment"
],
"type": "string"
},
"color": {
"enum": [
"W",
"U",
"B",
"R",
"G",
"C"
],
"type": "string",
"description": "change_mana only: mana-pool color to adjust. Use a positive delta to add mana after tapping a source, and a negative delta for every spend — a cast payment, an activation cost, or emptying a float. W/U/B/R/G/C."
},
"count": {
"type": "integer",
"description": "draw: 1–20. mill: 1–100. create_token: 1–20. copy_card: number of copies, 1–20, defaults to 1. inspect_library with scope top: number of top cards, defaults to 1."
},
"delta": {
"type": "integer",
"description": "Required non-zero change for set_counters, change_life, change_mana, and change_player_counter; positive adds and negative removes. Counter results return each target's instance, ref, slot, previous_total, and resulting_total."
},
"label": {
"type": "string"
},
"limit": {
"type": "integer",
"description": "inspect_library page size from 1–100; defaults to 50."
},
"power": {
"type": "string"
},
"scope": {
"enum": [
"top",
"all"
],
"type": "string",
"description": "inspect_library only: inspect the top count or the entire library."
},
"sides": {
"type": "integer",
"description": "roll only: 2–1000 sides; defaults to 6, and 2 is shown as a coin flip."
},
"fields": {
"enum": [
"brief",
"full"
],
"type": "string",
"description": "inspect_library only: brief is the default; full requires selected instances."
},
"offset": {
"type": "integer",
"description": "inspect_library pagination offset; defaults to 0."
},
"tapped": {
"type": "boolean",
"description": "tap only: true taps, false untaps; omit to toggle."
},
"target": {
"enum": [
"player",
"opponent"
],
"type": "string",
"description": "change_life only: player or opponent; defaults to player."
},
"flipped": {
"type": "boolean",
"description": "set_card_state only: set flipped state."
},
"markers": {
"type": "object",
"description": "set_card_state only: replace named manual tabletop markers with JSON values."
},
"counters": {
"type": "integer",
"description": "set_card_state only: replace the generic counter total."
},
"instance": {
"type": "string",
"description": "Card ref (preferred, e.g. sol_ring_1) or canonical instance id for play_from_hand, move_card, attach, detach, tap, set_counters, set_card_state, or copy_card (the battlefield card being copied). play_from_hand only accepts cards currently in hand; to cast from the command zone, graveyard, or exile, use move_card from that zone to battlefield. Inspected library refs remain valid for later actions."
},
"position": {
"enum": [
"top",
"bottom"
],
"type": "string",
"description": "move_card/move_cards to library, or reorder_library: place specified instances at top or bottom in the provided order."
},
"quantity": {
"type": "integer",
"description": "move_card: For a token pile, move only this many. Omit to move the whole pile. · tap: With one token-pile instance, tap only this many and leave the rest in the original pile. · set_counters: For a token pile, split off this many before changing counters. Omit to affect the whole pile."
},
"attackers": {
"type": "array",
"items": {
"type": "object",
"required": [
"instance",
"damage"
],
"properties": {
"tap": {
"type": "boolean",
"description": "Whether this attacker taps. Defaults to true; pass false for vigilance or similar effects."
},
"damage": {
"type": "integer",
"description": "Combat damage dealt to the opponent by each attacking copy; zero or more."
},
"instance": {
"type": "string",
"description": "Battlefield card ref (preferred), canonical instance id, or a batch-local $alias."
},
"quantity": {
"type": "integer",
"description": "Token piles only: number of copies attacking. Omit to attack with the whole pile."
}
}
},
"description": "attack only: one entry per different battlefield card or token pile. Every entry requires instance and non-negative integer damage per attacking copy. Attackers tap by default; set tap=false for vigilance or similar effects. The action subtracts the summed damage from opponent life; Foilwick does not validate combat legality, blockers, prevention, or damage values."
},
"card_name": {
"type": "string",
"description": "search_library/create_token: exact name. inspect_library: optional case-insensitive name filter."
},
"card_type": {
"type": "string",
"description": "inspect_library optional case-insensitive type-line filter."
},
"face_down": {
"type": "boolean",
"description": "set_card_state only: set face-down state."
},
"image_uri": {
"type": "string"
},
"instances": {
"type": "array",
"items": {
"type": "string"
},
"description": "Card refs (preferred) or canonical instance ids for move_cards, tap, set_counters, bottom_from_hand, reorder_library, reveal_cards, hide_cards, or selected full-detail inspect_library results. For set_counters, every listed battlefield permanent receives the same delta atomically. A $alias expands a batch-local token pile."
},
"toughness": {
"type": "string"
},
"type_line": {
"type": "string"
},
"commentary": {
"type": "string",
"description": "play_from_hand/move_card/move_cards/attach/detach/tap/attack/set_counters/change_life/change_mana/change_player_counter/draw/next_turn/mill/shuffle_library/mulligan/bottom_from_hand/search_library/create_token/roll: Teaching note displayed on this replay step. · comment: Standalone strategy note."
},
"entered_turn": {
"type": "integer",
"description": "set_card_state only: set the informational 'Entered this turn' marker. This does not determine summoning sickness or attack/tap-ability eligibility."
}
},
"description": "One composable manual-tabletop action. Prefer each card's stable human-readable ref over its canonical instance id. inspect_library is private and must be final in its batch; later batches can reorder, move, reveal, hide, update, or shuffle inspected cards. Required per type — play_from_hand: instance; move_card: instance, from, to; move_cards: instances, from, to; attach: instance, host; detach: instance; attack: attackers with instance and damage; set_counters: instance or instances, delta; change_life: delta; change_mana: color, delta; change_player_counter: key, delta; bottom_from_hand: instances; search_library: card_name; copy_card: instance; create_token: card_name. Optional valid fields — play_from_hand: slot. move_card: quantity, position, slot. move_cards: position. tap: tapped, quantity. attack attacker: quantity, tap. set_counters: quantity. change_life: target. draw/mill/create_token: count. search_library: to, slot. copy_card: count, as. create_token: image_uri, type_line, power, toughness, as. roll: sides. comment: text or commentary, label. commentary is optional on every non-comment action. (additionalProperties: false)"
}
},
"batch_id": {
"type": "string",
"description": "Unique retry key; reusing it prevents a duplicate batch."
},
"sandbox_id": {
"type": "string"
},
"expected_revision": {
"type": "integer",
"description": "The revision returned by the latest sandbox response."
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_restart_play_sandbox",
"title": "Restart Playtest",
"description": "Reset an active solo playtest to a fresh opening hand. Omit seed to repeat the same deterministic shuffle, or provide a new seed for a different deal.",
"inputSchema": {
"type": "object",
"required": [
"sandbox_id"
],
"properties": {
"seed": {
"type": "string"
},
"sandbox_id": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Finish an active solo playtest and save its validated action timeline and teaching commentary as a private Foilwick replay. Call this after perform_play_actions.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
sandbox_id
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
final_commentary
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Export one of the signed-in player's decks as text, Arena, MTGO, or a compact HXDEC code preserving printings, quantities, zones and tag names. Pass either deck_id or deck_name.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
style
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Raw deck facts including mana curve, colors, card types, estimated price, pricing-source counts, and structured format or legality warnings. Pass either deck_id or deck_name.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Build a priced shopping list and pre-filled TCGplayer cart from explicit card names or one deck. Deck prices use the selected printing when priced, otherwise the cheapest released fallback, and identify the source. For a deck, include defaults to missing cards; use all to buy every non-basic card.
Describe the returned information so the agent knows whether it will answer the request.
Inputs15/100
1 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
names › items › quantity
Copies to buy; must be 1 or more. Defaults to 1 when omitted.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
names › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
include
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_buy_list",
"title": "Build Card Shopping List",
"description": "Build a priced shopping list and pre-filled TCGplayer cart from explicit card names or one deck. Deck prices use the selected printing when priced, otherwise the cheapest released fallback, and identify the source. For a deck, include defaults to missing cards; use all to buy every non-basic card.",
"inputSchema": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"quantity": {
"type": "integer",
"description": "Copies to buy; must be 1 or more. Defaults to 1 when omitted."
}
},
"description": "(additionalProperties: false)"
},
"description": "Explicit cards to buy. Use one object per card; quantity defaults to 1 when omitted."
},
"deck_id": {
"type": "string"
},
"include": {
"enum": [
"missing",
"all"
],
"type": "string"
},
"deck_name": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_create_deck",
"title": "Create deck",
"description": "Create a new private deck for the signed-in player. Optionally validate and add one commander to its command zone in the same idempotent request.",
"inputSchema": {
"type": "object",
"required": [
"request_id",
"name"
],
"properties": {
"name": {
"type": "string"
},
"format": {
"enum": [
"commander",
"standard",
"pioneer",
"modern",
"legacy",
"vintage",
"pauper",
"brawl",
"historic",
"oathbreaker"
],
"type": "string"
},
"commander": {
"type": "string",
"description": "Optional exact card name. It is validated for commander eligibility before the deck is created, then added as one card in the command zone."
},
"request_id": {
"type": "string",
"description": "Required unique retry key. Reuse the same value only when retrying this exact request."
},
"description": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Soft-delete an active deck. Pass either deck_id or deck_name. Its previous folder is remembered, linked active replays move to Trash, and the deck can be restored for 30 days.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Permanently delete an already-trashed deck, all its cards, replays, and reactions. Call once without confirmation to identify the target, then again with confirm=true.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
confirm
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
Move cards between deck zones while preserving tags and selected printings. Pass either deck_id or deck_name and a unique request_id so retries are safe.
The description explains the capability, when to use it, and what to expect.
Inputs11/100
1 of 7 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
cards › items › from
Not provided
Missing description. Explain what this value means and how to supply it.
cards › items › quantity
Not provided
Missing description. Explain what this value means and how to supply it.
cards › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
cards › items › to
Not provided
Missing description. Explain what this value means and how to supply it.
request_id
Required unique retry key. Reuse the same value only when retrying this exact request.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Choose a specific printing for a card already in a deck without changing its quantity, zone, or tags. Pass either deck_id or deck_name, plus printing_id or a set code, and a unique request_id so retries are safe.
Describe the returned information so the agent knows whether it will answer the request.
Inputs11/100
1 of 7 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
request_id
Required unique retry key. Reuse the same value only when retrying this exact request.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
printing_id
Not provided
Missing description. Explain what this value means and how to supply it.
set
Not provided
Missing description. Explain what this value means and how to supply it.
collector_number
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_set_card_printing",
"title": "Choose Card Printing",
"description": "Choose a specific printing for a card already in a deck without changing its quantity, zone, or tags. Pass either deck_id or deck_name, plus printing_id or a set code, and a unique request_id so retries are safe.",
"inputSchema": {
"type": "object",
"required": [
"request_id",
"name"
],
"properties": {
"set": {
"type": "string"
},
"name": {
"type": "string"
},
"deck_id": {
"type": "string"
},
"deck_name": {
"type": "string"
},
"request_id": {
"type": "string",
"description": "Required unique retry key. Reuse the same value only when retrying this exact request."
},
"printing_id": {
"type": "string"
},
"collector_number": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Import a complete decklist from pasted text (including HXDEC codes) or a public Moxfield or Archidekt URL, reporting every unmatched card. Pass either text or url. HXDEC preserves printings, quantities, zones and tag names; foil finishes and tag colors are not stored.
Describe the returned information so the agent knows whether it will answer the request.
Inputs14/100
1 of 7 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
request_id
Required unique retry key. Reuse the same value only when retrying this exact request.
Clear enough to supply this argument.
format
Not provided
Missing description. Explain what this value means and how to supply it.
url
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
text
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
Replace, add, or remove reusable role tags on cards in one deck and maintain the player's tag vocabulary. Pass either deck_id or deck_name and a unique request_id so retries are safe.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs17/100
1 of 6 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
request_id
Required unique retry key. Reuse the same value only when retrying this exact request.
Clear enough to supply this argument.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
cards › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
cards › items › tags
Not provided
Missing description. Explain what this value means and how to supply it.
mode
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Two-step destructive action. First call with the tag name only to review every affected card and deck. Delete only after the player explicitly approves, then call again with confirm=true and the exact confirmation_token from that preview.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
2 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
confirmation_token
Exact token returned by the latest impact preview.
Clear enough to supply this argument.
confirm
Set true only after the player explicitly approves the reported impact.
Clear enough to supply this argument.
name
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_delete_tag",
"title": "Delete tag",
"description": "Two-step destructive action. First call with the tag name only to review every affected card and deck. Delete only after the player explicitly approves, then call again with confirm=true and the exact confirmation_token from that preview.",
"inputSchema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "Set true only after the player explicitly approves the reported impact."
},
"confirmation_token": {
"type": "string",
"description": "Exact token returned by the latest impact preview."
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Publish a saved game and return its share URL, or make it private again. Pass either replay_id or replay_name. A public replay shows the deck it was played with, so the deck must already be public — if it is private this returns DECK_PRIVATE; call set_deck_visibility with public=true first. Making a deck private automatically unpublishes its replays.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
replay_id
Not provided
Missing description. Explain what this value means and how to supply it.
replay_name
Not provided
Missing description. Explain what this value means and how to supply it.
public
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_share_replay",
"title": "Share replay",
"description": "Publish a saved game and return its share URL, or make it private again. Pass either replay_id or replay_name. A public replay shows the deck it was played with, so the deck must already be public — if it is private this returns DECK_PRIVATE; call set_deck_visibility with public=true first. Making a deck private automatically unpublishes its replays.",
"inputSchema": {
"type": "object",
"required": [
"public"
],
"properties": {
"public": {
"type": "boolean"
},
"replay_id": {
"type": "string"
},
"replay_name": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
List the signed-in player's puzzle drafts or published puzzles, newest edits first. Use this to recover ids, review links, or find a published puzzle to reopen.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
status
Defaults to draft.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Name the specific action and subject instead of using a generic label such as ‘manage’ or ‘tool’.
Description90/100
Delete an owned puzzle or reopen a published puzzle as a private draft. Both actions require a unique request_id and confirm=true; reopening removes the public share link.
The description explains the capability, when to use it, and what to expect.
Inputs25/100
1 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
request_id
Required unique retry key. Reuse it only when retrying this exact action.
Clear enough to supply this argument.
puzzle_id
Not provided
Missing description. Explain what this value means and how to supply it.
action
Not provided
Missing description. Explain what this value means and how to supply it.
confirm
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Create a private Find Lethal puzzle draft from a complete starting table and intended solution. Use exact card names from search_cards; unknown names are rejected. Every card receives a stable ref. Next call review_puzzle, and publish only after the player approves the reviewed draft.
Describe the returned information so the agent knows whether it will answer the request.
Inputs6/100
1 of 18 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
solution_steps
Not provided
Missing description. Explain what this value means and how to supply it.
deck_name
Not provided
Missing description. Explain what this value means and how to supply it.
opponent_life
Not provided
Missing description. Explain what this value means and how to supply it.
title
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › mana
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › command
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › sideboard
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › battlefield
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › life
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › hand
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › library
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › turn
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › exile
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › player
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state › graveyard
Not provided
Missing description. Explain what this value means and how to supply it.
prompt
Not provided
Missing description. Explain what this value means and how to supply it.
deck_id
Not provided
Missing description. Explain what this value means and how to supply it.
request_id
Required unique retry key. Reuse it only when retrying this exact draft creation.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Review and revise a private puzzle draft after create_puzzle. Returns stable card refs, the normalized table, a private review link, and the token required to publish. You may replace the state, move cards, tap permanents, set counters, and edit all puzzle copy. This does not validate Magic rules.
The description explains the capability, when to use it, and what to expect.
Inputs18/100
3 of 14 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
puzzle_id
Not provided
Missing description. Explain what this value means and how to supply it.
opponent_life
Not provided
Missing description. Explain what this value means and how to supply it.
solution_steps
Not provided
Missing description. Explain what this value means and how to supply it.
prompt
Not provided
Missing description. Explain what this value means and how to supply it.
title
Not provided
Missing description. Explain what this value means and how to supply it.
request_id
Required unique retry key. Reuse it only when retrying this exact review.
Clear enough to supply this argument.
actions › items › to
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › from
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › instance
Stable card ref (preferred) or canonical puzzle instance id.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
actions › items › slot
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › tapped
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › counters
Not provided
Missing description. Explain what this value means and how to supply it.
actions › items › type
Not provided
Missing description. Explain what this value means and how to supply it.
initial_state
Optional complete replacement state using the same card and state fields as create_puzzle. Unknown card names are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Publish a private puzzle only after the player explicitly approves the latest reviewed draft. Requires a unique request_id, confirm=true, and the exact review_token returned by the most recent review_puzzle call.
The description explains the capability, when to use it, and what to expect.
Inputs25/100
1 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
request_id
Required unique retry key. Reuse it only when retrying this exact publication.
Clear enough to supply this argument.
review_token
Not provided
Missing description. Explain what this value means and how to supply it.
puzzle_id
Not provided
Missing description. Explain what this value means and how to supply it.
confirm
Not provided
Missing description. Explain what this value means and how to supply it.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "invoke_publish_puzzle",
"title": "Publish Approved Puzzle",
"description": "Publish a private puzzle only after the player explicitly approves the latest reviewed draft. Requires a unique request_id, confirm=true, and the exact review_token returned by the most recent review_puzzle call.",
"inputSchema": {
"type": "object",
"required": [
"request_id",
"puzzle_id",
"review_token",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean"
},
"puzzle_id": {
"type": "string"
},
"request_id": {
"type": "string",
"description": "Required unique retry key. Reuse it only when retrying this exact publication."
},
"review_token": {
"type": "string"
}
},
"description": "(additionalProperties: false)"
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search cardsDiscover Magic cards by name, rules text, color identity, type, mana value, keywords, popularity, and format legality.
02View card detailsFull card details for up to 100 known card names, including Oracle text, mana cost, colors, keywords, stats, legality, popularity, and price.
03View card printingsEvery printing of a known card with set, collector number, release date, released/preview status, rarity, artist, price, image, and the cheapest released pri…
04Check card pricesCurrent cheapest released-printing prices for known cards, including the pricing source, printing id, store links, and a running total.
05View card rulingsOfficial Oracle rulings and Oracle text for a known card.
Want to run these tasks against your MCP server with us?
Base44 App setup, tools, quality score, publishing readiness, and alternatives.
How do I add Base44 App to Claude, ChatGPT, or Cursor?
Add Base44 App to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://foilwick.com/api/mcp.
Is Base44 App MCP ready for ChatGPT and Claude?
As of November 5, 2026, Base44 App scores 96/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Base44 App's MCP tool documentation?
As of November 5, 2026, Base44 App scores 63/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 47 of 47 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
How can Base44 App improve its MCP documentation?
invoke_rename_deck is the lowest-scoring reviewed tool at 53/100. 0 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.