@acodera/shopify-admin-mcp 1.1.0 → 1.2.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +33 -12
  3. package/dist/graphql/client.js +19 -2
  4. package/dist/graphql/client.js.map +1 -1
  5. package/dist/graphql/schema-index.d.ts +9 -0
  6. package/dist/graphql/schema-index.js +58 -8
  7. package/dist/graphql/schema-index.js.map +1 -1
  8. package/dist/index.js +22 -19
  9. package/dist/index.js.map +1 -1
  10. package/dist/server.d.ts +3 -3
  11. package/dist/server.js +20 -8
  12. package/dist/server.js.map +1 -1
  13. package/dist/tools/collections.js +1 -0
  14. package/dist/tools/collections.js.map +1 -1
  15. package/dist/tools/customers.js +3 -0
  16. package/dist/tools/customers.js.map +1 -1
  17. package/dist/tools/discounts.js +37 -17
  18. package/dist/tools/discounts.js.map +1 -1
  19. package/dist/tools/files.js +2 -1
  20. package/dist/tools/files.js.map +1 -1
  21. package/dist/tools/graphql-proxy.d.ts +2 -1
  22. package/dist/tools/graphql-proxy.js +23 -9
  23. package/dist/tools/graphql-proxy.js.map +1 -1
  24. package/dist/tools/inventory.js +1 -0
  25. package/dist/tools/inventory.js.map +1 -1
  26. package/dist/tools/markets.js +5 -1
  27. package/dist/tools/markets.js.map +1 -1
  28. package/dist/tools/orders.js +3 -0
  29. package/dist/tools/orders.js.map +1 -1
  30. package/dist/tools/products.js +8 -2
  31. package/dist/tools/products.js.map +1 -1
  32. package/dist/tools/publishing.js +2 -1
  33. package/dist/tools/publishing.js.map +1 -1
  34. package/dist/tools/schema-search.d.ts +2 -2
  35. package/dist/tools/schema-search.js +6 -3
  36. package/dist/tools/schema-search.js.map +1 -1
  37. package/dist/tools/theme-guard.d.ts +14 -0
  38. package/dist/tools/theme-guard.js +81 -0
  39. package/dist/tools/theme-guard.js.map +1 -0
  40. package/dist/tools/themes.js +10 -18
  41. package/dist/tools/themes.js.map +1 -1
  42. package/dist/utils/cli.d.ts +2 -0
  43. package/dist/utils/cli.js +27 -10
  44. package/dist/utils/cli.js.map +1 -1
  45. package/package.json +2 -2
@@ -0,0 +1,81 @@
1
+ import { Kind, valueFromASTUntyped, } from "graphql";
2
+ // Mutations that change the files of the theme named by their themeId argument
3
+ const THEME_FILE_MUTATIONS = ["themeFilesUpsert", "themeFilesDelete", "themeFilesCopy"];
4
+ /**
5
+ * Editing the published theme changes the live storefront immediately, so writes go to a
6
+ * duplicate unless the server was started with --allow-live-theme-writes. Returns the reason
7
+ * to refuse the write, or null when it may go ahead.
8
+ */
9
+ export async function liveThemeGuard(client, themeId, allowLiveThemeWrites = false) {
10
+ const res = await client.execute(`query ($id: ID!) { theme(id: $id) { id name role } }`, {
11
+ id: themeId,
12
+ });
13
+ const theme = res.data?.theme;
14
+ if (!theme)
15
+ return `Theme ${themeId} not found`;
16
+ if (theme.role === "MAIN" && !allowLiveThemeWrites) {
17
+ return `"${theme.name}" is the live theme. Duplicate it with shopify_theme_duplicate, edit the copy, and publish it from the Shopify admin. To edit the live theme directly, restart the server with --allow-live-theme-writes.`;
18
+ }
19
+ return null;
20
+ }
21
+ /**
22
+ * Applies the live-theme guard to a raw GraphQL document: theme file writes are checked
23
+ * against the theme they target, and publishing a theme (which replaces the live one) is
24
+ * refused outright. Returns the reason to refuse the document, or null.
25
+ */
26
+ export async function rawLiveThemeGuard(client, document, variables) {
27
+ const themeIds = new Set();
28
+ for (const field of mutationRootFields(document)) {
29
+ const name = field.name.value;
30
+ if (name === "themePublish") {
31
+ return "themePublish replaces the live theme. Publish themes from the Shopify admin, or restart the server with --allow-live-theme-writes.";
32
+ }
33
+ if (!THEME_FILE_MUTATIONS.includes(name))
34
+ continue;
35
+ const arg = field.arguments?.find((a) => a.name.value === "themeId");
36
+ const themeId = arg ? valueFromASTUntyped(arg.value, variables) : undefined;
37
+ if (typeof themeId !== "string") {
38
+ return `Couldn't determine which theme ${name} writes to, so it can't be checked against the live theme`;
39
+ }
40
+ themeIds.add(themeId);
41
+ }
42
+ for (const themeId of themeIds) {
43
+ const blocked = await liveThemeGuard(client, themeId);
44
+ if (blocked)
45
+ return blocked;
46
+ }
47
+ return null;
48
+ }
49
+ // Root fields of every mutation in the document, including those selected through fragments
50
+ function mutationRootFields(document) {
51
+ const fragments = new Map();
52
+ for (const definition of document.definitions) {
53
+ if (definition.kind === Kind.FRAGMENT_DEFINITION)
54
+ fragments.set(definition.name.value, definition);
55
+ }
56
+ const fields = [];
57
+ const visited = new Set();
58
+ const collect = (selectionSet) => {
59
+ for (const selection of selectionSet.selections) {
60
+ if (selection.kind === Kind.FIELD) {
61
+ fields.push(selection);
62
+ }
63
+ else if (selection.kind === Kind.INLINE_FRAGMENT) {
64
+ collect(selection.selectionSet);
65
+ }
66
+ else if (selection.kind === Kind.FRAGMENT_SPREAD && !visited.has(selection.name.value)) {
67
+ visited.add(selection.name.value);
68
+ const fragment = fragments.get(selection.name.value);
69
+ if (fragment)
70
+ collect(fragment.selectionSet);
71
+ }
72
+ }
73
+ };
74
+ for (const definition of document.definitions) {
75
+ if (definition.kind === Kind.OPERATION_DEFINITION && definition.operation === "mutation") {
76
+ collect(definition.selectionSet);
77
+ }
78
+ }
79
+ return fields;
80
+ }
81
+ //# sourceMappingURL=theme-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-guard.js","sourceRoot":"","sources":["../../src/tools/theme-guard.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { DESTRUCTIVE, READ_ONLY, WRITE, pageSize, toolResult, } from "./shared.js";
3
+ import { liveThemeGuard } from "./theme-guard.js";
3
4
  const THEME_ROLES = ["MAIN", "UNPUBLISHED", "DEVELOPMENT", "DEMO", "ARCHIVED", "LOCKED"];
4
5
  const themeFile = z
5
6
  .object({
@@ -19,20 +20,6 @@ function fileBody(file) {
19
20
  function errorResult(message) {
20
21
  return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
21
22
  }
22
- // Editing the published theme changes the live storefront immediately, so writes go to
23
- // a duplicate unless the server was started with --allow-live-theme-writes
24
- async function liveThemeGuard(client, themeId, options) {
25
- const res = await client.execute(`query ($id: ID!) { theme(id: $id) { id name role } }`, {
26
- id: themeId,
27
- });
28
- const theme = res.data?.theme;
29
- if (!theme)
30
- return `Theme ${themeId} not found`;
31
- if (theme.role === "MAIN" && !options.allowLiveThemeWrites) {
32
- return `"${theme.name}" is the live theme. Duplicate it with shopify_theme_duplicate, edit the copy, and publish it from the Shopify admin. To edit the live theme directly, restart the server with --allow-live-theme-writes.`;
33
- }
34
- return null;
35
- }
36
23
  export function registerThemeTools(server, client, options) {
37
24
  server.registerTool("shopify_themes_list", {
38
25
  description: "List the store's online store themes and their roles (MAIN is the live theme)",
@@ -44,6 +31,7 @@ export function registerThemeTools(server, client, options) {
44
31
  const result = await client.execute(`query ($roles: [ThemeRole!]) {
45
32
  themes(first: 50, roles: $roles) {
46
33
  nodes { id name role processing processingFailed themeStoreId createdAt updatedAt }
34
+ pageInfo { hasNextPage }
47
35
  }
48
36
  }`, { roles });
49
37
  return toolResult(result);
@@ -73,7 +61,7 @@ export function registerThemeTools(server, client, options) {
73
61
  return toolResult(result);
74
62
  });
75
63
  server.registerTool("shopify_theme_files_get", {
76
- description: "Read the content of specific theme files (text files return content, binary files return base64 or a URL)",
64
+ description: "Read the content of specific theme files (text files return content, binary files return base64 or a URL). Up to 50 files are returned; pageInfo.hasNextPage shows when a pattern matched more.",
77
65
  inputSchema: {
78
66
  themeId: z.string().describe("Theme GID"),
79
67
  filenames: z
@@ -96,11 +84,15 @@ export function registerThemeTools(server, client, options) {
96
84
  ... on OnlineStoreThemeFileBodyUrl { url }
97
85
  }
98
86
  }
87
+ pageInfo { hasNextPage }
99
88
  userErrors { code filename }
100
89
  }
101
90
  }
102
91
  }`, { id: themeId, filenames });
103
- return toolResult(result);
92
+ // Files that can't be read are reported on the connection rather than a mutation payload
93
+ const files = result.data?.theme?.files;
94
+ const response = toolResult(result);
95
+ return files?.userErrors?.length ? { ...response, isError: true } : response;
104
96
  });
105
97
  server.registerTool("shopify_theme_files_upsert", {
106
98
  description: "Create or overwrite up to 50 files in a theme. Writes to the live (MAIN) theme are refused unless the server allows them; duplicate the theme first.",
@@ -110,7 +102,7 @@ export function registerThemeTools(server, client, options) {
110
102
  },
111
103
  annotations: WRITE,
112
104
  }, async ({ themeId, files }) => {
113
- const blocked = await liveThemeGuard(client, themeId, options);
105
+ const blocked = await liveThemeGuard(client, themeId, options.allowLiveThemeWrites);
114
106
  if (blocked)
115
107
  return errorResult(blocked);
116
108
  const result = await client.execute(`mutation ($themeId: ID!, $files: [OnlineStoreThemeFilesUpsertFileInput!]!) {
@@ -130,7 +122,7 @@ export function registerThemeTools(server, client, options) {
130
122
  },
131
123
  annotations: DESTRUCTIVE,
132
124
  }, async ({ themeId, filenames }) => {
133
- const blocked = await liveThemeGuard(client, themeId, options);
125
+ const blocked = await liveThemeGuard(client, themeId, options.allowLiveThemeWrites);
134
126
  if (blocked)
135
127
  return errorResult(blocked);
136
128
  const result = await client.execute(`mutation ($themeId: ID!, $files: [String!]!) {
@@ -1 +1 @@
1
- {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/tools/themes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/tools/themes.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export interface Config {
9
9
  /** Directory that local file uploads are confined to; undefined disables local uploads. */
10
10
  uploadDir?: string;
11
11
  allowLiveThemeWrites: boolean;
12
+ /** Leaves out shopify_graphql so the selected toolsets are the only way to reach the store. */
13
+ disableRawGraphql: boolean;
12
14
  auth: {
13
15
  mode: "access-token";
14
16
  accessToken: string;
package/dist/utils/cli.js CHANGED
@@ -17,15 +17,28 @@ export const DEFAULT_API_VERSION = "2026-10";
17
17
  // Restricting the host to *.myshopify.com keeps credentials from being sent to any other domain
18
18
  const STORE_PATTERN = /^[a-z0-9][a-z0-9-]*\.myshopify\.com$/;
19
19
  const API_VERSION_PATTERN = /^(\d{4}-(01|04|07|10)|unstable)$/;
20
+ // A whole-value variable reference such as ${SHOPIFY_CLIENT_ID}, ${VAR:-default}, or $VAR
21
+ const UNEXPANDED_VARIABLE = /^\$(\{[^}]*\}|[A-Za-z_][A-Za-z0-9_]*)$/;
22
+ // MCP clients that don't expand variables pass ${VAR} through literally, and unset
23
+ // variables often arrive as empty strings. Treating both as "not provided" lets one
24
+ // config carry both auth methods and use whichever is filled in.
25
+ function provided(value) {
26
+ const trimmed = value?.trim();
27
+ if (!trimmed || UNEXPANDED_VARIABLE.test(trimmed))
28
+ return undefined;
29
+ return trimmed;
30
+ }
20
31
  function getArg(args, flag) {
21
32
  const idx = args.indexOf(flag);
22
33
  if (idx === -1 || idx + 1 >= args.length)
23
34
  return undefined;
24
- return args[idx + 1];
35
+ return provided(args[idx + 1]);
36
+ }
37
+ function getEnv(name) {
38
+ return provided(process.env[name]);
25
39
  }
26
40
  function getFlag(args, flag, envVar) {
27
- return (args.includes(flag) ||
28
- ["1", "true"].includes(process.env[envVar]?.toLowerCase() ?? ""));
41
+ return args.includes(flag) || ["1", "true"].includes(getEnv(envVar)?.toLowerCase() ?? "");
29
42
  }
30
43
  function fail(message) {
31
44
  console.error(`Error: ${message}`);
@@ -50,18 +63,18 @@ function parseToolsets(value) {
50
63
  return names;
51
64
  }
52
65
  export function parseArgs(argv) {
53
- const store = getArg(argv, "--store") ?? process.env.SHOPIFY_STORE;
66
+ const store = getArg(argv, "--store") ?? getEnv("SHOPIFY_STORE");
54
67
  const accessTokenArg = getArg(argv, "--access-token");
55
- const accessToken = accessTokenArg ?? process.env.SHOPIFY_ACCESS_TOKEN;
68
+ const accessToken = accessTokenArg ?? getEnv("SHOPIFY_ACCESS_TOKEN");
56
69
  const clientId = getArg(argv, "--client-id") ??
57
70
  getArg(argv, "--clientId") ??
58
- process.env.SHOPIFY_CLIENT_ID;
71
+ getEnv("SHOPIFY_CLIENT_ID");
59
72
  const clientSecretArg = getArg(argv, "--client-secret") ?? getArg(argv, "--clientSecret");
60
- const clientSecret = clientSecretArg ?? process.env.SHOPIFY_CLIENT_SECRET;
73
+ const clientSecret = clientSecretArg ?? getEnv("SHOPIFY_CLIENT_SECRET");
61
74
  const apiVersion = getArg(argv, "--api-version") ??
62
- process.env.SHOPIFY_API_VERSION ??
75
+ getEnv("SHOPIFY_API_VERSION") ??
63
76
  DEFAULT_API_VERSION;
64
- const uploadDir = getArg(argv, "--upload-dir") ?? process.env.SHOPIFY_UPLOAD_DIR;
77
+ const uploadDir = getArg(argv, "--upload-dir") ?? getEnv("SHOPIFY_UPLOAD_DIR");
65
78
  if (!store)
66
79
  fail("--store is required (e.g. --store mystore.myshopify.com)");
67
80
  const normalizedStore = normalizeStore(store);
@@ -78,9 +91,10 @@ export function parseArgs(argv) {
78
91
  store: normalizedStore,
79
92
  apiVersion,
80
93
  readOnly: getFlag(argv, "--read-only", "SHOPIFY_READ_ONLY"),
81
- toolsets: parseToolsets(getArg(argv, "--toolsets") ?? process.env.SHOPIFY_TOOLSETS),
94
+ toolsets: parseToolsets(getArg(argv, "--toolsets") ?? getEnv("SHOPIFY_TOOLSETS")),
82
95
  uploadDir: uploadDir ? path.resolve(uploadDir) : undefined,
83
96
  allowLiveThemeWrites: getFlag(argv, "--allow-live-theme-writes", "SHOPIFY_ALLOW_LIVE_THEME_WRITES"),
97
+ disableRawGraphql: getFlag(argv, "--disable-raw-graphql", "SHOPIFY_DISABLE_RAW_GRAPHQL"),
84
98
  };
85
99
  if (accessToken) {
86
100
  return { ...base, auth: { mode: "access-token", accessToken } };
@@ -91,6 +105,9 @@ export function parseArgs(argv) {
91
105
  auth: { mode: "client-credentials", clientId, clientSecret },
92
106
  };
93
107
  }
108
+ if (clientId || clientSecret) {
109
+ fail(`Client credentials are incomplete: ${clientId ? "SHOPIFY_CLIENT_SECRET (--client-secret)" : "SHOPIFY_CLIENT_ID (--client-id)"} is missing`);
110
+ }
94
111
  fail("Provide either --access-token or both --client-id and --client-secret");
95
112
  }
96
113
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acodera/shopify-admin-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server providing full access to Shopify's Admin GraphQL API with schema introspection",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@modelcontextprotocol/sdk": "^1.32.1",
29
- "graphql": "^16.14.2",
29
+ "graphql": "^17.0.2",
30
30
  "zod": "^4.6.5"
31
31
  },
32
32
  "devDependencies": {