iwantmymtg-mcp 0.2.0 → 0.3.1

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/README.md CHANGED
@@ -4,6 +4,8 @@ An [MCP](https://modelcontextprotocol.io) server for [I Want My MTG](https://iwa
4
4
 
5
5
  > Status: v0 scaffold. The set of tools below is the v1 surface; coverage will expand to match the API.
6
6
 
7
+ ![Demo: Claude Code answering four collection queries via the iwmm MCP server](assets/four-queries-demo.gif)
8
+
7
9
  ## What you can do
8
10
 
9
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.
@@ -1,4 +1,7 @@
1
- import { config } from "./config.js";
1
+ import createClient from "openapi-fetch";
2
+ import { config, requireApiKey } from "./config.js";
3
+ import { VERSION } from "./version.js";
4
+ const USER_AGENT = `iwantmymtg-mcp/${VERSION}`;
2
5
  export class ApiError extends Error {
3
6
  status;
4
7
  body;
@@ -11,41 +14,55 @@ export class ApiError extends Error {
11
14
  this.name = "ApiError";
12
15
  }
13
16
  }
14
- export async function apiFetch(req) {
15
- const url = new URL(req.path, config.baseUrl);
16
- if (req.query) {
17
- for (const [k, v] of Object.entries(req.query)) {
18
- if (v !== undefined && v !== null && v !== "") {
19
- url.searchParams.set(k, String(v));
20
- }
17
+ const authMiddleware = {
18
+ async onRequest({ request }) {
19
+ request.headers.set("User-Agent", USER_AGENT);
20
+ request.headers.set("Accept", "application/json");
21
+ // Tools opt in by setting `X-IWMM-Auth: required` via init.headers
22
+ if (request.headers.get("X-IWMM-Auth") === "required") {
23
+ request.headers.delete("X-IWMM-Auth");
24
+ request.headers.set("Authorization", `Bearer ${requireApiKey()}`);
21
25
  }
22
- }
23
- const headers = {
24
- Accept: "application/json",
25
- "User-Agent": "iwantmymtg-mcp/0.2.0",
26
- };
27
- if (req.authenticated) {
28
- const { requireApiKey } = await import("./config.js");
29
- headers["Authorization"] = `Bearer ${requireApiKey()}`;
30
- }
31
- if (req.body !== undefined) {
32
- headers["Content-Type"] = "application/json";
33
- }
34
- const res = await fetch(url, {
35
- method: req.method ?? "GET",
36
- headers,
37
- body: req.body !== undefined ? JSON.stringify(req.body) : undefined,
26
+ return request;
27
+ },
28
+ async onResponse({ response }) {
29
+ if (!response.ok) {
30
+ const text = await response.clone().text();
31
+ throw new ApiError(response.status, text, {
32
+ limit: response.headers.get("X-RateLimit-Limit") ?? undefined,
33
+ remaining: response.headers.get("X-RateLimit-Remaining") ?? undefined,
34
+ reset: response.headers.get("X-RateLimit-Reset") ?? undefined,
35
+ });
36
+ }
37
+ return response;
38
+ },
39
+ };
40
+ // Lazy so tests can stub `globalThis.fetch` after module load, and so config
41
+ // changes (baseUrl, etc.) are picked up at call time.
42
+ function buildClient() {
43
+ const client = createClient({
44
+ baseUrl: config.baseUrl,
45
+ fetch: (...args) => globalThis.fetch(...args),
38
46
  });
39
- if (!res.ok) {
40
- const text = await res.text();
41
- throw new ApiError(res.status, text, {
42
- limit: res.headers.get("X-RateLimit-Limit") ?? undefined,
43
- remaining: res.headers.get("X-RateLimit-Remaining") ?? undefined,
44
- reset: res.headers.get("X-RateLimit-Reset") ?? undefined,
45
- });
46
- }
47
- if (res.status === 204)
48
- return undefined;
49
- return (await res.json());
47
+ client.use(authMiddleware);
48
+ return client;
49
+ }
50
+ export const apiClient = new Proxy({}, {
51
+ get(_, prop) {
52
+ const client = buildClient();
53
+ return Reflect.get(client, prop);
54
+ },
55
+ });
56
+ /** Header sentinel that the auth middleware swaps for a Bearer token. */
57
+ export const AUTH_HEADERS = { "X-IWMM-Auth": "required" };
58
+ /**
59
+ * Unwrap an openapi-fetch `{ data, error }` result. HTTP failures are already
60
+ * thrown as `ApiError` by the response middleware, so `error` here only carries
61
+ * non-HTTP failures (e.g. network errors).
62
+ */
63
+ export function unwrap(data, error) {
64
+ if (error)
65
+ throw error instanceof Error ? error : new Error(String(error));
66
+ return data;
50
67
  }
51
68
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUrC,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IACA;IACA;IAHlB,YACkB,MAAc,EACd,IAAY,EACZ,SAIf;QAED,KAAK,CAAC,YAAY,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QARrB,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAIxB;QAGD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAc,GAAe;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,kBAAkB;QAC1B,YAAY,EAAE,sBAAsB;KACrC,CAAC;IAEF,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,aAAa,EAAE,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;QAC3B,OAAO;QACP,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KACpE,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;YACnC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS;YACxD,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,SAAS;YAChE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS;SACzD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,SAAc,CAAC;IAC9C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.js","sourceRoot":"","sources":["../../src/generated/api-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/server.js CHANGED
@@ -4,10 +4,11 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextpro
4
4
  import { zodToJsonSchema } from "zod-to-json-schema";
5
5
  import { tools, toolsByName } from "./tools/index.js";
6
6
  import { formatError } from "./error-formatter.js";
7
+ import { VERSION } from "./version.js";
7
8
  export async function startServer() {
8
9
  const server = new Server({
9
10
  name: "iwantmymtg-mcp",
10
- version: "0.2.0",
11
+ version: VERSION,
11
12
  }, {
12
13
  capabilities: {
13
14
  tools: {},
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAA4B;SAC/F,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;aACtE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yBAAyB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAA4B;SAC/F,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;aACtE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yBAAyB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
@@ -1,11 +1,16 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
3
  const thresholdRefinement = (v) => v.increasePct != null || v.decreasePct != null;
4
4
  export const listAlertsTool = {
5
5
  name: "list_price_alerts",
6
6
  description: "List the authenticated user's price alerts. Free tier is capped at 5 active alerts and a single threshold direction per alert; Premium removes both limits. Requires IWMM_API_KEY.",
7
7
  inputSchema: z.object({}),
8
- handler: () => apiFetch({ path: "/api/v1/price-alerts", authenticated: true }),
8
+ handler: async () => {
9
+ const { data, error } = await apiClient.GET("/api/v1/price-alerts", {
10
+ headers: AUTH_HEADERS,
11
+ });
12
+ return unwrap(data, error);
13
+ },
9
14
  };
10
15
  export const createAlertTool = {
11
16
  name: "create_price_alert",
@@ -17,23 +22,42 @@ export const createAlertTool = {
17
22
  decreasePct: z.number().min(0.01).optional().describe("Trigger when price decreases by at least this percent."),
18
23
  })
19
24
  .refine(thresholdRefinement, { message: "Provide at least one of increasePct or decreasePct." }),
20
- handler: (input) => apiFetch({ path: "/api/v1/price-alerts", method: "POST", body: input, authenticated: true }),
25
+ handler: async (input) => {
26
+ const { data, error } = await apiClient.POST("/api/v1/price-alerts", {
27
+ body: input,
28
+ headers: AUTH_HEADERS,
29
+ });
30
+ return unwrap(data, error);
31
+ },
21
32
  };
22
33
  export const updateAlertTool = {
23
34
  name: "update_price_alert",
24
35
  description: "Update an existing price alert. Pass null for a threshold to clear it (Premium only - free users must keep exactly one direction). isActive toggles enable/disable without deleting. Requires IWMM_API_KEY.",
25
36
  inputSchema: z.object({
26
- id: z.string().describe("Alert ID from list_price_alerts."),
37
+ id: z.coerce.number().int().describe("Alert ID from list_price_alerts."),
27
38
  increasePct: z.number().min(0.01).nullable().optional(),
28
39
  decreasePct: z.number().min(0.01).nullable().optional(),
29
40
  isActive: z.boolean().optional(),
30
41
  }),
31
- handler: ({ id, ...patch }) => apiFetch({ path: `/api/v1/price-alerts/${encodeURIComponent(id)}`, method: "PATCH", body: patch, authenticated: true }),
42
+ handler: async ({ id, ...patch }) => {
43
+ const { data, error } = await apiClient.PATCH("/api/v1/price-alerts/{id}", {
44
+ params: { path: { id } },
45
+ body: patch,
46
+ headers: AUTH_HEADERS,
47
+ });
48
+ return unwrap(data, error);
49
+ },
32
50
  };
33
51
  export const deleteAlertTool = {
34
52
  name: "delete_price_alert",
35
53
  description: "Delete a price alert by ID. Requires IWMM_API_KEY.",
36
- inputSchema: z.object({ id: z.string() }),
37
- handler: ({ id }) => apiFetch({ path: `/api/v1/price-alerts/${encodeURIComponent(id)}`, method: "DELETE", authenticated: true }),
54
+ inputSchema: z.object({ id: z.coerce.number().int() }),
55
+ handler: async ({ id }) => {
56
+ const { data, error } = await apiClient.DELETE("/api/v1/price-alerts/{id}", {
57
+ params: { path: { id } },
58
+ headers: AUTH_HEADERS,
59
+ });
60
+ return unwrap(data, error);
61
+ },
38
62
  };
39
63
  //# sourceMappingURL=alerts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/tools/alerts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,mBAAmB,GAAG,CAAC,CAA+D,EAAE,EAAE,CAC9F,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,oLAAoL;IACtL,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAC/E,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,iJAAiJ;IACnJ,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QAC/G,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KAChH,CAAC;SACD,MAAM,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC;IAClG,OAAO,EAAE,CAAC,KAAqE,EAAE,EAAE,CACjF,QAAQ,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAC/F,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,6MAA6M;IAC/M,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACvD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC;IACF,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAA4C,EAAE,EAAE,CACtE,QAAQ,CAAC,EAAE,IAAI,EAAE,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAC1H,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oDAAoD;IACjE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACzC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAkB,EAAE,EAAE,CAClC,QAAQ,CAAC,EAAE,IAAI,EAAE,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAC9G,CAAC"}
1
+ {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/tools/alerts.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, unwrap } from "../api-client.js";
3
3
  export const getCardInputSchema = {
4
4
  setCode: z.string().describe("Set code (e.g. 'lea')."),
5
5
  setNumber: z.string().describe("Collector number within the set (e.g. '161'). String, not int - some sets use suffixes like '12a'."),
6
6
  };
7
7
  export async function getCard(input) {
8
- return apiFetch({
9
- path: `/api/v1/cards/${encodeURIComponent(input.setCode)}/${encodeURIComponent(input.setNumber)}`,
10
- });
8
+ const { data, error } = await apiClient.GET("/api/v1/cards/{setCode}/{setNumber}", { params: { path: input } });
9
+ return unwrap(data, error);
11
10
  }
12
11
  export const getCardTool = {
13
12
  name: "get_card",
@@ -19,16 +18,18 @@ export const getCardPricesTool = {
19
18
  name: "get_card_prices",
20
19
  description: "Get current normal and foil prices for a specific card printing.",
21
20
  inputSchema: z.object(getCardInputSchema),
22
- handler: async (input) => apiFetch({
23
- path: `/api/v1/cards/${encodeURIComponent(input.setCode)}/${encodeURIComponent(input.setNumber)}/prices`,
24
- }),
21
+ handler: async (input) => {
22
+ const { data, error } = await apiClient.GET("/api/v1/cards/{setCode}/{setNumber}/prices", { params: { path: input } });
23
+ return unwrap(data, error);
24
+ },
25
25
  };
26
26
  export const getCardPriceHistoryTool = {
27
27
  name: "get_card_price_history",
28
28
  description: "Get the 30-day price history for a card printing (normal + foil). Older data is retained on a weekly/monthly cadence beyond 30 days.",
29
29
  inputSchema: z.object(getCardInputSchema),
30
- handler: async (input) => apiFetch({
31
- path: `/api/v1/cards/${encodeURIComponent(input.setCode)}/${encodeURIComponent(input.setNumber)}/price-history`,
32
- }),
30
+ handler: async (input) => {
31
+ const { data, error } = await apiClient.GET("/api/v1/cards/{setCode}/{setNumber}/price-history", { params: { path: input } });
32
+ return unwrap(data, error);
33
+ },
33
34
  };
34
35
  //# sourceMappingURL=get-card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-card.js","sourceRoot":"","sources":["../../src/tools/get-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACtD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oGAAoG,CAAC;CACrI,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAA6C;IACzE,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;KAClG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,mMAAmM;IACrM,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACzC,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,kEAAkE;IAC/E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,KAA6C,EAAE,EAAE,CAC/D,QAAQ,CAAC;QACP,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS;KACzG,CAAC;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,sIAAsI;IACxI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,KAA6C,EAAE,EAAE,CAC/D,QAAQ,CAAC;QACP,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB;KAChH,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"get-card.js","sourceRoot":"","sources":["../../src/tools/get-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACtD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oGAAoG,CAAC;CACrI,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAc;IAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CACzC,qCAAqC,EACrC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAC5B,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,mMAAmM;IACrM,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACzC,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,kEAAkE;IAC/E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE;QAChC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CACzC,4CAA4C,EAC5C,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,uBAAuB,GAAG;IACrC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,sIAAsI;IACxI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE;QAChC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CACzC,mDAAmD,EACnD,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAC5B,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
3
  const inventoryItem = z.object({
4
4
  cardId: z.string().uuid().describe("Internal IWMM card UUID. Get from search_cards or get_card."),
5
5
  quantity: z.number().int().min(0).describe("Total quantity for this card+finish. 0 removes the row."),
@@ -12,23 +12,37 @@ export const listInventoryTool = {
12
12
  page: z.number().int().min(1).optional(),
13
13
  limit: z.number().int().min(1).max(100).optional(),
14
14
  }),
15
- handler: (input) => apiFetch({
16
- path: "/api/v1/inventory",
17
- query: input,
18
- authenticated: true,
19
- }),
15
+ handler: async (input) => {
16
+ const { data, error } = await apiClient.GET("/api/v1/inventory", {
17
+ params: { query: input },
18
+ headers: AUTH_HEADERS,
19
+ });
20
+ return unwrap(data, error);
21
+ },
20
22
  };
21
23
  export const addInventoryTool = {
22
24
  name: "add_inventory",
23
25
  description: "Add one or more cards to the authenticated user's inventory. Accepts a batch - pass a single-item array for one card. This is a real write. Use update_inventory to change quantities, remove_inventory to delete a row. Requires IWMM_API_KEY.",
24
26
  inputSchema: z.object({ items: z.array(inventoryItem).min(1) }),
25
- handler: (input) => apiFetch({ path: "/api/v1/inventory", method: "POST", body: input.items, authenticated: true }),
27
+ handler: async (input) => {
28
+ const { data, error } = await apiClient.POST("/api/v1/inventory", {
29
+ body: input.items,
30
+ headers: AUTH_HEADERS,
31
+ });
32
+ return unwrap(data, error);
33
+ },
26
34
  };
27
35
  export const updateInventoryTool = {
28
36
  name: "update_inventory",
29
37
  description: "Update quantities for one or more existing inventory rows. Accepts a batch. Use remove_inventory to delete a row entirely. Requires IWMM_API_KEY.",
30
38
  inputSchema: z.object({ items: z.array(inventoryItem).min(1) }),
31
- handler: (input) => apiFetch({ path: "/api/v1/inventory", method: "PATCH", body: input.items, authenticated: true }),
39
+ handler: async (input) => {
40
+ const { data, error } = await apiClient.PATCH("/api/v1/inventory", {
41
+ body: input.items,
42
+ headers: AUTH_HEADERS,
43
+ });
44
+ return unwrap(data, error);
45
+ },
32
46
  };
33
47
  export const removeInventoryTool = {
34
48
  name: "remove_inventory",
@@ -37,7 +51,13 @@ export const removeInventoryTool = {
37
51
  cardId: z.string().uuid(),
38
52
  isFoil: z.boolean(),
39
53
  }),
40
- handler: (input) => apiFetch({ path: "/api/v1/inventory", method: "DELETE", body: input, authenticated: true }),
54
+ handler: async (input) => {
55
+ const { data, error } = await apiClient.DELETE("/api/v1/inventory", {
56
+ body: input,
57
+ headers: AUTH_HEADERS,
58
+ });
59
+ return unwrap(data, error);
60
+ },
41
61
  };
42
62
  export const getInventoryQuantitiesTool = {
43
63
  name: "get_inventory_quantities",
@@ -45,10 +65,12 @@ export const getInventoryQuantitiesTool = {
45
65
  inputSchema: z.object({
46
66
  cardIds: z.array(z.string().uuid()).min(1).max(200),
47
67
  }),
48
- handler: ({ cardIds }) => apiFetch({
49
- path: "/api/v1/inventory/quantities",
50
- query: { cardIds: cardIds.join(",") },
51
- authenticated: true,
52
- }),
68
+ handler: async ({ cardIds }) => {
69
+ const { data, error } = await apiClient.GET("/api/v1/inventory/quantities", {
70
+ params: { query: { cardIds: cardIds.join(",") } },
71
+ headers: AUTH_HEADERS,
72
+ });
73
+ return unwrap(data, error);
74
+ },
53
75
  };
54
76
  //# 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":"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"}
@@ -1,27 +1,48 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
3
  export const listNotificationsTool = {
4
4
  name: "list_notifications",
5
5
  description: "List the authenticated user's price alert notifications, newest first. Includes both read and unread. Requires IWMM_API_KEY.",
6
6
  inputSchema: z.object({}),
7
- handler: () => apiFetch({ path: "/api/v1/notifications", authenticated: true }),
7
+ handler: async () => {
8
+ const { data, error } = await apiClient.GET("/api/v1/notifications", {
9
+ headers: AUTH_HEADERS,
10
+ });
11
+ return unwrap(data, error);
12
+ },
8
13
  };
9
14
  export const getUnreadCountTool = {
10
15
  name: "get_unread_notification_count",
11
16
  description: "Get the count of unread notifications for the authenticated user. Requires IWMM_API_KEY.",
12
17
  inputSchema: z.object({}),
13
- handler: () => apiFetch({ path: "/api/v1/notifications/unread-count", authenticated: true }),
18
+ handler: async () => {
19
+ const { data, error } = await apiClient.GET("/api/v1/notifications/unread-count", {
20
+ headers: AUTH_HEADERS,
21
+ });
22
+ return unwrap(data, error);
23
+ },
14
24
  };
15
25
  export const markNotificationReadTool = {
16
26
  name: "mark_notification_read",
17
27
  description: "Mark a single notification as read. Requires IWMM_API_KEY.",
18
- inputSchema: z.object({ id: z.string() }),
19
- handler: ({ id }) => apiFetch({ path: `/api/v1/notifications/${encodeURIComponent(id)}/read`, method: "PATCH", authenticated: true }),
28
+ inputSchema: z.object({ id: z.coerce.number().int() }),
29
+ handler: async ({ id }) => {
30
+ const { data, error } = await apiClient.PATCH("/api/v1/notifications/{id}/read", {
31
+ params: { path: { id } },
32
+ headers: AUTH_HEADERS,
33
+ });
34
+ return unwrap(data, error);
35
+ },
20
36
  };
21
37
  export const markAllNotificationsReadTool = {
22
38
  name: "mark_all_notifications_read",
23
39
  description: "Mark every notification for the authenticated user as read. Requires IWMM_API_KEY.",
24
40
  inputSchema: z.object({}),
25
- handler: () => apiFetch({ path: "/api/v1/notifications/read-all", method: "PATCH", authenticated: true }),
41
+ handler: async () => {
42
+ const { data, error } = await apiClient.PATCH("/api/v1/notifications/read-all", {
43
+ headers: AUTH_HEADERS,
44
+ });
45
+ return unwrap(data, error);
46
+ },
26
47
  };
27
48
  //# sourceMappingURL=notifications.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,8HAA8H;IAChI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,0FAA0F;IACvG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,oCAAoC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAC7F,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,4DAA4D;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACzC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAkB,EAAE,EAAE,CAClC,QAAQ,CAAC,EAAE,IAAI,EAAE,yBAAyB,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CACnH,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,oFAAoF;IACjG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,gCAAgC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;CAC1G,CAAC"}
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.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,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,8HAA8H;IAChI,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,uBAAuB,EAAE;YACnE,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,0FAA0F;IACvG,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,oCAAoC,EAAE;YAChF,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,EAAE,4DAA4D;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;IACtD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAkB,EAAE,EAAE;QACxC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,iCAAiC,EAAE;YAC/E,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;YACxB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,oFAAoF;IACjG,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,KAAK,CAAC,gCAAgC,EAAE;YAC9E,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
@@ -1,10 +1,15 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
3
  export const getPortfolioSummaryTool = {
4
4
  name: "get_portfolio_summary",
5
5
  description: "Get the authenticated user's portfolio summary - current value, total invested, unrealized P&L, ROI, card/unit counts. Free tier sees current value + total invested only; Premium gets the full P&L set. Requires IWMM_API_KEY.",
6
6
  inputSchema: z.object({}),
7
- handler: () => apiFetch({ path: "/api/v1/portfolio", authenticated: true }),
7
+ handler: async () => {
8
+ const { data, error } = await apiClient.GET("/api/v1/portfolio", {
9
+ headers: AUTH_HEADERS,
10
+ });
11
+ return unwrap(data, error);
12
+ },
8
13
  };
9
14
  export const getPortfolioHistoryTool = {
10
15
  name: "get_portfolio_history",
@@ -12,7 +17,13 @@ export const getPortfolioHistoryTool = {
12
17
  inputSchema: z.object({
13
18
  days: z.number().int().min(1).max(3650).optional().describe("How many days of history. Server default applies if omitted."),
14
19
  }),
15
- handler: ({ days }) => apiFetch({ path: "/api/v1/portfolio/history", query: { days }, authenticated: true }),
20
+ handler: async ({ days }) => {
21
+ const { data, error } = await apiClient.GET("/api/v1/portfolio/history", {
22
+ params: { query: { days } },
23
+ headers: AUTH_HEADERS,
24
+ });
25
+ return unwrap(data, error);
26
+ },
16
27
  };
17
28
  export const getCardPerformanceTool = {
18
29
  name: "get_card_performance",
@@ -21,19 +32,35 @@ export const getCardPerformanceTool = {
21
32
  type: z.enum(["best", "worst"]).optional(),
22
33
  limit: z.number().int().min(1).max(100).optional(),
23
34
  }),
24
- handler: (input) => apiFetch({ path: "/api/v1/portfolio/performance", query: input, authenticated: true }),
35
+ handler: async (input) => {
36
+ const { data, error } = await apiClient.GET("/api/v1/portfolio/performance", {
37
+ params: { query: input },
38
+ headers: AUTH_HEADERS,
39
+ });
40
+ return unwrap(data, error);
41
+ },
25
42
  };
26
43
  export const getCashFlowTool = {
27
44
  name: "get_cash_flow",
28
45
  description: "Get the user's cash flow (money in vs money out from BUY/SELL transactions). Premium-gated. Requires IWMM_API_KEY.",
29
46
  inputSchema: z.object({}),
30
- handler: () => apiFetch({ path: "/api/v1/portfolio/cash-flow", authenticated: true }),
47
+ handler: async () => {
48
+ const { data, error } = await apiClient.GET("/api/v1/portfolio/cash-flow", {
49
+ headers: AUTH_HEADERS,
50
+ });
51
+ return unwrap(data, error);
52
+ },
31
53
  };
32
54
  export const getRealizedGainsTool = {
33
55
  name: "get_realized_gains",
34
56
  description: "Get the user's realized gains from SELL transactions using FIFO cost basis. Premium-gated. Requires IWMM_API_KEY.",
35
57
  inputSchema: z.object({}),
36
- handler: () => apiFetch({ path: "/api/v1/portfolio/realized-gains", authenticated: true }),
58
+ handler: async () => {
59
+ const { data, error } = await apiClient.GET("/api/v1/portfolio/realized-gains", {
60
+ headers: AUTH_HEADERS,
61
+ });
62
+ return unwrap(data, error);
63
+ },
37
64
  };
38
65
  export const getPortfolioBreakdownTool = {
39
66
  name: "get_portfolio_breakdown",
@@ -43,12 +70,23 @@ export const getPortfolioBreakdownTool = {
43
70
  .enum(["set", "rarity", "type", "format", "cost-basis"])
44
71
  .describe("Dimension to break down by. 'cost-basis' buckets are gain/loss/at-cost."),
45
72
  }),
46
- handler: ({ by }) => apiFetch({ path: "/api/v1/portfolio/breakdown", query: { by }, authenticated: true }),
73
+ handler: async ({ by }) => {
74
+ const { data, error } = await apiClient.GET("/api/v1/portfolio/breakdown", {
75
+ params: { query: { by } },
76
+ headers: AUTH_HEADERS,
77
+ });
78
+ return unwrap(data, error);
79
+ },
47
80
  };
48
81
  export const refreshPortfolioTool = {
49
82
  name: "refresh_portfolio",
50
83
  description: "Recalculate the user's portfolio P&L. Use after recording a batch of transactions if you want immediate fresh numbers. Requires IWMM_API_KEY.",
51
84
  inputSchema: z.object({}),
52
- handler: () => apiFetch({ path: "/api/v1/portfolio/refresh", method: "POST", authenticated: true }),
85
+ handler: async () => {
86
+ const { data, error } = await apiClient.POST("/api/v1/portfolio/refresh", {
87
+ headers: AUTH_HEADERS,
88
+ });
89
+ return unwrap(data, error);
90
+ },
53
91
  };
54
92
  //# sourceMappingURL=portfolio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, unwrap } from "../api-client.js";
3
3
  export const searchCardsInputSchema = {
4
4
  q: z
5
5
  .string()
@@ -26,10 +26,12 @@ export const searchCardsInputSchema = {
26
26
  limit: z.number().int().min(1).max(100).optional().describe("Page size (max 100)."),
27
27
  };
28
28
  export async function searchCards(input) {
29
- return apiFetch({
30
- path: "/api/v1/cards",
31
- query: input,
29
+ // zod validates the query at the tool boundary; the generated spec types
30
+ // most of these params as `unknown`, so cast rather than fight the spec.
31
+ const { data, error } = await apiClient.GET("/api/v1/cards", {
32
+ params: { query: input },
32
33
  });
34
+ return unwrap(data, error);
33
35
  }
34
36
  export const searchCardsTool = {
35
37
  name: "search_cards",
@@ -1 +1 @@
1
- {"version":3,"file":"search-cards.js","sourceRoot":"","sources":["../../src/tools/search-cards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,CAAC,EAAE,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6GAA6G,CAAC;IAC1H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACtF,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,QAAQ,CAAC,mBAAmB,CAAC;IAChC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oEAAoE,CAAC;IACjF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;SACvC,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CACpF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAA8B;IAC9D,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,KAAoD;KAC5D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,oPAAoP;IACtP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAC7C,OAAO,EAAE,WAAW;CACrB,CAAC"}
1
+ {"version":3,"file":"search-cards.js","sourceRoot":"","sources":["../../src/tools/search-cards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,CAAC,EAAE,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6GAA6G,CAAC;IAC1H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACtF,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,QAAQ,CAAC,mBAAmB,CAAC;IAChC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oEAAoE,CAAC;IACjF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;SACvC,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CACpF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAA8B;IAC9D,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE;QAC3D,MAAM,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE;KAClC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,oPAAoP;IACtP,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAC7C,OAAO,EAAE,WAAW;CACrB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, unwrap } from "../api-client.js";
3
3
  export const searchSetsTool = {
4
4
  name: "search_sets",
5
5
  description: "List Magic: The Gathering sets, optionally paginated. Returns set code, name, release date, type, and aggregate prices.",
@@ -7,13 +7,23 @@ export const searchSetsTool = {
7
7
  page: z.number().int().min(1).optional(),
8
8
  limit: z.number().int().min(1).max(100).optional(),
9
9
  }),
10
- handler: (input) => apiFetch({ path: "/api/v1/sets", query: input }),
10
+ handler: async (input) => {
11
+ const { data, error } = await apiClient.GET("/api/v1/sets", {
12
+ params: { query: input },
13
+ });
14
+ return unwrap(data, error);
15
+ },
11
16
  };
12
17
  export const getSetTool = {
13
18
  name: "get_set",
14
19
  description: "Get detail for a single set by code (e.g. 'lea', 'mh3').",
15
20
  inputSchema: z.object({ code: z.string() }),
16
- handler: ({ code }) => apiFetch({ path: `/api/v1/sets/${encodeURIComponent(code)}` }),
21
+ handler: async ({ code }) => {
22
+ const { data, error } = await apiClient.GET("/api/v1/sets/{code}", {
23
+ params: { path: { code } },
24
+ });
25
+ return unwrap(data, error);
26
+ },
17
27
  };
18
28
  export const listSetCardsTool = {
19
29
  name: "list_set_cards",
@@ -27,15 +37,22 @@ export const listSetCardsTool = {
27
37
  page: z.number().int().min(1).optional(),
28
38
  limit: z.number().int().min(1).max(100).optional(),
29
39
  }),
30
- handler: ({ code, ...rest }) => apiFetch({
31
- path: `/api/v1/sets/${encodeURIComponent(code)}/cards`,
32
- query: rest,
33
- }),
40
+ handler: async ({ code, ...rest }) => {
41
+ const { data, error } = await apiClient.GET("/api/v1/sets/{code}/cards", {
42
+ params: { path: { code }, query: rest },
43
+ });
44
+ return unwrap(data, error);
45
+ },
34
46
  };
35
47
  export const getSealedProductsTool = {
36
48
  name: "get_sealed_products",
37
49
  description: "List sealed products (booster boxes, bundles, commander decks, etc.) for a set. Each entry includes a TCGPlayer purchase URL.",
38
50
  inputSchema: z.object({ code: z.string() }),
39
- handler: ({ code }) => apiFetch({ path: `/api/v1/sets/${encodeURIComponent(code)}/sealed-products` }),
51
+ handler: async ({ code }) => {
52
+ const { data, error } = await apiClient.GET("/api/v1/sets/{code}/sealed-products", {
53
+ params: { path: { code } },
54
+ });
55
+ return unwrap(data, error);
56
+ },
40
57
  };
41
58
  //# sourceMappingURL=sets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sets.js","sourceRoot":"","sources":["../../src/tools/sets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,yHAAyH;IAC3H,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,CAAC,KAA8B,EAAE,EAAE,CAC1C,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAoD,EAAE,CAAC;CAClG,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,0DAA0D;IACvE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE,CACtC,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;CACjE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,iHAAiH;IACnH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC9D,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,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAA8C,EAAE,EAAE,CACzE,QAAQ,CAAC;QACP,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,QAAQ;QACtD,KAAK,EAAE,IAAmD;KAC3D,CAAC;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,+HAA+H;IACjI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE,CACtC,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;CACjF,CAAC"}
1
+ {"version":3,"file":"sets.js","sourceRoot":"","sources":["../../src/tools/sets.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { apiFetch } from "../api-client.js";
2
+ import { apiClient, AUTH_HEADERS, unwrap } from "../api-client.js";
3
3
  const transactionCreate = z.object({
4
4
  cardId: z.string().describe("Internal IWMM card UUID."),
5
5
  type: z.enum(["BUY", "SELL"]),
@@ -33,17 +33,25 @@ export const listTransactionsTool = {
33
33
  order: z.enum(["asc", "desc"]).optional(),
34
34
  type: z.enum(["BUY", "SELL"]).optional(),
35
35
  }),
36
- handler: (input) => apiFetch({
37
- path: "/api/v1/transactions",
38
- query: input,
39
- authenticated: true,
40
- }),
36
+ handler: async (input) => {
37
+ const { data, error } = await apiClient.GET("/api/v1/transactions", {
38
+ params: { query: input },
39
+ headers: AUTH_HEADERS,
40
+ });
41
+ return unwrap(data, error);
42
+ },
41
43
  };
42
44
  export const recordTransactionTool = {
43
45
  name: "record_transaction",
44
46
  description: "Record a buy or sell transaction. By default this also adjusts inventory (BUY adds, SELL subtracts). This is a real write. Requires IWMM_API_KEY.",
45
47
  inputSchema: transactionCreate,
46
- handler: (input) => apiFetch({ path: "/api/v1/transactions", method: "POST", body: input, authenticated: true }),
48
+ handler: async (input) => {
49
+ const { data, error } = await apiClient.POST("/api/v1/transactions", {
50
+ body: input,
51
+ headers: AUTH_HEADERS,
52
+ });
53
+ return unwrap(data, error);
54
+ },
47
55
  };
48
56
  export const updateTransactionTool = {
49
57
  name: "update_transaction",
@@ -52,13 +60,26 @@ export const updateTransactionTool = {
52
60
  id: z.number().int().min(1).describe("Transaction ID from list_transactions."),
53
61
  patch: transactionUpdate,
54
62
  }),
55
- handler: ({ id, patch }) => apiFetch({ path: `/api/v1/transactions/${id}`, method: "PATCH", body: patch, authenticated: true }),
63
+ handler: async ({ id, patch }) => {
64
+ const { data, error } = await apiClient.PUT("/api/v1/transactions/{id}", {
65
+ params: { path: { id } },
66
+ body: patch,
67
+ headers: AUTH_HEADERS,
68
+ });
69
+ return unwrap(data, error);
70
+ },
56
71
  };
57
72
  export const deleteTransactionTool = {
58
73
  name: "delete_transaction",
59
74
  description: "Delete a transaction by ID. Requires IWMM_API_KEY.",
60
75
  inputSchema: z.object({ id: z.number().int().min(1) }),
61
- handler: ({ id }) => apiFetch({ path: `/api/v1/transactions/${id}`, method: "DELETE", authenticated: true }),
76
+ handler: async ({ id }) => {
77
+ const { data, error } = await apiClient.DELETE("/api/v1/transactions/{id}", {
78
+ params: { path: { id } },
79
+ headers: AUTH_HEADERS,
80
+ });
81
+ return unwrap(data, error);
82
+ },
62
83
  };
63
84
  export const getCostBasisTool = {
64
85
  name: "get_cost_basis",
@@ -73,12 +94,20 @@ export const getCostBasisTool = {
73
94
  .refine((v) => !!v.cardId || (!!v.setCode && !!v.setNumber), {
74
95
  message: "Provide either cardId, or both setCode and setNumber.",
75
96
  }),
76
- handler: (input) => {
97
+ handler: async (input) => {
77
98
  const query = { isFoil: input.isFoil };
78
- const path = input.cardId
79
- ? `/api/v1/transactions/cost-basis/${encodeURIComponent(input.cardId)}`
80
- : `/api/v1/transactions/cost-basis/${encodeURIComponent(input.setCode)}/${encodeURIComponent(input.setNumber)}`;
81
- return apiFetch({ path, query, authenticated: true });
99
+ if (input.cardId) {
100
+ const { data, error } = await apiClient.GET("/api/v1/transactions/cost-basis/{cardId}", {
101
+ params: { path: { cardId: input.cardId }, query },
102
+ headers: AUTH_HEADERS,
103
+ });
104
+ return unwrap(data, error);
105
+ }
106
+ const { data, error } = await apiClient.GET("/api/v1/transactions/cost-basis/{setCode}/{setNumber}", {
107
+ params: { path: { setCode: input.setCode, setNumber: input.setNumber }, query },
108
+ headers: AUTH_HEADERS,
109
+ });
110
+ return unwrap(data, error);
82
111
  },
83
112
  };
84
113
  //# sourceMappingURL=transactions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { createRequire } from "node:module";
2
+ const require = createRequire(import.meta.url);
3
+ const pkg = require("../package.json");
4
+ export const VERSION = pkg.version;
5
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "iwantmymtg-mcp",
3
- "version": "0.2.0",
3
+ "mcpName": "io.github.matthewdtowles/iwantmymtg-mcp",
4
+ "version": "0.3.1",
4
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.",
5
6
  "type": "module",
6
7
  "bin": {
@@ -11,6 +12,8 @@
11
12
  "README.md"
12
13
  ],
13
14
  "scripts": {
15
+ "build:types": "node scripts/build-types.mjs",
16
+ "prebuild": "npm run build:types",
14
17
  "build": "tsc",
15
18
  "start": "node dist/index.js",
16
19
  "dev": "tsc --watch",
@@ -36,11 +39,13 @@
36
39
  "homepage": "https://iwantmymtg.net",
37
40
  "dependencies": {
38
41
  "@modelcontextprotocol/sdk": "^1.0.0",
42
+ "openapi-fetch": "^0.17.0",
39
43
  "zod": "^3.23.0",
40
44
  "zod-to-json-schema": "^3.23.0"
41
45
  },
42
46
  "devDependencies": {
43
47
  "@types/node": "^20.14.0",
48
+ "openapi-typescript": "^7.13.0",
44
49
  "tsx": "^4.16.0",
45
50
  "typescript": "^5.5.0"
46
51
  }