iwantmymtg-mcp 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Matthew Towles
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,17 +1,22 @@
1
1
  # iwantmymtg-mcp
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/iwantmymtg-mcp)](https://www.npmjs.com/package/iwantmymtg-mcp)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
+ [![smithery badge](https://smithery.ai/badge/matthewdtowles/iwantmymtg-mcp)](https://smithery.ai/servers/matthewdtowles/iwantmymtg-mcp)
6
+
3
7
  An [MCP](https://modelcontextprotocol.io) server for [I Want My MTG](https://iwantmymtg.net). Exposes IWMM's API as tools so Claude Desktop, Claude Code, Cursor, and other MCP clients can search Magic: The Gathering cards/sets and manage a user's collection conversationally.
4
8
 
5
- > Status: v0 scaffold. The set of tools below is the v1 surface; coverage will expand to match the API.
9
+ > Published on [npm](https://www.npmjs.com/package/iwantmymtg-mcp), the [MCP Registry](https://github.com/modelcontextprotocol/registry), and [Smithery](https://smithery.ai/servers/matthewdtowles/iwantmymtg-mcp). Coverage expands to match the API; see [`docs/TOOLS.md`](docs/TOOLS.md) for the full, always-current tool list.
6
10
 
7
11
  ![Demo: Claude Code answering four collection queries via the iwmm MCP server](assets/four-queries-demo.gif)
8
12
 
9
13
  ## What you can do
10
14
 
11
- - **Anonymous (no key):** search cards, look up a card by set+number, get current prices and 30-day price history, list sets and their cards, list sealed products.
12
- - **Authenticated (with an IWMM API key):** list and update your inventory.
15
+ - **Anonymous (no key):** search cards, look up a card by set+number, get current prices and 30-day price history, get a card's buylist (sell-to-vendor) offers, list sets and their cards, list sealed products.
16
+ - **Authenticated (with an IWMM API key):** manage your inventory and transactions; view portfolio summaries, history, performance, cash flow, realized gains, and breakdowns; manage price alerts and notifications.
17
+ - **Sell tools (with a key):** see your collection's market sell value (best buylist offer per card, grouped by vendor), manage a buy-list (want-list), and get a cash-vs-store-credit recommendation for selling toward your buy list.
13
18
 
14
- More authenticated tools (transactions, portfolio breakdowns, price alerts, notifications) are coming - see the [project roadmap](https://github.com/matthewdtowles/i-want-my-mtg/blob/main/ROADMAP.md#43-mcp-server--agentic-ai-integration).
19
+ See the [project roadmap](https://github.com/matthewdtowles/i-want-my-mtg/blob/main/ROADMAP.md#43-mcp-server--agentic-ai-integration) for what's next.
15
20
 
16
21
  ## Install
17
22
 
@@ -88,8 +93,10 @@ After saving, restart Cursor and confirm `iwmm` appears under **Settings -> Feat
88
93
  - "What's the price history of Bloodbraid Elf from Modern Horizons 3?"
89
94
  - "Add 4 copies of Lightning Bolt LEA to my inventory."
90
95
  - "What sealed products are available for MH3?"
96
+ - "What's my collection worth to sell right now, and which vendor pays most?"
97
+ - "Add these cards to my buy list, then tell me whether cash or store credit is the better deal."
91
98
 
92
- See [`examples/`](https://github.com/matthewdtowles/iwantmymtg-mcp/tree/main/examples) for walkthroughs of common flows (card lookup, inventory, transactions, portfolio insights, price alerts).
99
+ See [`examples/`](https://github.com/matthewdtowles/iwantmymtg-mcp/tree/main/examples) for walkthroughs of common flows, and [`docs/TOOLS.md`](docs/TOOLS.md) for the full tool reference.
93
100
 
94
101
  ## Configuration
95
102
 
@@ -115,4 +122,4 @@ npx tsx src/index.ts
115
122
 
116
123
  ## License
117
124
 
118
- MIT
125
+ This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,102 @@
1
+ import { z } from "zod";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
+ /**
4
+ * Buy-list (want-list) management (#9). Per-user list of cards a user wants to
5
+ * acquire, mirroring inventory's grain (card + finish + quantity). Feeds the
6
+ * cash-vs-credit optimizer (get_cash_vs_credit). All tools require IWMM_API_KEY.
7
+ */
8
+ const cardId = z
9
+ .string()
10
+ .uuid()
11
+ .describe("Internal IWMM card UUID. Get from search_cards or get_card.");
12
+ const isFoil = z
13
+ .boolean()
14
+ .optional()
15
+ .describe("Whether this is the foil variant. Foil and non-foil are separate rows. Defaults to false.");
16
+ export const listBuyListTool = {
17
+ name: "list_buy_list",
18
+ description: "List the authenticated user's buy-list (want-list): the cards they want to acquire, with quantities, finish, and current prices. Requires IWMM_API_KEY.",
19
+ inputSchema: z.object({}),
20
+ handler: async () => {
21
+ const { data, error } = await apiClient.GET("/api/v1/buy-list", {
22
+ headers: AUTH_HEADERS,
23
+ });
24
+ return unwrap(data, error);
25
+ },
26
+ };
27
+ export const addBuyListTool = {
28
+ name: "add_buy_list",
29
+ description: "Add a card to the authenticated user's buy-list, incrementing the quantity (creates the row if absent). This is a real write. Use update_buy_list to set an absolute quantity or remove_buy_list to delete a row. Requires IWMM_API_KEY.",
30
+ inputSchema: z.object({
31
+ cardId,
32
+ isFoil,
33
+ quantity: z
34
+ .number()
35
+ .int()
36
+ .min(1)
37
+ .optional()
38
+ .describe("How many to add. Defaults to 1."),
39
+ }),
40
+ handler: async (input) => {
41
+ const { data, error } = await apiClient.POST("/api/v1/buy-list", {
42
+ body: {
43
+ cardId: input.cardId,
44
+ isFoil: input.isFoil ?? false,
45
+ quantity: input.quantity ?? 1,
46
+ },
47
+ headers: AUTH_HEADERS,
48
+ });
49
+ return unwrap(data, error);
50
+ },
51
+ };
52
+ export const updateBuyListTool = {
53
+ name: "update_buy_list",
54
+ description: "Set the absolute quantity for a buy-list card+finish (not a delta). A quantity of 0 removes the row. Use add_buy_list to increment instead. Requires IWMM_API_KEY.",
55
+ inputSchema: z.object({
56
+ cardId,
57
+ isFoil,
58
+ quantity: z
59
+ .number()
60
+ .int()
61
+ .min(0)
62
+ .describe("Absolute quantity to set. 0 removes the row."),
63
+ }),
64
+ handler: async (input) => {
65
+ const { data, error } = await apiClient.PATCH("/api/v1/buy-list", {
66
+ body: {
67
+ cardId: input.cardId,
68
+ isFoil: input.isFoil ?? false,
69
+ quantity: input.quantity,
70
+ },
71
+ headers: AUTH_HEADERS,
72
+ });
73
+ return unwrap(data, error);
74
+ },
75
+ };
76
+ export const removeBuyListTool = {
77
+ name: "remove_buy_list",
78
+ description: "Remove a card+finish row from the authenticated user's buy-list entirely. Requires IWMM_API_KEY.",
79
+ inputSchema: z.object({ cardId, isFoil }),
80
+ handler: async (input) => {
81
+ const { data, error } = await apiClient.DELETE("/api/v1/buy-list", {
82
+ body: { cardId: input.cardId, isFoil: input.isFoil ?? false },
83
+ headers: AUTH_HEADERS,
84
+ });
85
+ return unwrap(data, error);
86
+ },
87
+ };
88
+ export const importBuyListTool = {
89
+ name: "import_buy_list",
90
+ description: "Bulk-add cards to the authenticated user's buy-list from pasted CSV text. Native format header: name,set_code,number[,quantity][,foil]. External exports (Moxfield, Archidekt, Deckbox, TCGPlayer) are auto-detected. Returns counts and per-row errors. Requires IWMM_API_KEY.",
91
+ inputSchema: z.object({
92
+ text: z.string().min(1).describe("CSV text including a header row."),
93
+ }),
94
+ handler: async (input) => {
95
+ const { data, error } = await apiClient.POST("/api/v1/buy-list/import", {
96
+ body: { text: input.text },
97
+ headers: AUTH_HEADERS,
98
+ });
99
+ return unwrap(data, error);
100
+ },
101
+ };
102
+ //# sourceMappingURL=buy-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buy-list.js","sourceRoot":"","sources":["../../src/tools/buy-list.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { searchCardsTool } from "./search-cards.js";
2
2
  import { getCardTool, getCardPricesTool, getCardPriceHistoryTool } from "./get-card.js";
3
- import { searchSetsTool, getSetTool, listSetCardsTool, getSealedProductsTool } from "./sets.js";
4
- import { listInventoryTool, addInventoryTool, updateInventoryTool, removeInventoryTool, getInventoryQuantitiesTool, } from "./inventory.js";
3
+ import { searchSetsTool, getSetTool, listSetCardsTool, getSealedProductsTool, getSetPriceHistoryTool, getSealedProductTool, } from "./sets.js";
4
+ import { listInventoryTool, addInventoryTool, updateInventoryTool, removeInventoryTool, getInventoryQuantitiesTool, importInventoryCardsTool, exportInventoryTool, } from "./inventory.js";
5
+ import { listSealedInventoryTool, setSealedInventoryTool, removeSealedInventoryTool, } from "./sealed-inventory.js";
5
6
  import { listTransactionsTool, recordTransactionTool, updateTransactionTool, deleteTransactionTool, getCostBasisTool, } from "./transactions.js";
6
7
  import { getPortfolioSummaryTool, getPortfolioHistoryTool, getCardPerformanceTool, getCashFlowTool, getRealizedGainsTool, getPortfolioBreakdownTool, refreshPortfolioTool, } from "./portfolio.js";
7
8
  import { listAlertsTool, createAlertTool, updateAlertTool, deleteAlertTool, } from "./alerts.js";
8
9
  import { listNotificationsTool, getUnreadCountTool, markNotificationReadTool, markAllNotificationsReadTool, } from "./notifications.js";
10
+ import { getCardBuylistTool, getMarketSellValueTool, getCashVsCreditTool, } from "./sell-tools.js";
11
+ import { listBuyListTool, addBuyListTool, updateBuyListTool, removeBuyListTool, importBuyListTool, } from "./buy-list.js";
9
12
  export const tools = [
10
13
  // Read-only (no auth)
11
14
  searchCardsTool,
@@ -16,12 +19,30 @@ export const tools = [
16
19
  getSetTool,
17
20
  listSetCardsTool,
18
21
  getSealedProductsTool,
22
+ getSealedProductTool,
23
+ getSetPriceHistoryTool,
24
+ getCardBuylistTool,
25
+ // Sell tools (auth)
26
+ getMarketSellValueTool,
27
+ getCashVsCreditTool,
28
+ // Buy-list / want-list (auth)
29
+ listBuyListTool,
30
+ addBuyListTool,
31
+ updateBuyListTool,
32
+ removeBuyListTool,
33
+ importBuyListTool,
19
34
  // Inventory (auth)
20
35
  listInventoryTool,
21
36
  getInventoryQuantitiesTool,
22
37
  addInventoryTool,
23
38
  updateInventoryTool,
24
39
  removeInventoryTool,
40
+ importInventoryCardsTool,
41
+ exportInventoryTool,
42
+ // Sealed-product inventory (auth; writes Premium)
43
+ listSealedInventoryTool,
44
+ setSealedInventoryTool,
45
+ removeSealedInventoryTool,
25
46
  // Transactions (auth)
26
47
  listTransactionsTool,
27
48
  recordTransactionTool,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAS5B,MAAM,CAAC,MAAM,KAAK,GAAqB;IACrC,sBAAsB;IACtB,eAAe;IACf,WAAW;IACX,iBAAiB;IACjB,uBAAuB;IACvB,cAAc;IACd,UAAU;IACV,gBAAgB;IAChB,qBAAqB;IACrB,mBAAmB;IACnB,iBAAiB;IACjB,0BAA0B;IAC1B,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,gBAAgB;IAChB,2CAA2C;IAC3C,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,eAAe;IACf,oBAAoB;IACpB,yBAAyB;IACzB,oBAAoB;IACpB,sBAAsB;IACtB,cAAc;IACd,eAAe;IACf,eAAe;IACf,eAAe;IACf,uBAAuB;IACvB,qBAAqB;IACrB,kBAAkB;IAClB,wBAAwB;IACxB,4BAA4B;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAmC,MAAM,CAAC,WAAW,CAC3E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAC9B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AASvB,MAAM,CAAC,MAAM,KAAK,GAAqB;IACrC,sBAAsB;IACtB,eAAe;IACf,WAAW;IACX,iBAAiB;IACjB,uBAAuB;IACvB,cAAc;IACd,UAAU;IACV,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,sBAAsB;IACtB,mBAAmB;IACnB,8BAA8B;IAC9B,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,0BAA0B;IAC1B,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,wBAAwB;IACxB,mBAAmB;IACnB,kDAAkD;IAClD,uBAAuB;IACvB,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,gBAAgB;IAChB,2CAA2C;IAC3C,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,eAAe;IACf,oBAAoB;IACpB,yBAAyB;IACzB,oBAAoB;IACpB,sBAAsB;IACtB,cAAc;IACd,eAAe;IACf,eAAe;IACf,eAAe;IACf,uBAAuB;IACvB,qBAAqB;IACrB,kBAAkB;IAClB,wBAAwB;IACxB,4BAA4B;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAmC,MAAM,CAAC,WAAW,CAC3E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAC9B,CAAC"}
@@ -7,7 +7,7 @@ const inventoryItem = z.object({
7
7
  });
8
8
  export const listInventoryTool = {
9
9
  name: "list_inventory",
10
- description: "List the authenticated user's card inventory, paginated. Requires IWMM_API_KEY. Returns cards with quantities, prices, and metadata.",
10
+ description: "List the authenticated user's card inventory, paginated. Returns cards with quantities, prices, and metadata. Requires IWMM_API_KEY.",
11
11
  inputSchema: z.object({
12
12
  page: z.number().int().min(1).optional(),
13
13
  limit: z.number().int().min(1).max(100).optional(),
@@ -73,4 +73,33 @@ export const getInventoryQuantitiesTool = {
73
73
  return unwrap(data, error);
74
74
  },
75
75
  };
76
+ export const importInventoryCardsTool = {
77
+ name: "import_inventory_cards",
78
+ description: "Bulk-import cards into the authenticated user's inventory from pasted CSV text. Native header: name,set_code,number[,quantity][,foil]; Moxfield, Archidekt, Deckbox, and TCGPlayer exports are auto-detected. Returns counts of saved/deleted/skipped rows and per-row errors. Requires IWMM_API_KEY.",
79
+ inputSchema: z.object({
80
+ text: z.string().min(1).describe("CSV text including a header row."),
81
+ }),
82
+ handler: async (input) => {
83
+ // The endpoint takes a multipart file upload; wrap the pasted text as a CSV file.
84
+ const form = new FormData();
85
+ form.append("file", new Blob([input.text], { type: "text/csv" }), "inventory.csv");
86
+ const { data, error } = await apiClient.POST("/api/v1/inventory/import/cards", {
87
+ body: form,
88
+ headers: AUTH_HEADERS,
89
+ });
90
+ return unwrap(data, error);
91
+ },
92
+ };
93
+ export const exportInventoryTool = {
94
+ name: "export_inventory",
95
+ description: "Export the authenticated user's full card inventory as CSV (columns: id, name, set_code, number, quantity, foil). Reimport-compatible with import_inventory_cards. Requires IWMM_API_KEY.",
96
+ inputSchema: z.object({}),
97
+ handler: async () => {
98
+ const { data, error } = await apiClient.GET("/api/v1/inventory/export", {
99
+ headers: AUTH_HEADERS,
100
+ parseAs: "text",
101
+ });
102
+ return unwrap(data, error);
103
+ },
104
+ };
76
105
  //# sourceMappingURL=inventory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/tools/inventory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/tools/inventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IACjG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACrG,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC;CAClH,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,sIAAsI;IACxI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KACnD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAA8B,EAAE,EAAE;QAChD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE;YAC/D,MAAM,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE;YACjC,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,iPAAiP;IACnP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,EAAE,KAAK,EAAE,KAAiD,EAAE,EAAE;QACnE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAChE,IAAI,EAAE,KAAK,CAAC,KAAc;YAC1B,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,mJAAmJ;IACrJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,EAAE,KAAK,EAAE,KAAiD,EAAE,EAAE;QACnE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE;YACjE,IAAI,EAAE,KAAK,CAAC,KAAc;YAC1B,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,0FAA0F;IACvG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;QACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAA0C,EAAE,EAAE;QAC5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE;YAClE,IAAI,EAAE,KAAc;YACpB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,0JAA0J;IAC5J,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;KACpD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAyB,EAAE,EAAE;QACpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,8BAA8B,EAAE;YAC1E,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAW,EAAE;YAC1D,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,uSAAuS;IACzS,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KACrE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAuB,EAAE,EAAE;QACzC,kFAAkF;QAClF,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACnF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,gCAAgC,EAAE;YAC7E,IAAI,EAAE,IAAa;YACnB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,2LAA2L;IAC7L,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,0BAA0B,EAAE;YACtE,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { z } from "zod";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
+ /**
4
+ * Sealed-product inventory (booster boxes, bundles, precons). Mirrors card
5
+ * inventory but keyed by sealed product UUID. Writes are Premium-gated. The
6
+ * API's POST and PATCH both upsert the absolute quantity, so a single
7
+ * set_sealed_inventory tool covers add and update.
8
+ */
9
+ const sealedProductUuid = z
10
+ .string()
11
+ .uuid()
12
+ .describe("Sealed product UUID. Get it from get_sealed_products or get_sealed_product.");
13
+ export const listSealedInventoryTool = {
14
+ name: "list_sealed_inventory",
15
+ description: "List the authenticated user's sealed-product inventory (booster boxes, bundles, precons), paginated, with quantities and prices. For loose cards use list_inventory. Requires IWMM_API_KEY.",
16
+ inputSchema: z.object({
17
+ page: z.number().int().min(1).optional(),
18
+ limit: z.number().int().min(1).max(100).optional(),
19
+ }),
20
+ handler: async (input) => {
21
+ const { data, error } = await apiClient.GET("/api/v1/inventory/sealed", {
22
+ params: { query: input },
23
+ headers: AUTH_HEADERS,
24
+ });
25
+ return unwrap(data, error);
26
+ },
27
+ };
28
+ export const setSealedInventoryTool = {
29
+ name: "set_sealed_inventory",
30
+ description: "Add or update a sealed product in the authenticated user's inventory by setting its absolute quantity (upserts the row for that product). This is a real write and is Premium-gated. Use remove_sealed_inventory to delete a row. Requires IWMM_API_KEY.",
31
+ inputSchema: z.object({
32
+ sealedProductUuid,
33
+ quantity: z.number().int().min(1).describe("Absolute quantity to set for this product."),
34
+ }),
35
+ handler: async (input) => {
36
+ const { data, error } = await apiClient.POST("/api/v1/inventory/sealed", {
37
+ body: input,
38
+ headers: AUTH_HEADERS,
39
+ });
40
+ return unwrap(data, error);
41
+ },
42
+ };
43
+ export const removeSealedInventoryTool = {
44
+ name: "remove_sealed_inventory",
45
+ description: "Remove a sealed product from the authenticated user's inventory entirely. Premium-gated. Requires IWMM_API_KEY.",
46
+ inputSchema: z.object({ sealedProductUuid }),
47
+ handler: async (input) => {
48
+ const { data, error } = await apiClient.DELETE("/api/v1/inventory/sealed", {
49
+ body: input,
50
+ headers: AUTH_HEADERS,
51
+ });
52
+ return unwrap(data, error);
53
+ },
54
+ };
55
+ //# sourceMappingURL=sealed-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sealed-inventory.js","sourceRoot":"","sources":["../../src/tools/sealed-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;;;;GAKG;AAEH,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,IAAI,EAAE;KACN,QAAQ,CAAC,6EAA6E,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,6LAA6L;IAC/L,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KACnD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAA8B,EAAE,EAAE;QAChD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,0BAA0B,EAAE;YACtE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE;YACjC,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,0PAA0P;IAC5P,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,iBAAiB;QACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACzF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAsD,EAAE,EAAE;QACxE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACvE,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,iHAAiH;IACnH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5C,OAAO,EAAE,KAAK,EAAE,KAAoC,EAAE,EAAE;QACtD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,0BAA0B,EAAE;YACzE,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
+ /**
4
+ * Phase 6 sell tools (#9): buylist (sell-to-vendor) pricing, market sell value
5
+ * of a user's inventory, and the cash-vs-store-credit optimizer. These mirror
6
+ * the web pages and share the same backend; CSV export stays web-side.
7
+ */
8
+ export const getCardBuylistTool = {
9
+ name: "get_card_buylist",
10
+ description: "Get current buylist (sell-to-vendor) offers for a card printing, by set code and collector number. Returns offers grouped by finish (normal/foil/etched), best first, with the highest offer per finish marked. NM condition only. Use get_card_prices for retail (buy) prices instead.",
11
+ inputSchema: z.object({
12
+ setCode: z.string().describe("Set code (e.g. 'lea')."),
13
+ setNumber: z
14
+ .string()
15
+ .describe("Collector number within the set (e.g. '161'). String, not int."),
16
+ }),
17
+ handler: async (input) => {
18
+ const { data, error } = await apiClient.GET("/api/v1/cards/{setCode}/{setNumber}/buylist", { params: { path: input } });
19
+ return unwrap(data, error);
20
+ },
21
+ };
22
+ export const getMarketSellValueTool = {
23
+ name: "get_market_sell_value",
24
+ description: "Market sell value of the authenticated user's whole inventory: matches every owned card against current buylist offers, picks the best offer per item (capped by the vendor's buy quantity), groups by vendor, and totals it. Returns vendor groups with per-item payouts plus overall totals. Requires IWMM_API_KEY.",
25
+ inputSchema: z.object({}),
26
+ handler: async () => {
27
+ const { data, error } = await apiClient.GET("/api/v1/inventory/sell", {
28
+ headers: AUTH_HEADERS,
29
+ });
30
+ return unwrap(data, error);
31
+ },
32
+ };
33
+ export const getCashVsCreditTool = {
34
+ name: "get_cash_vs_credit",
35
+ description: "Cash vs. store-credit recommendation for the authenticated user. Compares taking the buylist cash payout for their inventory against taking store credit (worth a bonus %) and spending it on their buy list. Returns the recommendation, the credit advantage, out-of-pocket each way, and the priced buy-list lines. Requires IWMM_API_KEY.",
36
+ inputSchema: z.object({
37
+ bonus: z
38
+ .number()
39
+ .min(0)
40
+ .max(2)
41
+ .optional()
42
+ .describe("Store-credit bonus as a fraction (0.30 = +30%). Must be in [0, 2]; defaults to 0.30 (Card Kingdom)."),
43
+ }),
44
+ handler: async (input) => {
45
+ const query = input.bonus != null ? { bonus: String(input.bonus) } : undefined;
46
+ const { data, error } = await apiClient.GET("/api/v1/optimizer", {
47
+ params: { query },
48
+ headers: AUTH_HEADERS,
49
+ });
50
+ return unwrap(data, error);
51
+ },
52
+ };
53
+ //# sourceMappingURL=sell-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sell-tools.js","sourceRoot":"","sources":["../../src/tools/sell-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;;;GAIG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,yRAAyR;IAC3R,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtD,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,CAAC,gEAAgE,CAAC;KAC9E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAA6C,EAAE,EAAE;QAC/D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CACzC,6CAA6C,EAC7C,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAC5B,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,uTAAuT;IACzT,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE;YACpE,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,+UAA+U;IACjV,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACP,qGAAqG,CACtG;KACJ,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAyB,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE;YAC/D,MAAM,EAAE,EAAE,KAAK,EAAE;YACjB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
@@ -55,4 +55,32 @@ export const getSealedProductsTool = {
55
55
  return unwrap(data, error);
56
56
  },
57
57
  };
58
+ export const getSetPriceHistoryTool = {
59
+ name: "get_set_price_history",
60
+ description: "Get the price history for a whole set by set code - the set's aggregate value over time. Optionally limit the window with days. For a single card's history use get_card_price_history.",
61
+ inputSchema: z.object({
62
+ code: z.string().describe("Set code (e.g. 'mh3')."),
63
+ days: z.number().int().min(1).optional().describe("Number of days of history to return."),
64
+ }),
65
+ handler: async ({ code, days }) => {
66
+ const query = days != null ? { days: String(days) } : undefined;
67
+ const { data, error } = await apiClient.GET("/api/v1/sets/{code}/price-history", {
68
+ params: { path: { code }, query },
69
+ });
70
+ return unwrap(data, error);
71
+ },
72
+ };
73
+ export const getSealedProductTool = {
74
+ name: "get_sealed_product",
75
+ description: "Get detail for a single sealed product by its UUID, including current pricing and a TCGPlayer purchase URL. List a set's sealed products with get_sealed_products.",
76
+ inputSchema: z.object({
77
+ uuid: z.string().uuid().describe("Sealed product UUID, e.g. from get_sealed_products."),
78
+ }),
79
+ handler: async ({ uuid }) => {
80
+ const { data, error } = await apiClient.GET("/api/v1/sealed-products/{uuid}", {
81
+ params: { path: { uuid } },
82
+ });
83
+ return unwrap(data, error);
84
+ },
85
+ };
58
86
  //# sourceMappingURL=sets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sets.js","sourceRoot":"","sources":["../../src/tools/sets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sets.js","sourceRoot":"","sources":["../../src/tools/sets.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "iwantmymtg-mcp",
3
3
  "mcpName": "io.github.matthewdtowles/iwantmymtg-mcp",
4
- "version": "0.3.1",
4
+ "version": "0.5.0",
5
5
  "description": "MCP server for I Want My MTG - query cards/sets and manage your collection from Claude Desktop, Claude Code, Cursor, and other MCP clients.",
6
6
  "type": "module",
7
7
  "bin": {
@@ -18,7 +18,10 @@
18
18
  "start": "node dist/index.js",
19
19
  "dev": "tsc --watch",
20
20
  "test": "node --test --import tsx test/*.test.ts",
21
- "clean": "rm -rf dist"
21
+ "gen:tools-doc": "tsx scripts/gen-tools-doc.ts",
22
+ "check:tools-doc": "tsx scripts/gen-tools-doc.ts --check",
23
+ "clean": "rm -rf dist",
24
+ "bundle": "bash scripts/build-mcpb.sh"
22
25
  },
23
26
  "engines": {
24
27
  "node": ">=20"